<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8368903452110712122</id><updated>2012-02-17T04:31:28.160+02:00</updated><category term='C#'/><category term='unregister'/><category term='vsftpd'/><category term='interop'/><category term='State'/><category term='register'/><category term='Lucene'/><category term='SQL'/><category term='shell'/><category term='Full-Text'/><category term='FTP'/><category term='SQL 2005 rename instance'/><category term='Linux'/><category term='COM'/><category term='VS2005'/><category term='Execution Order'/><category term='Unit Testing'/><category term='context menu'/><category term='Searching'/><category term='VS2008'/><category term='.NET'/><category term='Open Source'/><title type='text'>A. Christov's Blog</title><subtitle type='html'>This is not a private blog anymore. You are welcome to visit, read, and comment.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://achristovsblog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://achristovsblog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alexander Christov</name><uri>http://www.blogger.com/profile/08328514701971536145</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VFlpKlSjIA8/SRb5cl4mJpI/AAAAAAAAAK4/sy-_FpwnMNw/S220/image001.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8368903452110712122.post-1917344334744166775</id><published>2009-11-25T18:57:00.006+02:00</published><updated>2009-11-25T19:36:07.341+02:00</updated><title type='text'>FCKEditor Image Browse</title><content type='html'>Often, instead of "hard coding" a html page I decide to allow site's owner to enter and change contents himself. FCKEditor is a great open source tool that allows for text (and not only!) editing much like desktop word processors. It also allows inserting images within the text. &lt;div&gt;Despite the capabilities the built-in file manager offers sometimes a custom file manager/file uploader is needed.&lt;/div&gt;&lt;div&gt;I develop ASP.NET sites so I needed a "bridge" between the HTML/javascript coded FCKEditor and the ASP.NET code.&lt;/div&gt;&lt;div&gt;First of all, however, I needed means to control whether the "Browse Server" button is displayed in the dialog.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_VFlpKlSjIA8/Sw1lDo1Fg1I/AAAAAAAAAOc/kwdqijZfAuY/s1600/FCKImageProperties.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 360px;" src="http://3.bp.blogspot.com/_VFlpKlSjIA8/Sw1lDo1Fg1I/AAAAAAAAAOc/kwdqijZfAuY/s400/FCKImageProperties.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5408089840715924306" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This property is set in fckconfig.js located in fckeditor folder. The property is &lt;pre&gt;FCKConfig.ImageBrowser = true;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;and is set to "true" by default.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;More interesting is, nowever, to change what this button displays and therefore change the way images are accessed. One common way to store images is in MSSQL server in which case the default image browsing as well image uploading is useless.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If we can display a plain ASP.NET page it is enough as a starting point to solving the problem.  The .NET "wrapper" which allows instantiating FCKEditor(s) on a ASP.NET page has a property called "ImageBrowserURL". This property holds the URL of the page that can embed the required functionality.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So far so good, but we also need to pass the URL of the selected image back to the dialog and finaly to insert it in the HTML script. Fortunately this can be done by a call to the SetUrl() function located in fckeditor\editor\dialog\fck_image\fck_image.js.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The following code snippet is all that is needed:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre; "&gt;function PassSelectedItem() {&lt;/span&gt;&lt;/div&gt;&lt;pre&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;var url = document.getElementById('TextBoxImageUrl').value;&lt;br /&gt; window.opener.SetUrl(url);&lt;br /&gt; window.close();&lt;br /&gt; return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; white-space: normal; font-size: 16px; "&gt;It is embedded in the ASP.NET page and is executed OnClientClick of a button, which submits the selected image URL back to the dialog.&lt;/span&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre; "&gt;TextBoxImageUrl&lt;span class="Apple-style-span" style="font-family: Georgia, serif; white-space: normal; font-size: 16px; "&gt;  is the name of the TextBox control holding the selected image URL.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8368903452110712122-1917344334744166775?l=achristovsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/1917344334744166775'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/1917344334744166775'/><link rel='alternate' type='text/html' href='http://achristovsblog.blogspot.com/2009/11/fckeditor-image-browse.html' title='FCKEditor Image Browse'/><author><name>Alexander Christov</name><uri>http://www.blogger.com/profile/08328514701971536145</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VFlpKlSjIA8/SRb5cl4mJpI/AAAAAAAAAK4/sy-_FpwnMNw/S220/image001.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_VFlpKlSjIA8/Sw1lDo1Fg1I/AAAAAAAAAOc/kwdqijZfAuY/s72-c/FCKImageProperties.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8368903452110712122.post-1861160195758128864</id><published>2009-06-23T11:08:00.005+03:00</published><updated>2009-06-23T11:30:52.347+03:00</updated><title type='text'>Oh, those Indians!</title><content type='html'>... or how a reputation of a IT pro is built.&lt;br /&gt;&lt;br /&gt;For a reason I had to digg into some details on using Eval() and Bind() in a web page. Almost immediately I came to the following post: &lt;a href="http://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx"&gt;http://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx&lt;/a&gt;&lt;br /&gt;Eilon Lipton explains briefly but very convincingly the diffrence between Eval() and Bind(). I needed some more details so I continued searching the web.&lt;br /&gt;To my surprise I came to this two answers in dotnetspider's forum:&lt;a href="http://weblogs.asp.net/leftslipper/archive/2007/06/29/how-asp-net-databinding-deals-with-eval-and-bind-statements.aspx"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_VFlpKlSjIA8/SkCOpfmTnJI/AAAAAAAAAOU/0ogRhrrsX9k/s1600-h/inidians.GIF"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 555px; height: 432px;" src="http://3.bp.blogspot.com/_VFlpKlSjIA8/SkCOpfmTnJI/AAAAAAAAAOU/0ogRhrrsX9k/s400/inidians.GIF" alt="" id="BLOGGER_PHOTO_ID_5350433200824097938" border="0" /&gt;&lt;/a&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1/LOCALS%7E1/Temp/moz-screenshot.jpg" alt="" /&gt;(click on the picture to enlarge...).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8368903452110712122-1861160195758128864?l=achristovsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/1861160195758128864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/1861160195758128864'/><link rel='alternate' type='text/html' href='http://achristovsblog.blogspot.com/2009/06/oh-those-indians.html' title='Oh, those Indians!'/><author><name>Alexander Christov</name><uri>http://www.blogger.com/profile/08328514701971536145</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VFlpKlSjIA8/SRb5cl4mJpI/AAAAAAAAAK4/sy-_FpwnMNw/S220/image001.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_VFlpKlSjIA8/SkCOpfmTnJI/AAAAAAAAAOU/0ogRhrrsX9k/s72-c/inidians.GIF' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8368903452110712122.post-503388239500987121</id><published>2008-10-20T10:53:00.010+03:00</published><updated>2008-10-20T13:13:33.778+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Execution Order'/><category scheme='http://www.blogger.com/atom/ns#' term='Unit Testing'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><category scheme='http://www.blogger.com/atom/ns#' term='State'/><title type='text'>Ordered execution of Unit Tests in VS2008</title><content type='html'>&lt;span style="font-style: italic;"&gt;NB: All uploaded pictures have to be enlarged in order to be viewed normaly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Unit tests in VSTS are unordered by default. When dealing with state that must be shared among tests order becomes important. Say, we have a database and methods that add, select, uppdate then delete a record. Obviously the order is important!&lt;br /&gt;&lt;br /&gt;Interesting enough there's no way to change the execution order of unit tests already created. Also, there is no relation between the order in which tests were created, the order in which they are added to test lists, and the order .&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_VFlpKlSjIA8/SPxNGOVs3DI/AAAAAAAAAJg/sMbYQ8QdPLE/s1600-h/UnitTests3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_VFlpKlSjIA8/SPxNGOVs3DI/AAAAAAAAAJg/sMbYQ8QdPLE/s400/UnitTests3.png" alt="" id="BLOGGER_PHOTO_ID_5259163234185567282" border="0" /&gt;&lt;/a&gt;If you take a look at the *.vsmdi (see the picture) file you'll see the tests listed there. When I first open this file I said to myself—bingo! this was what I was looking for. Strange, however, there was no way to arrange the tests with a GUI tool, so my hope was that re-arranging the tests in this file manualy may solve my problem. Alas, I was wrong.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;After spinning my mouse wheel for a while I discovered that there are "Ordered tests" that may be added to Test Project.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_VFlpKlSjIA8/SPxQuBoLDLI/AAAAAAAAAJw/iINp7cyVgLs/s1600-h/UnitTests4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_VFlpKlSjIA8/SPxQuBoLDLI/AAAAAAAAAJw/iINp7cyVgLs/s400/UnitTests4.png" alt="" id="BLOGGER_PHOTO_ID_5259167216503033010" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I added an Ordered Test to my test project and the following form appeared:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VFlpKlSjIA8/SPxSNILFdpI/AAAAAAAAAJ4/g9DeaEqwUjI/s1600-h/UnitTests5.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_VFlpKlSjIA8/SPxSNILFdpI/AAAAAAAAAJ4/g9DeaEqwUjI/s400/UnitTests5.png" alt="" id="BLOGGER_PHOTO_ID_5259168850347652754" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This time I was not wrong—the ordered tests allowed me to manage execution order of the unit test.&lt;br /&gt;With (1) I was able to select any test list I have prepared. The unit tests appeared in the left pane (2) and I was able to select some (3) or all of them. Selected tests were added to the right pane. If the order was not correct I could re-arrange the tests with (4).&lt;br /&gt;&lt;br /&gt;I was wondering what was the meaning of "Continue after failure" check box and although it was almost obvious I decided to run the tests with this box checked.&lt;br /&gt;&lt;br /&gt;To my surpise there was &lt;span style="font-style: italic;"&gt;only one&lt;/span&gt; (!) test in the Test Results pane—the ordered test itself. This is why this optioin had to be set as part of the ordered test itself. So it seems as if ordered tests are sort of "batch tests" or "integrated tests" which &lt;span style="font-style: italic;"&gt;behave and &lt;/span&gt;&lt;span style="font-style: italic;"&gt;run as a single unit test.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;You can edit such a test but it is not a "list" in the sense of &lt;span style="font-style: italic;"&gt;test lists&lt;/span&gt; you can define in Test List Editor. If you take a look at the picture below it is obvious that an ordered test is treated as single unit test, not as a list of independent unit tests.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_VFlpKlSjIA8/SPxVomhFAOI/AAAAAAAAAKA/JKsRGJP_4mE/s1600-h/UnitTests6.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_VFlpKlSjIA8/SPxVomhFAOI/AAAAAAAAAKA/JKsRGJP_4mE/s400/UnitTests6.png" alt="" id="BLOGGER_PHOTO_ID_5259172620884312290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And of course, the test results show only the execution of one and only test—the ordered test itself. So, in case of failure, how to guess which unit test participating in the ordered list has failed?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_VFlpKlSjIA8/SPxWvjHup8I/AAAAAAAAAKI/cTVctzknhC0/s1600-h/UnitTests7.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_VFlpKlSjIA8/SPxWvjHup8I/AAAAAAAAAKI/cTVctzknhC0/s400/UnitTests7.png" alt="" id="BLOGGER_PHOTO_ID_5259173839743395778" border="0" /&gt; &lt;/a&gt;And here come the test results which are obviously much more important for ordered tests than usual, unordered, ones. At least because this is how you can tell which unit tests pass and which don't. For now I saw no other way, but maybe this is not necessaryy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_VFlpKlSjIA8/SPxXk6cW0BI/AAAAAAAAAKQ/Qzr7EtXebVM/s1600-h/UnitTests8.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_VFlpKlSjIA8/SPxXk6cW0BI/AAAAAAAAAKQ/Qzr7EtXebVM/s400/UnitTests8.png" alt="" id="BLOGGER_PHOTO_ID_5259174756536995858" border="0" /&gt;&lt;/a&gt;My guess is this &lt;span style="font-style: italic;"&gt;atomic behaviour&lt;/span&gt; of ordered tests relates to some threading issues and transaction logic since this is how &lt;span style="font-style: italic;"&gt;state between tests is preserved&lt;/span&gt;. This is however to be found out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8368903452110712122-503388239500987121?l=achristovsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/503388239500987121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/503388239500987121'/><link rel='alternate' type='text/html' href='http://achristovsblog.blogspot.com/2008/10/ordered-execution-of-unit-tests-in.html' title='Ordered execution of Unit Tests in VS2008'/><author><name>Alexander Christov</name><uri>http://www.blogger.com/profile/08328514701971536145</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VFlpKlSjIA8/SRb5cl4mJpI/AAAAAAAAAK4/sy-_FpwnMNw/S220/image001.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_VFlpKlSjIA8/SPxNGOVs3DI/AAAAAAAAAJg/sMbYQ8QdPLE/s72-c/UnitTests3.png' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8368903452110712122.post-7136371125155853761</id><published>2008-03-19T06:38:00.003+02:00</published><updated>2008-03-19T06:42:01.887+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL 2005 rename instance'/><title type='text'>Rename SQL 2005 Server Instance</title><content type='html'>&lt;div style="border-style: none none solid; border-color: -moz-use-text-color -moz-use-text-color rgb(79, 129, 189); border-width: medium medium 1pt; padding: 0in 0in 4pt;"&gt;&lt;/div&gt;&lt;br /&gt;Here's a direct quotation from &lt;a href="http://groups.google.com/group/microsoft.public.sqlserver.server/browse_thread/thread/544c4eaf43ddfaf3/e9065e05718e984e"&gt;Google Groups&lt;/a&gt;&lt;br /&gt;1. drop current instname (sp_dropserver)&lt;br /&gt;2. add new instance name (sp_addserver 'new name','local')&lt;br /&gt;3. stop sqlserver&lt;br /&gt;4. modify hklm\software\microsoft\microsoft sql server\&lt;br /&gt;5. modify hklm\system\mssql$&lt;instance&gt;&lt;br /&gt;6. use "sc create" to add new mssql$&lt;inst&gt;&lt;br /&gt;7. start up with new inst_name - voila! &lt;br /&gt;... and after that...&lt;br /&gt;oops. #5 should be "modify&lt;br /&gt;hklm\system\currentcontrolset\services\mssql$inst"&lt;br /&gt;&lt;br /&gt;WARNING: Not tested!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8368903452110712122-7136371125155853761?l=achristovsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/7136371125155853761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/7136371125155853761'/><link rel='alternate' type='text/html' href='http://achristovsblog.blogspot.com/2008/03/rename-sql-2005-server-instance.html' title='Rename SQL 2005 Server Instance'/><author><name>Alexander Christov</name><uri>http://www.blogger.com/profile/08328514701971536145</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VFlpKlSjIA8/SRb5cl4mJpI/AAAAAAAAAK4/sy-_FpwnMNw/S220/image001.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-8368903452110712122.post-3327645437326337228</id><published>2008-02-29T06:44:00.009+02:00</published><updated>2008-02-29T07:16:27.111+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='register'/><category scheme='http://www.blogger.com/atom/ns#' term='COM'/><category scheme='http://www.blogger.com/atom/ns#' term='context menu'/><category scheme='http://www.blogger.com/atom/ns#' term='interop'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><category scheme='http://www.blogger.com/atom/ns#' term='unregister'/><title type='text'>Shell Menu to Register and Unregister a COM Server</title><content type='html'>&lt;div style="border-style: none none solid; border-color: -moz-use-text-color -moz-use-text-color rgb(79, 129, 189); border-width: medium medium 1pt; padding: 0in 0in 4pt;"&gt;&lt;/div&gt;&lt;br /&gt;This entry is part of the shell related entires collection I maintain. Here is the Windows shell goody - it Registers/Unregisters a .dll. Needles to say it may be used for ComInterop assemblies too.&lt;br /&gt;&lt;br /&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\dllfile\shell]&lt;br /&gt;[HKEY_CLASSES_ROOT\dllfile\shell\Register]&lt;br /&gt;[HKEY_CLASSES_ROOT\dllfile\shell\Register\command]&lt;br /&gt;@="regsvr32 \"%L\""&lt;br /&gt;&lt;br /&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_CLASSES_ROOT\dllfile\shell\Unregister]&lt;br /&gt;[HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command]&lt;br /&gt;@="regsvr32 /u \"%L\""&lt;br /&gt;&lt;br /&gt;These two snippets were taken from an &lt;a href="http://www.codeproject.com/KB/shell/SimpleContextMenu.aspx"&gt;article&lt;/a&gt; on creating shell context menus in &lt;a href="http://codeproject.com/"&gt;codeproject.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;It is the second in the sequence of shell articles. Here's the &lt;a href="http://achristovsblog.blogspot.com/2007/11/clean-visual-studio-solution.html"&gt;first&lt;/a&gt; one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8368903452110712122-3327645437326337228?l=achristovsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/3327645437326337228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/3327645437326337228'/><link rel='alternate' type='text/html' href='http://achristovsblog.blogspot.com/2008/02/shell-menu-to-register-and-unregister.html' title='Shell Menu to Register and Unregister a COM Server'/><author><name>Alexander Christov</name><uri>http://www.blogger.com/profile/08328514701971536145</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VFlpKlSjIA8/SRb5cl4mJpI/AAAAAAAAAK4/sy-_FpwnMNw/S220/image001.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-8368903452110712122.post-1912166112193083351</id><published>2007-11-05T21:57:00.008+02:00</published><updated>2008-11-17T08:39:03.516+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VS2005'/><category scheme='http://www.blogger.com/atom/ns#' term='VS2008'/><category scheme='http://www.blogger.com/atom/ns#' term='shell'/><title type='text'>Clearing Visual Studio Solution folder(s)</title><content type='html'>&lt;div style="border-style: none none solid; border-color: -moz-use-text-color -moz-use-text-color rgb(79, 129, 189); border-width: medium medium 1pt; padding: 0in 0in 4pt;"&gt;&lt;/div&gt;&lt;br /&gt;This is a simple context menu item in Windows Explorer's context menu that cleans a solution folder from all bin, obj and .svn folders. Optionally VSS files may be added for clean-up.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Windows Registry Editor Version 5.00&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\CleanSolution]&lt;br /&gt;@="Clean Visual Studio Solution"&lt;br /&gt;&lt;br /&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\CleanSolution\command]&lt;br /&gt;@="cmd.exe /c \"TITLE Removing bin, obj and .svn folders in %1 &amp;amp;&amp;amp; FOR /r \"%1\" %%f IN (bin, obj, .svn) DO RD /s /q \"%%f\" \""&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;You can download the registry file from &lt;a href="http://www.4shared.com/file/71255924/7534c385/Clear.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Inspired by &lt;a href="http://weblogs.asp.net/jgalloway/archive/2007/02/24/shell-command-remove-svn-folders.aspx"&gt;Jon Galloway's blog&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8368903452110712122-1912166112193083351?l=achristovsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/1912166112193083351'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/1912166112193083351'/><link rel='alternate' type='text/html' href='http://achristovsblog.blogspot.com/2007/11/clean-visual-studio-solution.html' title='Clearing Visual Studio Solution folder(s)'/><author><name>Alexander Christov</name><uri>http://www.blogger.com/profile/08328514701971536145</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VFlpKlSjIA8/SRb5cl4mJpI/AAAAAAAAAK4/sy-_FpwnMNw/S220/image001.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-8368903452110712122.post-3692724696201795835</id><published>2007-09-24T14:16:00.000+03:00</published><updated>2007-09-24T14:44:02.715+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='FTP'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='vsftpd'/><title type='text'>Configuring vsftpd</title><content type='html'>&lt;div style="border-style: none none solid; border-color: -moz-use-text-color -moz-use-text-color rgb(79, 129, 189); border-width: medium medium 1pt; padding: 0in 0in 4pt;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;NB:  incomplete, some more evaluations are necessary!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;font-family:verdana;" &gt;&lt;br /&gt;Standalone Server&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Here are the results of a lengthy and somewhat painful experience configuring vsftpd. First of all keep the original vsftpd.conf located in /etc. To do this set vsftpd to launch as a stand-alone server not a daemon - i.e. not running from an inetd.  Do this by setting &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;font-family:verdana;" &gt;&lt;br /&gt;listen=YES&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;This allows for passing different set of options to configure the server. By issuing the command &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;vsftpd /home/me/vsftpd.conf&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;where /home/me/ vsftpd.conf is another configuration file for the vsftpd server. Notice the full path to the configuration file. This allows for different configurations to test. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;If there is an already running server and you want to keep it running while experimenting with some values set the following directive:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;listen_port=2121&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;This makes the server listen at port 2121 which is not the standard ftp port (21). Thus the experimental server does not conflict with the production one.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Basic Operations&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;Generally speaking nothing more than a file system offers – copying, moving, renaming, deleting of files – these are the basic operations a FTP server should provide.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;To allow for changing files and directories set&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;write_enable=YES&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Setting write_enable to NO effectively denies all writes to the remote directory – you are banned from uploading files, deleting and renaming existing files, all the same with directories.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;anon_upload_enable=YES&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Set this directive to YES to allow for file upload. If set to NO all the basic operations will work – renaming and deleting files, moving files between directories, creating, deleting, renaming directories will still work. The only effect is that the user won’t be able to upload files.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;anon_mkdir_write_enable=YES&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;If set to NO server’s user may not create directories – all other actions are permitted.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;anon_other_write_enable=YES&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;If set to NO this directive stops user from renaming and deleting directories. It complements anon_mkdir_write_enable so that both control how directories are manipulated thru FTP clients.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;In this case files may be only uploaded – no delete, move, rename are allowed. Overwrite, incl. repeated upload, are not permitted.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Security&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;(to be completed)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Logging&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;When something goes wrong logging helps in determining what happens with the server – starting/stopping the server, establishing/dropping a connection, transferring/manipulation remote directories and files etc.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;There are a couple of directives controlling the logging process:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;syslog_enable=NO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;If set to NO logging goes to /var/log/vsftpd.log and /var/log/xferlog . Otherwise syslogd server is responsible for logging (not tested!). &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;xferlog_enable=YES&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;Effectively enables logging.  /var/log/vsftpd.log logs everything (?) while /var/log/xferlog logs only file transfers – upload and download.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;dual_log_enable=YES&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;When enabled log writes to both files - /var/log/vsftpd.log logs and /var/log/xferlog.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;dual_log_enable=NO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;If set to NO no output goes to /var/log/xferlog, otherwise transfers are logged in both log files. &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;font-size:100%;" &gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;log_ftp_protocol=YES&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:verdana;"&gt;&lt;br /&gt;When set to YES all FTP commands and responses are logged. This directive is useful for debugging.  Otherwise only client requests are logged.&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8368903452110712122-3692724696201795835?l=achristovsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/3692724696201795835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/3692724696201795835'/><link rel='alternate' type='text/html' href='http://achristovsblog.blogspot.com/2007/09/configuring-vsftpd-nb-incomplete-some.html' title='Configuring vsftpd'/><author><name>Alexander Christov</name><uri>http://www.blogger.com/profile/08328514701971536145</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VFlpKlSjIA8/SRb5cl4mJpI/AAAAAAAAAK4/sy-_FpwnMNw/S220/image001.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-8368903452110712122.post-9033025507535758824</id><published>2007-06-20T19:32:00.004+03:00</published><updated>2008-03-01T13:27:54.863+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Full-Text'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Open Source'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Lucene'/><category scheme='http://www.blogger.com/atom/ns#' term='Searching'/><title type='text'>Full-Text Searching</title><content type='html'>&lt;div style="border-style: none none solid; border-color: -moz-use-text-color -moz-use-text-color rgb(79, 129, 189); border-width: medium medium 1pt; padding: 0in 0in 4pt;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Searching&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;An ASP.NET web site contains dynamic contents originating mostly from SQL tables and static html, as well as other searchable items - pictures, audio, video, etc. &lt;span xmlns=""&gt;tagged with some text.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Searching contents in a SQL database might be quite tricky - direct execution of SQL statements are in general discouraged because of possible SQL Injection attacks (look &lt;a href="http://en.wikipedia.org/wiki/SQL_Injection"&gt;here&lt;/a&gt;, &lt;a href="http://www.securiteam.com/securityreviews/5DP0N1P76E.html"&gt;here&lt;/a&gt;, or &lt;a href="http://www.youtube.com/watch?v=MJNJjh4jORY"&gt;here&lt;/a&gt;) while executing stored procedures fall to one of the categories:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Specialized search procedures for most common cases,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;General stored procedures with lots of parameters,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Stored procedures with dynamically executed SQL.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;None of the above is satisfactory since a. may grow very fast in number, b. leads to complicated stored procedures logic and c. is ineffective because the SQL statements cannot be optimized and stored for later reuse by the database engine.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Full Text Searching&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;The problems outlined above are solved by &lt;a href="http://en.wikipedia.org/wiki/Full_text_search"&gt;full text searching&lt;/a&gt;. This approach is capable of indexing practically any kind of textual information including data stored in SQL tables provided they are full text indexing enabled.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Some database implementations are well-known:&lt;br /&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://oraclepartnernetwork.oracle.com/help/sbssrcim.htm"&gt;Oracle&lt;/a&gt; offers full-text searching capabilities,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Microsoft SQL Server - relies on the &lt;a href="http://msdn2.microsoft.com/en-us/library/aa174506%28SQL.80%29.aspx"&gt;Microsoft Search Service&lt;/a&gt; (SQL Server 2000) e.g. &lt;a href="http://www.developer.com/db/article.php/3446891"&gt;here&lt;/a&gt; or SQL Server 2005, look &lt;a href="http://msdn2.microsoft.com/en-us/library/ms345119%28SQL.90%29.aspx"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;MySQL - details on full-text searching for MySQL can be found &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;An independent approach for a db engine without full-text searching capabilities may be found &lt;a href="http://www.codeproject.com/cs/database/FulltextFirebird.asp"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;h3&gt;Open Source Search Engines in C#&lt;/h3&gt;&lt;br /&gt;&lt;p&gt;The leader appears to be &lt;a href="http://sourceforge.net/projects/nlucene/"&gt;Lucene.NET&lt;/a&gt;. There is a &lt;a href="http://darksleep.com/lucene/"&gt;java tutorial&lt;/a&gt; by &lt;em&gt;Steven J. Owens&lt;/em&gt;.  The branches - &lt;a href="http://www.dotlucene.net/"&gt;DotLucene&lt;/a&gt; and &lt;a href="http://sourceforge.net/projects/nlucene/"&gt;NLucene&lt;/a&gt; both seem to be dead. While DotLucene offers a download of the latest source code, NLucene's last news dated 2004-01-04 redirects &lt;a href="http://sourceforge.net/forum/forum.php?forum_id=341734"&gt;back&lt;/a&gt; to Lucene.NET.  Two interesting articles pour some light on using Lucene.NET: &lt;a href="http://www.codeproject.com/cs/database/FulltextFirebird.asp"&gt;Fulltext Search for Firebird SQL&lt;/a&gt; and &lt;a href="http://www.codeproject.com/aspnet/DotLuceneSearch.asp"&gt;DotLucene: Full-Text Search...&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There's one more implementation which is under development - &lt;a href="http://www.searcharoo.net/SearcharooV4/"&gt;http://www.searcharoo.net/SearcharooV4/&lt;/a&gt;. It uses interfaces, namely &lt;a href="http://msdn2.microsoft.com/en-us/library/ms691105.aspx"&gt;IFilter&lt;/a&gt;, provided by Microsoft Windows for performing searches in PDF, and MS Word document types.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8368903452110712122-9033025507535758824?l=achristovsblog.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/9033025507535758824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8368903452110712122/posts/default/9033025507535758824'/><link rel='alternate' type='text/html' href='http://achristovsblog.blogspot.com/2007/06/full-text-searching.html' title='Full-Text Searching'/><author><name>Alexander Christov</name><uri>http://www.blogger.com/profile/08328514701971536145</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/_VFlpKlSjIA8/SRb5cl4mJpI/AAAAAAAAAK4/sy-_FpwnMNw/S220/image001.jpg'/></author></entry></feed>
