Download Latest Version FTPD_Search_System_v2.1_Final_Release.zip (41.2 kB)
Email in envelope

Get an email when there's a new version of FTPD Search System

Home / OldFiles
Name Modified Size InfoDownloads / Week
Parent folder
FTPD_Search_System_v2.0_Final.zip 2006-11-22 40.7 kB
FTPD_Search_System_2RC4_Readme.txt 2006-11-14 30.6 kB
FTPD_Search_System_2RC4.rar 2006-11-14 57.5 kB
Totals: 3 Items   128.8 kB 0
***************************************************************************************************************************
                                                  FTPD Search System
***************************************************************************************************************************
Copyright (C) 2006
Christer Finsen, mind[underscore]trip[at]users[dot]sourceforge[dot]net
and
Nils-Erik Auråker, nils-erik[at]users[dot]sourceforge[dot]net

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty
of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 

You should have received a copy of the GNU General Public License along with this program; if not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
---------------------------------------------------------------------------------------------------------------------------

Index
-----
     0. Donations are welcome
     1. Abstract
     2. Features
     3. How it works
     4. The world’s fastest FTPD search system?
     5. FTPD Search System vs Dupe
     6. Known weakness
     7. Requirements
     8. Supported systems
     9. Setup & Install
    10. Support
    11. Release notes
    12. To do & future plans
    13. FAQ
    14. Credit
    15. A letter to a the FTPD vendor...



0. Donations are welcome
------------------------
This software is free. However if you use and enjoy this system, you are welcome to donate money through our paypal account: ftpd.search.system@something. [NEA1]Firm/Companies are specially invited to donate. We would also encourage you to donate money to the man behind Locate32 : jmhuttun[at]venda[dot]uku[dot]fi.
1. Abstract
-----------
Uses 3rd party application Locate32 to index all files available to RaidenFTPD into one or more databases
Uses 3rd party application Locate32 to give an extremely fast reply through site search command in RaidenFTPD


2. Features
-----------
- Designed by people who actually had the need for the "superior" within ftp search
- Probably one of the worlds fastest ftp search system ever
- Coded in vbs/wfs witch is natively supported by Windows, no third party engine needs to be installed to interpret the scripts
- Unique environment configuration stored in include files for easy installation of upcoming versions
- Extreme fast search reply even on large volumes containing an extreme amount of files, thanks to 3rd party application Locate32
- Replies can be given out as windows path or as true Virtual File System path
- Read and analyze RaidenFTPD *.vfs, and create a full database system with no futher interaction
- Maximum number of lines in reply, to protect your server from overload, and FPTD Search System itself from overflow
- Support searches for file, directories or both
- Granulated logging options with four log levels : 0=None, 1=Success/Error, 2=Full, 3=Debug
- Natively support for logging to file and/or eventlog
- Easy extendable loginterface, can be ported to syslog, SQL, mail etc.
- Easy extendable with further Locate32 options, search string in files, regular expressions, etc.
- Automatic maintenance of DB's through scheduled tasks or site command

3. How it works
---------------
The system uses a 3rd party application named Locate32 which is coded by : Janne Huttunen <jmhuttun@uku.fi>. This is an extreme fast database/search engine which index files on a Windows based computer. This system uses Locate32 to create an index of every path found in you're virtual filesystem on you're FTPD, and uses them in "site search" operations. The result wich is retrieved from the databases are in a "classic" windows format. Ex : C:\Myfiles\Myfile.txt. This system will then read you're virtual filesystem config, and convert the "classic" windows format to a native FTPD output (this is optional, and default behavior). So if the virtual filesystem entry would point to C:\Myfiles as /Public/Upload/Myfiles, the search result will come out as : /Public/Upload/Myfiles/Myfile.txt in the ftp client.

4. The worlds fastest FTPD Search System?
-----------------------------------------
Well, that's something which is dangerous to suggest. Great men have ended up masticating their own words from the past before. So instead of saying that this is the fastest FTPD Search System ever made, we'll challenge the others to prove their better. It's an indisputable fact that the performance of this search system is based upon Locate32, hence the performance is principally on Locate32's mercy. But despite of that, we challenge... In our tests during development of this project, we have been convinced that this might be the next "mother of all" ;)...


5. This system VS Dupe
----------------------
  Problem I - Using a dupe as search
The primary purpose of dupe (as in duplicate) is NOT searching for files, but to make sure no more than one copy of the file exists within the system. In many cases this is a problem. If the users of the system would like to store several files with identical names, dupe prevent that by design. Hence, you must choose between the search facility in dupe, or the possibility to store files with equal names. Of course we have the undupe command, but a lot of "novice" ftp users are not familiar with it, nor familiar with the ability to make ftp scripts for unduping on the fly.

  Problem II - Dupe is sloooow...
We have not yet seen any dupe based search system which is really fast when the ftp volume become large and contain a lot of files. This can be volumes which are greater than 500GB with more than 1.000.000 files, sometimes scattered over multiple servers. The reason for this is the fact that in many cases a dupe system uses some sort of text file as database, sometimes in combination with online search. It doesn't take a genius to understand that this will take time.
  Problem III - Dupe IS NOT versatile
How many times have you ever wanted to find files containing a specific string or  size. This is literary basic features of a any search system, but isn't present in any dupe based systems.
[NEA2]
  Solution - FTPD Search System
The solution to above is this system. This system is based upon the 3rd party application Locate32, which is an extreme fast database and search engine. This system uses Locate32 to make a db of every path in your virtual file system, distributing the load to multiple databases for optimal performance. When a site search command is initiated, it searches all databases for a result, optional adapting the result to true ftp paths. The nitty-gritty of how Locate32 works is beyond this scope.

6. Known weakness
-----------------
As with a dupe system, this system can reply with content unavailable to a user. If a user search for a file named search.zip the system will reply with path to this file, despite the fact that the user doesn't have proper permission to access it. If this is a concern, you should not use this or any other dupe based system.

7. Requirements
---------------
Locate32 v3.0 RC2 build 6.10220 or higher - http://locate32.webhop.org/
Windows Script Host 5.6 or above
Script must be invoked by cscript engine


8. Supported System 
-------------------
OS : Windows 2003 x86/x64
     Windows XP x86/x64
     Other Windows operating systems might function but are not tested. Make sure WSH 5.6 or above is used with such a system.

FTPD : RaidenFTPD 2.4.3200 or higher


9. Setup & Install (w/RaidenFTPD)
---------------------------------
  Prerequisite
This install "guide" assumes following : RaidenFTPD installed to "C:\Program Files\RaidenFTPD". You're virtual filesystem config is : "C:\Program Files\RaidenFTPD\RaidenFTPD32.vfs". Locate32 is installed in : "C:\Program Files\Locate".

  Locate32
Download Locate32 from http://locate32.webhop.org/ and install it. If you don't want to use the product for other purposes that this system, remove the option for automatic startup during installation.
Note! If you're using a x64 system. Use the 64-bit version of Locate32.
  System files
Copy the content of this package to a folder. In this guide we use : "C:\Program Files\RaidenFTPD\Search"

  Edit Include_db.vbs
Even though you have identical setup as described in this setup, open you're favorite text editor and inspect/edit the following file : Include_db.vbs. Make sure every path matches you're configuration. DO NOT CHANGE ANY LOG LEVEL YET.

  Cscript as default engine
Set cscript as default script engine. To do this open command prompt and type the following: cscript //H:Cscript. You should receive this reply if successful: The default script host is now set to "cscript.exe". Default script engine in Windows is wscript. This is fine, if we would like messages to appear as a dialog. However this is a system which in most cases never will be monitored directly. An error with wscript engine will wait for someone to click a button, hence the script will never complete if an error occurs. This again might lead to multiple instances of unfinished script processes. It's possible to omit setting cscript as default engine, and call the script directly using "cscript scriptname". We would NOT recommend this, and it's out of scope for this installation. This documentation expects you to use cscript as default engine. If you insist on using wscript, it's another syntax than this guide and you are on your own.

  Create DB/Index
Create you're first database set by running, CreateLocateDB.wsf. We recommend that you execute this from command prompt the first time, to make sure you don't get any script errors. Since cscript is now default engine, you will not be able to get any errors as a dialog. Open a command prompt and execute UpdateDB.wsf followed by enter. Wait until the script is done. In most cases you will be surprised how fast this process is, you believe something is wrong... but it's not. Locate32 is that fast :)...

  Inspect Logs and databases
Now, open your log directory and inspect the logfile. This file should only contain information and success entries. If this is not the case, you must correct the problem described in the logfile. Open you're database directory and verify that db's are there. It should be one db for each entry in your RaidenFPTD32.vfs. 0.dbs contains path(s) from first line, 1.dbs the second line etc. If you have multiple paths in one line, the system handles it. All paths within same vfs entry will be added to same db.

Edit Include_Search.vbs
Even though you have identical setup as described in this setup, open your favorite text editor and inspect/edit the following file : Include_Search.vbs. Make sure every path matches you're configuration. DO NOT CHANGE ANY LOG LEVEL YET.

  Make RaidenFTPD search
Now, there are two ways to make RaidenFTPD understand what to do when you send the site search command. Basically it's an old and a new way of doing this. This script supports ONLY the new method of doing this. Now, go to the directory "C:\Program Files\RaidenFTPD\VirtulFS" and create a folder with the same name as you're server. You're server name can be found in *.ftpd. In this case it's RaidenFTPD32. Open your favorite text editor and create a file named sitecmd.ini in this directory. Copy the following into the file and save it: 

[root]
[super]
[normal]
[guest]
[EGGDROP-root]
[EGGDROP-super]
[EGGDROP-normal]
[EGGDROP-guest]

Each section represents a type of user. If you only want to allow root and super users to execute a search, you would insert the command into those sections. In this case we would allow root, super and normal users to perform a search on our site. Now there’s a little catch with this .ini file. The first part of it doesn't support neither spaces nor path in "" it. So here we will provide the ONLY solution which will work in ANY case no matter what path you have, and even if you have disabled 8.3 filenames in windows :

x86 System :
[root]
search=ask://C:\WINDOWS\System32\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
[super]
search=ask://C:\WINDOWS\System32\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
[normal]
search=ask://C:\WINDOWS\System32\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!

x64 Systems :
[root]
search=ask://C:\WINDOWS\SysWOW64\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
[super]
search=ask://C:\WINDOWS\SysWOW64\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
[normal]
search=ask://C:\WINDOWS\SysWOW64\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
[NEA3]
IMPORTANT! Some variables are in "", others are not. It's crucial to the system that you provide the arguments exactly as described in this documentation. This has something to do with how the various scripts interpret the arguments. Search/UpdateDB do interpret this differently. Therefore please follow this documentation 100%.[NEA4]
Save the file, and restart the FTPD server.

  Simulate a search
Now, before we're going to make the FTPD perform the search, we're going to simulate a search through a FTPD. This is done to make sure everything is set up correct, and that we don't get any script errors. Open a command prompt, go to the directory where search.wsf is located and type : search.wsf "gcid" "search help" and hit enter.

  Inspect search log and output
Open the log directory and verify that the log only contain Information/Success entries. If not you must correct the error according to the log. If you're unable to find the log in the "ordinary" log directory, check the directory for error logs. The last thing to inspect is the reply to FTPD. Open the output directory of the FTPD. In that directory it should be a file named: "ask-onSiteCommand.gcid". Delete the file.

  Perform the first search
Now, open your favorite FTP client and log to the FTPD. Send the following command: site search help. You're FTPD should now reply with help for the command search. If not, inspect the logs on the server. If not logs exist, check FTPD log and verify that the FTPD was able to execute the command. Your FTPD is now setup to perform search with FTPD Search System.

  Updating Database with task scheduler
Open task scheduler, create a new task and select updatedb.wsf as file. Set up a scheme, for instance one per day. When asked to enter username/password enter the following username : NT AUTHORITY\SYSTEM with blank password. This is the only safe recommended way to schedule a task. If you provide a username password, this would float around in memory and is easily revealed. Make sure no other than system/administrator is able to change the updatedb.wsf/include_db.vbs.
Important! The scheduled task should run in same context as you’re FTPD. If it is running with other credentials than NT AUTHORITY\SYSTEM, you should disregard the above statement.  However, the security part of the statement is still true.
  Updating Database with site command
The updatedb.wsf do support update through FTPD "with site updatedb". To implement updatedb to your FTPD, you must first decide who should be able to execute it. We would not recommend users to do this. In this example we would allow root/super users to update the databases through site command. Open your favorite text editor and add the following to sitecmd.ini

x86 System :
[root]
search=ask://C:\WINDOWS\System32\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
updatedb=ask://C:\WINDOWS\System32\cscript.exe "C:\Program Files\RaidenFTPD\Search\updatedb.wsf" "%@" "%!" "S"
[super]
search=ask://C:\WINDOWS\System32\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
updatedb=ask://C:\WINDOWS\System32\cscript.exe "C:\Program Files\RaidenFTPD\Search\updatedb.wsf" "%@" "%!" "S"
[normal]
search=ask://C:\WINDOWS\System32\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!

x64 Systems :
[root]
search=ask://C:\WINDOWS\SysWOW64\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
updatedb=ask://C:\WINDOWS\SysWOW64\cscript.exe "C:\Program Files\RaidenFTPD\Search\updatedb.wsf" "%@" "%!" "S"
[super]
search=ask://C:\WINDOWS\SysWOW64\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
updatedb=ask://C:\WINDOWS\SysWOW64\cscript.exe "C:\Program Files\RaidenFTPD\Search\updatedb.wsf" "%@" "%!" "S"
[normal]
search=ask://C:\WINDOWS\SysWOW64\cscript.exe "C:\Program Files\RaidenFTPD\Search\Search.wsf" "%@" %!
[NEA5]
IMPORTANT! Some variables are in "", others are not. It's crucial to the system that you provide the arguments exactly as described in this documentation. This has something to do with how the various scripts interpret the arguments. Search/UpdateDB do interpret this differently. Therefore please follow this documentation 100%.[NEA6]

Save the file, and restart the FTPD server.

  Performing update w/site updatedb
Log on to your FTPD and send the command site updatedb -h. Do the same type of log inspection as you've previously done, you should know the drill by now. To update the database send: site updatedb.

  Tuning of logs
We assume that you're system is working flawless. We would recommend that you enable log "rollover". The rollover function make sure that no more than n logs exist in your log directory. Now, there's really no point of logging if you're not going to read it. So if you know that you'll never read any log what's so ever, set log level to 0. If you're the type of guy which would like to do best practice, this is what we recommend. Set loglevel to 2 (default), enable rollover of logfiles, and set the option to 10 on search and db logs. Keep every error search log. Do inspect the logs regularly the first two weeks. When you are confident that the system is working, set log level down to 1. If you have a high volume of searches, more than one per minute. We would recommend you to test the system thorough in a test environment, and set log level down to 0 in production.

WARNING! Do NOT use eventlog level 2 & 3. Default is 0, and we recommend you to keep it that way. If you insist on getting entries into eventlog, use level 1, and make sure you're eventlog do overwrite with new events.

  Tuning database performance
You would get the best performance if you divide the content on your FTPD into several databases. This is done automatic for you if you're FTPD have more than one virtual filesystem path. If not, we recommend the following. Check the database size. Try to avoid databases larger than 50-60MB. Test the performance, if a search takes several seconds you can improve this the following way. Let say you have only one directory C:\FTP\Pub with VFS pointing to /.
Within pub there are C:\FTP\Pub\Upload, C:\FTP\Pub\Download, C:\FTP\Pub\Bin. To improve performance, do the following. Create C:\FTPRoot, point to /, create vfs /Upload point to C:\FTP\Pup\Upload, create vfs /Download point to C:\FTP\Pup\Download and finally create vfs /Bin point to C:\FTP\Pup\bin. Delete the one and only database you have, and re-run updatedb. You will now get four db’s, one for each path in vfs. Try a new search, and most likely you're search time would be improved. If you're in a position where you aren't able to change you're path's in your FTPD. You can create the databases manually through Locate32. Just put all the databases in the DB folder. The search script will automatically identify them and use them in site search operations. The syntax for creating a manual database is out of this scope. Please see Locate32 documentation.

10. Support
-----------
Before asking any question related to installation issues, we would urge you to do the following first:

A) Read, and perform whole section 9
B) Read FAQ
C) Ask the forum of your FTPD provider

Before asking any non install related question: 
A) Read FAQ


11. Release Notes
-----------------

Legend : 
*  = Changed
+  = Added
-  = Removed
U  = Applies to UpdateDB
S  = Applies to Search
() = Section of code affected

Date format is : dd.mm.yyyy
Ver 2.RC4 11/11/2006
--------------------
*S  - Corrected error in system log, script processed correct but produced information output in system log (s_VerifyOptionAndBuildCommand)
+S  - Four new search options : -lrn, -lcnm, -lM -lm (s_VerifyOptionAndBuildCommand)
+S  - New syntax samples, and explanation of usage (s_TerminateInHlp)
+S  - New example section, users can now use : "site search showme" to get an output of examples (main code & s_TerminateInShowMe)
[NEA7]
Ver 2.RC3 05/11/2006
--------------------
+S  - Three new search options : -t, -lc:TEXT, -lw (s_VerifyOptionAndBuildCommand)
+S  - New syntax samples, and explanation of usage (s_TerminateInHlp)
*S  - Command arguments is now treated as multiple arguments, and not one string. (f_VerifyCmd replaced by s_VerifyOptionAndBuildCommand)

Ver 2.RC2 04/11/2006
--------------------
*U  - AT scheduler replaced by %Comspec% when initiating through site (s_Resubmit)
+U  - Check if path exists before indexing content of it to dbs (s_CreateDB)
*US - Divided APPVER constant into major and minor version constants (main code)
*US - Extended all FTPD output from 75 to 80 characters lenght (all writeout's)
*US - All FTPD output with dynamic content creates dynamic frame ending on character #80 (all writeout's)
+US - Add random integer to name of logfile if it allready exists (main code)
+S  - Case sensitivity added to options, a requirement for some Locate32 options (main code)
*S  - Corrected default number of lines output, max value was used instead of default (f_VerifyCmd)



Ver 2.RC1 31/10/2006
--------------------
- Initial working release

12. To do & future plans
------------------------
- Online update of db’s. When someone uploads a file, it would be added to a dbs [NEA8]instantly
- db’s search order, the search should first choose to search within db’s x,y,z
- Add the following search parameters: 

    -lDmDAY     set minimum file modification date, day can be exact date in the
                form of YYMMDD, or number (0 is today, 1 is yesterday, etc)
    -lDcDAY     set minimum file creation date
    -lDaDAY     set minimum file last access date
    -lDMDAY     set maximum file modification date
    -lDCDAY     set maximum file creation date
    -lDADAY     set maximum file last access date
[NEA9]



13. FAQ
-------
Q : Why does this faq contain few questions?
A : We haven't received any questions yet. Therefore we don't know what to put in here.

Q : Why is it version 2.x, I've never seen a 1.x. Is this a poorly way of getting credibility?
A : No, it was a version 1.x. This was based on the same technique as a traditional dupe system. The performance was too poor and didn't have the kind of features this system has. We don't believe anyone would have used it.
[NEA10]
Q : Where do I report a bug?
A : Bug reports can be posted here : , make sure you add the following in the report. A) A logfile with loglevel 3 containing the error. B) The include file of the script. Bug reports which do not contain this will not be processed. Hence you're error will not be corrected.
Q : Why have you written you’re e-mail address in this format : user[at]world[dot]com, and not user@world.com ?
A : It’s to avoid the most common crawlers to add our e-mail addresses to spam lists. 
Q : Why is it written in vbs, and not PHP like most people do with FTPD add-ons?
A : We're both mastering vbs very well compared to PHP, it would make no sense to us to use PHP. In fact, we think it's strange that "the rest" of the world do script things like this in PHP. The native Windows script interpreter is wscript/cscript which process vbs and js out of the box.

Q : I would like to help out and improve the system, how can I do that?
A : If you're a into vbs you can evaluate our code and provide feedback, where we can improve it. Even better, you can join us at source forge: . If you're not into vbs, you can submit bugs or just donate money through PayPal: ftpd.search.system@something[NEA11]

Q : Can this system co-exist with a dupe system?
A : Yes, this system has nothing to do with a dupe system. However, if you're dupe system uses "site search" you must change a couple of things. If you've been able to set up a site search command, you know what to do. However, the easy way is to change dupe to another command than "search" and make this system the "owner" of search. Alternatively you must change the code in this system. The theory behind that is to change the value of the constant named: "SITECMD" to reflect the name of the command you're giving this system. However, this is not something which we support or encourage you to do.

Q : Can I use another command than "search" as site command?
A : Yes, take a look at the answer to "Q : Can this system co-exist with a dupe system?"

Q : Can this system be implemented to other FTP's than RaidenFTPD?
A : Yes, however this will in most cases include minor or major modifications to the code, based upon how other FTPD's behave.

Q : When will this system support FTPD x,y,z?
A : Don’t know, we have been using RaidenFTPD for several years. Since none of us have an urge to change FTPD. It's not planned in near future. However, the most likely FTPD to be the next, is ioFTPD. Which recently has been released as open source.
[NEA12]
Q : Can you port this system to FTPD x for me?
A : It's allowed to ask if you're willing to donate money for the work to our paypal account and provide us with correct documentation on how to interact with the FTPD.
[NEA13]

14. Credit
----------
Now there's obviously one guy which comes up first, the guy which made this possible. They guy behind Locate32, Janne Huttunen jmhuttun[at]uku[dot]fi, [NEA14]big thanks. We would also like to thank Team John Long for making the world’s best FTPD on Windows, and last but not least... pn169 from RaidenFTPD forum. We hope you're paid by Team Long John for answering all those questions... ;)


15. A letter to a FTPD vendor...
------------------------------------
Now here's a little story about two guys which sat down to code something, based upon a couple of SDK's from one of the world’s best FTPD vendors. What we did was simple; we started by doing what every single dev would do. We downloaded the SDK's... or rather what the vendor called a SDK.

Now, to those readers who aren’t familiar with a SDK, it stands for Software Development Kit. Sounds nice huh... So what should we expect from a kit? If it was from one of the world’s largest software companies, we would have expected some tools, libraries, sample code, and off course a detailed documentation explaining how to develop something to interact with the application; that the kit is covering. So, what did we expect from this SDK?... cause to be honest. It isn't released by one of the world’s leading software companies. We expected that the documentation was correct... but that did NOT turn out as expected.

The SDK was without doubt written by a person who's mastering "hello world" in php... The problem on our hand arose when we discover that the guy left the company five years ago, and the company had forgotten that they do have a SDK publicly available. We ended up spending 1/3 of the time making the first working version of FTPD Search System v 2.x on how to get it to interact properly with the FTPD.

There were several flaws in the documentation, sometimes describing things which we experienced to be the total opposite of what the SDK said about the issue. The worst part was of course when we had coded some routines which turned out to be a complete waste... Imagine, put yourself in that position. What do you do?

If the SDK isn't correct, you go for the system documentation and the knowledgebase. Now, it turns out that the guy’s who wrote the first of these, is the same guy’s who left the company five years ago. Funny huh... and even funnier, he has been replaced by another guy who has a mission. He's mission is to decentralize all documentation of the product, making sure the documentation is spread equally among all possible public media the company is in possession of. Some parts on the main web site, some in product installation, some in KB's easy discovered on web, some pretty good hidden - only available through a forum if the search contained the right string, and some...huh... some, we believe people will never find.

So hopefully you have taken the point... make a decent SDK (decent as in at least correct), make sure to maintain the content of it, and yeah... you should do the same thing with product documentation. Make sure it's all in one place. Many of the largest software companies today, are large because of a very important factor. They feed the developers with tools, documentations etc. to make sure the developer choose their product in a solution. Today it's a matter of how long it takes to reach market with a product. If a developer must choose between two products, one with literally no documentation and another which is well documented, you can guess what he would choose. That's how to stay in business.

We don't have to name names here, think we all know who we're talking about. If it hadn't been for the fact that we know this FTPD is the superior... we would have been long gone John...
[NEA1]må finne noe lurt snart...
[NEA2]Lagt til
[NEA3]"%!" er endret til %! uten "". Ekstremt viktig å oppdatere ini fil, gjelder KUN search scriptet.
[NEA4]Endret tidligere tekst
[NEA5]"%!" er endret til %! uten "". Ekstremt viktig å oppdatere ini fil, gjelder KUN search scriptet.
[NEA6]Lagt til
[NEA7]Naturlig endring
[NEA8]rettet fra db's
[NEA9]Fjernet alle parameter som nå er inkludert
[NEA10]Endret
[NEA11]Må komme opp med noe...
[NEA12]Trukket frem ioFTPD
[NEA13]Lagt til at vi krever dok før vi vurderer
[NEA14]Lagt inn e-post i "anti spam" format.
Source: FTPD_Search_System_2RC4_Readme.txt, updated 2006-11-14