<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>Michael Falconer</title><link>http://www.michaelfalconer.co.uk/</link><description>the difficult takes time, the impossible just a little longer</description><managingEditor>Michael Falconer</managingEditor><dc:language>en-GB</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>Michael Falconer</dc:creator><title>Threat Modeling Web Applications</title><link>http://www.michaelfalconer.co.uk/archive/2005/05/18/227.aspx</link><pubDate>Wed, 18 May 2005 13:28:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2005/05/18/227.aspx</guid><description>&lt;P&gt;Well, felt it was finally time to start posting again. I've been working on quite a few interesting applications over the past few months, so I hope to add some useful posts soon.&lt;/P&gt;
&lt;P&gt;In the meantime there's an &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/tmwa.asp"&gt;interesting new series of posts&lt;/A&gt; on &lt;A title="Microsoft Developer Network" href="http://msdn.microsoft.com" target=_blank&gt;MSDN&lt;/A&gt; about developing threat models for web applications. While you may be aware of most of the threats, and the steps to prevent them becoming attacks, it's always good to review your knowledge, and to read about formalising the processes you hopefully already go through.&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/227.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>ViewStateUserKey</title><link>http://www.michaelfalconer.co.uk/archive/2005/02/13/220.aspx</link><pubDate>Sun, 13 Feb 2005 12:04:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2005/02/13/220.aspx</guid><description>&lt;P&gt;While reading through an article titled '&lt;A href="http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnaspp/html/securitybarriers.asp"&gt;Take Advantage of &lt;a title="ASP.NET" href="http://www.asp.net" target="_blank"&gt;ASP.NET&lt;/a&gt; Built-in Features to Fend Off Web Attacks&lt;/A&gt;' on &lt;a title="Microsoft Developer Network" href="http://msdn.microsoft.com" target="_blank"&gt;MSDN&lt;/a&gt; recently, I came across a new property for the Page class I'd never noticed before: ViewStateUserKey. The documentation for this property states:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;Assigns an identifier to an individual user in the view state variable associated with the current page&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;It turns out what this can be used for is to add a user specific string to the ViewState of a Page which can be verified on PostBack. Why? This means you can be sure that any form information submitted came from the same user who requested the original page, thus preventing one-click attacks.&lt;/P&gt;
&lt;P&gt;I highly recommend you read &lt;A href="http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnaspp/html/securitybarriers.asp"&gt;the article above&lt;/A&gt;&amp;nbsp;for more information, and for techniques to prevent other common attacks...&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/220.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>Enterprise Library Released</title><link>http://www.michaelfalconer.co.uk/archive/2005/01/31/217.aspx</link><pubDate>Mon, 31 Jan 2005 13:59:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2005/01/31/217.aspx</guid><description>&lt;P&gt;As &lt;A href="http://weblogs.asp.net/rosherove/archive/2005/01/29/362843.aspx"&gt;pointed out&lt;/A&gt; by &lt;A href="http://weblogs.asp.net/rosherove/"&gt;Roy Osherove&lt;/A&gt;, the new Enterprise Library for .net has been released. It basically encapsulated the application blocks that were previously released separately:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Caching Application Block 
&lt;LI&gt;Configuration Application Block 
&lt;LI&gt;Data Access Application Block
&lt;LI&gt;Cryptography Application Block 
&lt;LI&gt;Exception Handling Application Block 
&lt;LI&gt;Logging and Instrumentation Application Block
&lt;LI&gt;Security Application Block&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;It may only be a 'stopgap' until the launch of .net v2, but I for one am planning to make use of it. I've been making use of four of the blocks, and have been looking forward to an update that fixes many of the known issues. So I'll let you know how I get on with it.&lt;/P&gt;
&lt;P&gt;You can &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/entlib.asp"&gt;download it from &lt;a title="Microsoft Developer Network" href="http://msdn.microsoft.com" target="_blank"&gt;MSDN&lt;/a&gt;&lt;/A&gt;.&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/217.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>Website Accessiblity - Simulating Colour Blindness</title><link>http://www.michaelfalconer.co.uk/archive/2004/11/26/208.aspx</link><pubDate>Fri, 26 Nov 2004 11:49:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/11/26/208.aspx</guid><description>&lt;P&gt;Ever wondered how your site looks to someone who is colourblind? Then try the &lt;A href="http://www.vischeck.com/vischeck/"&gt;Vischeck&lt;/A&gt; &lt;A href="http://www.vischeck.com/vischeck/vischeckURL.php"&gt;on a webpage&lt;/A&gt;. It's free and, with 1 in 20 people having some sort of colour vision deficiency, makes for interesting viewing.&lt;/P&gt;
&lt;P&gt;Here's how this site looks:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.michaelfalconer.co.uk/Images/mf-colour.gif" target=_blank&gt;&lt;IMG src="/Images/mf-colour_t.gif" border=0&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/208.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>.Net helper class for SQL Server Full Text Search</title><link>http://www.michaelfalconer.co.uk/archive/2004/11/10/207.aspx</link><pubDate>Wed, 10 Nov 2004 09:42:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/11/10/207.aspx</guid><description>&lt;P&gt;I've made use of SQL Servers ability to run a full text search in a couple of projects recently&amp;nbsp;and wrote a little helper class that takes a typical search phrase and creates the tsql statement that you can then pass into a CONTAINSTABLE clause. Basically it looks either for words separated by a space, or a phrase with quotes around it, or a mixture of both.&lt;/P&gt;
&lt;P&gt;There is one limitation in this implementation; the noise words are hard coded into a string array. It would be better to read in the contents of the noise word file that SQL Server uses, but in some shared hosting arrangements you may not have access to the file.&lt;/P&gt;
&lt;STYLE type=text/css&gt;.cf { font-family: Courier New; font-size: 10pt; color: #000000; background: #ffffff; border-top: windowtext 1pt solid; padding-top: 0pt; border-left: windowtext 1pt solid; padding-left: 0pt; border-right: windowtext 1pt solid; padding-right: 0pt; border-bottom: windowtext 1pt solid; padding-bottom: 0pt; }.cl { margin: 0px; MARGIN: 0px; }.cln { color: #008080; background: #ffffff; }.cb1 { color: #0000ff; }.cb2 { color: #808080; }.cb3 { color: #008000; }&lt;/STYLE&gt;

&lt;DIV class=cf&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;using&lt;/SPAN&gt;&lt;SPAN&gt; System.Collections;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;namespace&lt;/SPAN&gt;&lt;SPAN&gt; CamelJones.Data.Utils&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;5&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;{&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;6&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;7&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Helper object for converting a search string into a&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;8&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Full Text Search query, used in a CONTAINSTABLE clause.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;9&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;10&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; class&lt;/SPAN&gt;&lt;SPAN&gt; SqlFtsHelper&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;11&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;12&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #region&lt;/SPAN&gt;&lt;SPAN&gt; Private Members&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;13&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;14&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt; _searchPhrase;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;15&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt; _ftsQuery;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;16&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN&gt; ArrayList _ignoredWords = &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;new&lt;/SPAN&gt;&lt;SPAN&gt; ArrayList();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;17&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt;[] _noiseWords = &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;new&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt;[] {"about","after","all","also","an","and","another","any","are","as","at","be","because","been","before","being","between","both","but","by","came","can","come","could","did","do","each","for","from","get","got","has","had","he","have","her","here","him","himself","his","how","if","in","into","is","it","like","make","many","me","might","more","most","much","must","my","never","now","of","on","only","or","other","our","out","over","said","same","see","should","since","some","still","such","take","than","that","the","their","them","then","there","these","they","this","those","through","to","too","under","up","very","was","way","we","well","were","what","where","which","while","who","with","would","you","your"};&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;18&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;19&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;20&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;21&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #region&lt;/SPAN&gt;&lt;SPAN&gt; Constructors&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;22&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;23&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;24&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Constructor for the SqlFtsHelper object&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;25&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;26&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="query"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;The search string that is to be used to create the Full Text Search query&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;27&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN&gt; SqlFtsHelper(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; searchPhrase)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;28&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;29&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _searchPhrase = searchPhrase;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;30&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; BuildFTSQuery();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;31&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;32&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;33&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;34&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;35&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #region&lt;/SPAN&gt;&lt;SPAN&gt; Public Methods&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;36&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;37&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;38&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; The query string that was passed in to be used for the Full Text Search&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;39&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;40&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt; SearchPhrase&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;41&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;42&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;get&lt;/SPAN&gt;&lt;SPAN&gt; { &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN&gt; _searchPhrase; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;43&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;44&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;45&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;46&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; The T-SQL statement to be used as the contains_search_condition parameter&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;47&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; of a CONTAINSTABLE query&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;48&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;49&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; string&lt;/SPAN&gt;&lt;SPAN&gt; FTSQuery&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;50&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;51&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;get&lt;/SPAN&gt;&lt;SPAN&gt; { &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN&gt; _ftsQuery; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;52&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;53&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;54&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;55&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; An array of any noise words that were included in the search string&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;56&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;57&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;public&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; object&lt;/SPAN&gt;&lt;SPAN&gt;[] IgnoredWords&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;58&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;59&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;get&lt;/SPAN&gt;&lt;SPAN&gt; { &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN&gt; _ignoredWords.ToArray(); }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;60&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;61&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;62&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;63&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;64&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #region&lt;/SPAN&gt;&lt;SPAN&gt; Private Methods&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;65&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;66&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;67&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Builds the Full Text Search query&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;68&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;69&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; void&lt;/SPAN&gt;&lt;SPAN&gt; BuildFTSQuery()&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;70&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;71&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = "";&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;72&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; cleanQuery = _searchPhrase;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;73&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;74&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Strip out comments, wildcards&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;75&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Replace("--","");&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;76&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Replace("*","");&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;77&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Replace("%","");&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;78&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;79&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Rather than simply split the string, walk&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;80&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// through it looking for phrases or individual&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;81&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// words&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;82&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Trim();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;83&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;while&lt;/SPAN&gt;&lt;SPAN&gt;(cleanQuery.Length&amp;gt;0)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;84&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;85&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// If this is the only word&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;86&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(cleanQuery.IndexOf('"')==-1 &amp;amp;&amp;amp; cleanQuery.IndexOf(' ')==-1)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;87&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;88&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(!CheckNoiseWord(cleanQuery))&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;89&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;90&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FTSAddWord(cleanQuery);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;91&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;92&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;break&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;93&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;94&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;95&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Get the next word/phrase&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;96&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(!cleanQuery.StartsWith("\""))&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;97&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;98&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Get the word from the search string&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;99&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;int&lt;/SPAN&gt;&lt;SPAN&gt; end = cleanQuery.IndexOf(" ");&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;100&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(end&amp;lt;=0){end = cleanQuery.Length;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;101&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; theWord = cleanQuery.Substring(0,end);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;102&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;103&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Check it's not a noise word&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;104&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(!CheckNoiseWord(theWord))&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;105&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;106&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FTSAddWord(theWord);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;107&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;108&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;109&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Remove the word from the search string&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;110&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Remove(0,end);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;111&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Trim();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;112&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;continue&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;113&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;114&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;115&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;116&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// A phrase&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;117&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;int&lt;/SPAN&gt;&lt;SPAN&gt; end = cleanQuery.IndexOf('"',1) + 1;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;118&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(end&amp;lt;=1){end = cleanQuery.Length;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;119&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; FTSAddPhrase(cleanQuery.Substring(0,end));&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;120&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Remove(0,end);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;121&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; cleanQuery = cleanQuery.Trim();&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;122&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;continue&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;123&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;124&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;125&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;126&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;127&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;128&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Checks a string for noise words and, if any exist,&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;129&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; removes them from the string and adds them to the&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;130&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; array of ignored words.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;131&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;132&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="word"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;the word to check&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;133&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;returns&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;true if the word is a noise word, otherwise false&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;134&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; bool&lt;/SPAN&gt;&lt;SPAN&gt; CheckNoiseWord(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; word)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;135&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;136&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(IsNoiseWord(word))&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;137&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;138&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _ignoredWords.Add(word);&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;139&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;140&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;141&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;142&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;143&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;144&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;145&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Add an individual word to the query&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;146&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;147&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="word"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;the word to be added&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;148&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; void&lt;/SPAN&gt;&lt;SPAN&gt; FTSAddWord(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; word)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;149&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;150&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(_ftsQuery.Length&amp;gt;0)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;151&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;152&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = _ftsQuery + " AND ";&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;153&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;154&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = _ftsQuery + "FORMSOF(INFLECTIONAL, " + word + ")";&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;155&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;156&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;157&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;158&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Add a phrase to the FTS query&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;159&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;160&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="phrase"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;the phrase to be added&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;161&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; void&lt;/SPAN&gt;&lt;SPAN&gt; FTSAddPhrase(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; phrase)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;162&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;163&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(_ftsQuery.Length&amp;gt;0)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;164&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;165&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = _ftsQuery + " AND ";&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;166&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;167&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; _ftsQuery = _ftsQuery + phrase;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;168&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;169&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;170&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;171&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb3&gt; Checks if the word is a noise word&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;172&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;/summary&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;173&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;param name="word"&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;the word to check&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/param&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;174&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb2&gt;///&lt;/SPAN&gt;&lt;SPAN class=cb2&gt; &amp;lt;returns&amp;gt;&lt;/SPAN&gt;&lt;SPAN class=cb3&gt;true if it is a noise word, otherwise false&lt;/SPAN&gt;&lt;SPAN class=cb2&gt;&amp;lt;/returns&amp;gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;175&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;private&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; bool&lt;/SPAN&gt;&lt;SPAN&gt; IsNoiseWord(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; word)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;176&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;177&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Exclude individual characters&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;178&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(word.Length&amp;gt;1)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;179&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;180&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// Iterate through the string array of noise words,&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;181&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb3&gt;// and check the word parameter does not match&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;182&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;foreach&lt;/SPAN&gt;&lt;SPAN&gt;(&lt;/SPAN&gt;&lt;SPAN class=cb1&gt;string&lt;/SPAN&gt;&lt;SPAN&gt; item &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;in&lt;/SPAN&gt;&lt;SPAN&gt; _noiseWords)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;183&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;184&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;if&lt;/SPAN&gt;&lt;SPAN&gt;(word==item)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;185&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; {&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;186&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;187&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;188&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;189&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;190&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; false&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;191&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;192&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;193&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/SPAN&gt;&lt;SPAN class=cb1&gt;return&lt;/SPAN&gt;&lt;SPAN class=cb1&gt; true&lt;/SPAN&gt;&lt;SPAN&gt;;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;194&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; &amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;195&lt;/SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;196&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN class=cb1&gt;&amp;nbsp; &amp;nbsp; #endregion&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;197&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;&amp;nbsp; }&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=cl&gt;&lt;SPAN class=cln&gt;&amp;nbsp;&amp;nbsp;198&lt;/SPAN&gt;&amp;nbsp;&lt;SPAN&gt;}&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;P&gt;P.S. The code snippet above was formatted using the CopySourceAsHtml VS addin by &lt;A href="http://www.jtleigh.com/people/colin/blog/"&gt;Colin Coller&lt;/A&gt;.&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/207.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>New site - journalonline.co.uk</title><link>http://www.michaelfalconer.co.uk/archive/2004/10/25/205.aspx</link><pubDate>Mon, 25 Oct 2004 12:07:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/10/25/205.aspx</guid><description>&lt;P&gt;Last week a site I've been working on for a couple of months went live - &lt;A href="http://www.journalonline.co.uk"&gt;www.journalonline.co.uk&lt;/A&gt;. Developed for the &lt;A href="http://www.lawscot.org.uk"&gt;Law Society of Scotland&lt;/A&gt; and working with &lt;A href="http://www.connectcommunications.co.uk"&gt;Connect Communications&lt;/A&gt;, the site is an online resource of information that appears in the printed magazine 'The Journal'.&lt;/P&gt;
&lt;P&gt;The site is entirely developed in &lt;A title=ASP.NET href="http://www.asp.net" target=_blank&gt;ASP.NET&lt;/A&gt; (using c#) and has a SQL Server 2000 backend. I made use of &lt;A href="http://www.wilsondotnet.com"&gt;Paul Wilson's&lt;/A&gt; &lt;A href="http://authors.aspalliance.com/PaulWilson/Articles/?id=14"&gt;master pages&lt;/A&gt; for maintaining the site templates, and also used the Data Provider and &lt;A href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/cmab.asp"&gt;Configuration Management&lt;/A&gt; application blocks. Note that if you plan to use the Configuration Management application blosk, I strongly recommend you check out the forum on the gotdotnet site where the component is hosted - there are a number of known issues with it.&lt;/P&gt;
&lt;P&gt;The search facility provided on the site (to search the library of articles) makes use of a Full Text Index. Having used Index Server a number of times in the past to provide search facilities,&amp;nbsp;I understood the ease of integration this approach would offer, and the in built facility for ranking results. It was also a low cost solution, as no third party software was required. The main downside can be the performance of the index population, but in this case that wasn't an issue as the frequency of updates was low.&lt;/P&gt;
&lt;P&gt;The backend of the system also uses &lt;A href="http://www.freetextbox.com"&gt;FreeTextBox&lt;/A&gt; (the same component used to manage this blog!).&lt;/P&gt;
&lt;P&gt;Feel free to have a look and let me know what you think!&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/205.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>ASP.NET security vulnerability</title><link>http://www.michaelfalconer.co.uk/archive/2004/10/07/204.aspx</link><pubDate>Thu, 07 Oct 2004 10:57:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/10/07/204.aspx</guid><description>&lt;P&gt;As everyone by now hopefully knows, there is a &lt;A href="http://www.microsoft.com/security/incident/aspnet.mspx"&gt;vulnerability in &lt;a title="ASP.NET" href="http://www.asp.net" target="_blank"&gt;ASP.NET&lt;/a&gt;&lt;/A&gt; that could allow an attacker to bypass security and access secured content.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://support.microsoft.com/?kbid=887459"&gt;The fix&lt;/A&gt; is relatively straightforward, and there will hopefully be a proper patch from MS soon...&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/204.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>Rant: Norton Internet Security blocks banner images</title><link>http://www.michaelfalconer.co.uk/archive/2004/09/30/203.aspx</link><pubDate>Thu, 30 Sep 2004 13:53:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/09/30/203.aspx</guid><description>&lt;P&gt;I site I've just finished developing was launched yesterday, but there were some reports that the main banner image wasn't displaying. The image was called banner.gif, and after recreating the image (to check it wasn't corrupt) and trying a jpeg version&amp;nbsp;it finally turns out this was getting blocked by Norton Internet Security.&lt;/P&gt;
&lt;P&gt;Now, this strikes me as being incredibly stupid and pointless on the part of Norton (aka Symantec). They're trying to block banner ads, yes, but by filename?!?!?! Correct me if I'm wrong, but if you had banner ads that you suddenly found out couldn't have banner in the filename, wouldn't you just rename them?&lt;/P&gt;
&lt;P&gt;So what's the point in blocking by filename?&amp;nbsp;All they achieve is potentially breaking the look of a lot of sites, as I'm sure banner isn't an uncommon thing to call the banner image for a site, and causing poor web developers a headache until they figure it out.....&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/203.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>Microsoft granted patent for tabbing through web links</title><link>http://www.michaelfalconer.co.uk/archive/2004/09/17/202.aspx</link><pubDate>Fri, 17 Sep 2004 17:48:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/09/17/202.aspx</guid><description>&lt;P&gt;Now, I can appreciate why companies want to protect their property and inventions as such, but when you can &lt;A href="http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&amp;amp;Sect2=HITOFF&amp;amp;d=PALL&amp;amp;p=1&amp;amp;u=/netahtml/srchnum.htm&amp;amp;r=1&amp;amp;f=G&amp;amp;l=50&amp;amp;s1=6,785,865.WKU.&amp;amp;OS=PN/6,785,865&amp;amp;RS=PN/6,785,865" target=_blank&gt;patent tabbing through web links&lt;/A&gt; (&lt;A href="http://www.out-law.com/php/page.php?page_id=microsoftpatentswe1095169603&amp;amp;area=news" target=_blank&gt;as reported&lt;/A&gt; on &lt;A href="http://www.out-law.com" target=_blank&gt;out-law.com&lt;/A&gt;), there is something well wrong with the system.&lt;/P&gt;
&lt;P&gt;I&amp;nbsp;can only hope that Microsoft don't try and enforce this, unlike the &lt;A href="http://www.out-law.com/php/page.php?page_id=btrevealsitshyper961497691" target=_blank&gt;BT Hyperlink&lt;/A&gt; case. After all, tabbing is one of the key methods for navigating sites without using a mouse...&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/202.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>Michael Falconer</dc:creator><title>Page Centering using CSS</title><link>http://www.michaelfalconer.co.uk/archive/2004/09/15/201.aspx</link><pubDate>Wed, 15 Sep 2004 15:35:00 GMT</pubDate><guid>http://www.michaelfalconer.co.uk/archive/2004/09/15/201.aspx</guid><description>&lt;P&gt;In my recent exploits using only CSS and HTML to layout a web page, I've noticed that I couldn't get a whole page to appear centrally on a page in IE5 or 5.5. This, of course, used to be dead easy when using table layouts.&lt;/P&gt;
&lt;P&gt;Well, I've come across &lt;A href="http://www.simplebits.com/notebook/2004/09/08/centering.html"&gt;the solution&lt;/A&gt; on &lt;A href="http://www.simplebits.com/"&gt;SimpleBits&lt;/A&gt;. Although I use a container DIV to centre the page in other browsers, IE5 and 5.5 needs the page text-align attribute set to center. Nice and easy!!&lt;/P&gt;&lt;img src ="http://www.michaelfalconer.co.uk/aggbug/201.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>