4.4l ford diesel
Sponsored Links
Sponsored Links
Secleted [ 0 ] software to compare
Results 1 - 15 of about 10
CodeBase 0.86
CodeBase is a Perl module for accessing dBASE files. more>>
CodeBase is a Perl module for accessing dBASE files.
ABSTRACT
The CodeBase module provides a Perl 5 class for accessing dBASE files. It is a development of an earlier unpublished Perl 4 extension.
SYNOPSIS
Programs using the CodeBase module must include the line:
use CodeBase;
The functions that the module provides are listed below, grouped according to type of function.
File manipulation functions
$fh = CodeBase::open($filename, @options);
$fh = CodeBase::create($filename, @fielddefs);
$fh->DESTROY();
File information functions
$n_recs = $fh->reccount();
$recsize = $fh->recsize();
$n_fields = $fh->fldcount();
@names = $fh->names();
$type = $fh->type($fieldname);
@fieldinfo = $fh->fieldinfo();
Navigation functions
$recno = $fh->recno();
$fh->goto($recno);
$fh->skip($n_recs);
$fh->bof();
$fh->eof();
Record manipulation functions
@values = $fh->fields();
$value = $fh->field($fieldname);
$fh->set_field($fieldname, $value);
$fh->new_record(@values);
$fh->replace_record(@values);
$fh->deleted();
$fh->delete_record($recno);
$fh->flush($tries);
$fh->pack($compress_memo);
$fh->lock($what, $tries);
$fh->unlock();
Index manipulation functions
$n_tags = $fh->tag_count();
@tags = $fh->tags();
@taginfo = $fh->taginfo($index_name);
$fh->open_index($name);
$fh->create_index($name, $taginfo);
$fh->reindex();
$fh->set_tag();
$fh->seek($key);
$q = $fh->prepare_query($expr [, $sortexpr [, $desc]]);
$q->execute;
$q->next([$skip]);
Miscellaneous functions
CodeBase::option(@options);
$errno = CodeBase::errno();
$errmsg = CodeBase::errmsg($errno);
$version = CodeBase::libversion;
$dbtype = CodeBase::dbtype;
<<lessABSTRACT
The CodeBase module provides a Perl 5 class for accessing dBASE files. It is a development of an earlier unpublished Perl 4 extension.
SYNOPSIS
Programs using the CodeBase module must include the line:
use CodeBase;
The functions that the module provides are listed below, grouped according to type of function.
File manipulation functions
$fh = CodeBase::open($filename, @options);
$fh = CodeBase::create($filename, @fielddefs);
$fh->DESTROY();
File information functions
$n_recs = $fh->reccount();
$recsize = $fh->recsize();
$n_fields = $fh->fldcount();
@names = $fh->names();
$type = $fh->type($fieldname);
@fieldinfo = $fh->fieldinfo();
Navigation functions
$recno = $fh->recno();
$fh->goto($recno);
$fh->skip($n_recs);
$fh->bof();
$fh->eof();
Record manipulation functions
@values = $fh->fields();
$value = $fh->field($fieldname);
$fh->set_field($fieldname, $value);
$fh->new_record(@values);
$fh->replace_record(@values);
$fh->deleted();
$fh->delete_record($recno);
$fh->flush($tries);
$fh->pack($compress_memo);
$fh->lock($what, $tries);
$fh->unlock();
Index manipulation functions
$n_tags = $fh->tag_count();
@tags = $fh->tags();
@taginfo = $fh->taginfo($index_name);
$fh->open_index($name);
$fh->create_index($name, $taginfo);
$fh->reindex();
$fh->set_tag();
$fh->seek($key);
$q = $fh->prepare_query($expr [, $sortexpr [, $desc]]);
$q->execute;
$q->next([$skip]);
Miscellaneous functions
CodeBase::option(@options);
$errno = CodeBase::errno();
$errmsg = CodeBase::errmsg($errno);
$version = CodeBase::libversion;
$dbtype = CodeBase::dbtype;
Download (0.030MB)
Added: 2007-07-07 License: Perl Artistic License Price:
844 downloads
httplog 2.1
httplog is an apache log rollover program w/strftime(3) filename support. more>>
httplog is a replacement for Apaches rotatelogs and Andrew Fords chronolog. It allows you to specify a logfile using strftime paramaters in the filename to act as a template.
This means that the logs in your logfiles will also be sorted according to the filename. For example, if you specify a logfile of /var/log/http%Y%m%d.log, a new log file would be generated each day, with content for only that one day.
It also supports compression of logfiles using gzip, and many other useful functions.
It takes one argument at the command line, the path to a logfile as a template.
The template pathname can use any valid special characters permitted in strftime(3). Other optional arguments can be appended to the command line.
If you want to have httplog run as a different user and/or group (instead of running as root - possible security risks), you can use the `-u and `-g to have httplog run as that user and/or group.
You can also specify `-b to have httplog use a custom buffer size for memory storage of log data, rather than the default value of just line buffering mode (flushes data per newline).
If you want to have your logfiles gzipped because of size constraints, you can now use the `-z option to have httplog gzip all logfiles once its done writing all data to them (when a rollover period hits and a new logfile is to be created).
You may have a symlink to the currently active logfile by using the `-s option and specifying a filename to be used as the symlink.
This program makes Apache act similar to Microsofts IIS webserver in its logging style (as opposed to every logfile entry in one single huge logfile). This allows you to easily maintain your webserver logfiles for statistics packages in an easily organizable manner without user intervention.
Because of the buffer option added since v1.5, httplog may also be usefull for extremely large sites that get thousands of hits per second, and typically disable logging to save their hard drives from dying.
The buffer size option can be used to create an extremely large buffer in ram so that logfiles would not be flushed as often as if it were in line buffering mode, and in essence, could prolong the life of your valuable drives by decreasing their activity.
Enhancements:
- Removed a couple of lines of code that could cause segfaults if errors were imminent while opening new a file or allocating the buffer memory
<<lessThis means that the logs in your logfiles will also be sorted according to the filename. For example, if you specify a logfile of /var/log/http%Y%m%d.log, a new log file would be generated each day, with content for only that one day.
It also supports compression of logfiles using gzip, and many other useful functions.
It takes one argument at the command line, the path to a logfile as a template.
The template pathname can use any valid special characters permitted in strftime(3). Other optional arguments can be appended to the command line.
If you want to have httplog run as a different user and/or group (instead of running as root - possible security risks), you can use the `-u and `-g to have httplog run as that user and/or group.
You can also specify `-b to have httplog use a custom buffer size for memory storage of log data, rather than the default value of just line buffering mode (flushes data per newline).
If you want to have your logfiles gzipped because of size constraints, you can now use the `-z option to have httplog gzip all logfiles once its done writing all data to them (when a rollover period hits and a new logfile is to be created).
You may have a symlink to the currently active logfile by using the `-s option and specifying a filename to be used as the symlink.
This program makes Apache act similar to Microsofts IIS webserver in its logging style (as opposed to every logfile entry in one single huge logfile). This allows you to easily maintain your webserver logfiles for statistics packages in an easily organizable manner without user intervention.
Because of the buffer option added since v1.5, httplog may also be usefull for extremely large sites that get thousands of hits per second, and typically disable logging to save their hard drives from dying.
The buffer size option can be used to create an extremely large buffer in ram so that logfiles would not be flushed as often as if it were in line buffering mode, and in essence, could prolong the life of your valuable drives by decreasing their activity.
Enhancements:
- Removed a couple of lines of code that could cause segfaults if errors were imminent while opening new a file or allocating the buffer memory
Download (0.013MB)
Added: 2005-04-25 License: Free To Use But Restricted Price:
1644 downloads
Openglad 0.98
Openglad is a SDL port of the old (and recently open-sourced) DOS game Gladiator. more>>
Openglad project is a SDL port of the old (and recently open-sourced) DOS game Gladiator.
Openglad is an SDL port of an old DOS game called Gladiator, which was developed by FSGames in the mid 90s. It is a top-down gauntlet-style RPG in which you hire team mates, go on missions, and improve your team with the spoils you reap. It can be played by up to 4 players (using split-screen), and features many classes, special abilities, and a scenario editor.
<<lessOpenglad is an SDL port of an old DOS game called Gladiator, which was developed by FSGames in the mid 90s. It is a top-down gauntlet-style RPG in which you hire team mates, go on missions, and improve your team with the spoils you reap. It can be played by up to 4 players (using split-screen), and features many classes, special abilities, and a scenario editor.
Download (0.67MB)
Added: 2007-01-04 License: GPL (GNU General Public License) Price:
1031 downloads
Template::Plugin::Digest::MD5 0.03
Template::Plugin::Digest::MD5 is a TT2 interface to the MD5 Algorithm. more>>
Template::Plugin::Digest::MD5 is a TT2 interface to the MD5 Algorithm.
SYNOPSIS
[% USE Digest.MD5 -%]
[% checksum = content FILTER md5 -%]
[% checksum = content FILTER md5_hex -%]
[% checksum = content FILTER md5_base64 -%]
[% checksum = content.md5 -%]
[% checksum = content.md5_hex -%]
[% checksum = content.md5_base64 -%]
The Digest.MD5 Template Toolkit plugin provides access to the MD5 algorithm via the Digest::MD5 module. It is used like a plugin but installs filters and vmethods into the current context.
When you invoke
[% USE Digest.MD5 %]
the following filters (and vmethods of the same name) are installed into the current context:
md5
Calculate the MD5 digest of the input, and return it in binary form. The returned string will be 16 bytes long.
md5_hex
Same as md5, but will return the digest in hexadecimal form. The length of the returned string will be 32 and it will only contain characters from this set: 0..9 and a..f.
md5_base64
Same as md5, but will return the digest as a base64 encoded string. The length of the returned string will be 22 and it will only contain characters from this set: A..Z, a..z, 0..9, + and /.
Note that the base64 encoded string returned is not padded to be a multiple of 4 bytes long. If you want interoperability with other base64 encoded md5 digests you might want to append the redundant string "==" to the result.
As the filters are also available as vmethods the following are all equivalent:
FILTER md5_hex; content; END;
content FILTER md5_hex;
content.md5_base64;
<<lessSYNOPSIS
[% USE Digest.MD5 -%]
[% checksum = content FILTER md5 -%]
[% checksum = content FILTER md5_hex -%]
[% checksum = content FILTER md5_base64 -%]
[% checksum = content.md5 -%]
[% checksum = content.md5_hex -%]
[% checksum = content.md5_base64 -%]
The Digest.MD5 Template Toolkit plugin provides access to the MD5 algorithm via the Digest::MD5 module. It is used like a plugin but installs filters and vmethods into the current context.
When you invoke
[% USE Digest.MD5 %]
the following filters (and vmethods of the same name) are installed into the current context:
md5
Calculate the MD5 digest of the input, and return it in binary form. The returned string will be 16 bytes long.
md5_hex
Same as md5, but will return the digest in hexadecimal form. The length of the returned string will be 32 and it will only contain characters from this set: 0..9 and a..f.
md5_base64
Same as md5, but will return the digest as a base64 encoded string. The length of the returned string will be 22 and it will only contain characters from this set: A..Z, a..z, 0..9, + and /.
Note that the base64 encoded string returned is not padded to be a multiple of 4 bytes long. If you want interoperability with other base64 encoded md5 digests you might want to append the redundant string "==" to the result.
As the filters are also available as vmethods the following are all equivalent:
FILTER md5_hex; content; END;
content FILTER md5_hex;
content.md5_base64;
Download (0.004MB)
Added: 2007-04-06 License: Perl Artistic License Price:
931 downloads
Template::Plugin::Digest::SHA1 0.03
Template::Plugin::Digest::SHA1 is a TT2 interface to the SHA1 Algorithm. more>>
Template::Plugin::Digest::SHA1 is a TT2 interface to the SHA1 Algorithm.
SYNOPSIS
[% USE Digest.SHA1 -%]
[% checksum = content FILTER sha1 -%]
[% checksum = content FILTER sha1_hex -%]
[% checksum = content FILTER sha1_base64 -%]
[% checksum = content.sha1 -%]
[% checksum = content.sha1_hex -%]
[% checksum = content.sha1_base64 -%]
The Digest.SHA1 Template Toolkit plugin provides access to the NIST SHA-1 algorithm via the Digest::SHA1 module. It is used like a plugin but installs filters and vmethods into the current context.
<<lessSYNOPSIS
[% USE Digest.SHA1 -%]
[% checksum = content FILTER sha1 -%]
[% checksum = content FILTER sha1_hex -%]
[% checksum = content FILTER sha1_base64 -%]
[% checksum = content.sha1 -%]
[% checksum = content.sha1_hex -%]
[% checksum = content.sha1_base64 -%]
The Digest.SHA1 Template Toolkit plugin provides access to the NIST SHA-1 algorithm via the Digest::SHA1 module. It is used like a plugin but installs filters and vmethods into the current context.
Download (0.004MB)
Added: 2007-04-04 License: Perl Artistic License Price:
933 downloads
WebService::GoogleHack 0.15
WebService::GoogleHack is a Perl package that ties together all GoogleHack modules. more>>
WebService::GoogleHack is a Perl package that ties together all GoogleHack modules (Webservice::GoogleHack::Search, Webservice::GoogleHack::Spelling, Webservice::GoogleHack::Rate, and Webservice::GoogleHack::Text) to implement Natural Language Processing techniques that use the World Wide Web as a source of information. Use this package to access all the functionality of GoogleHack.
SYNOPSIS
use WebService::GoogleHack;
my $google = new WebService::GoogleHack;
#Initializing the object to the contents of the configuration file
# API Key, GoogleSearch.wsdl file location.
$google->initConfig("initconfig.txt");
#Printing the contents of the configuration file
$google->printConfig();
#Measure the semantic relatedness between the words "white house" and
#"president".
$measure=$google->measureSemanticRelatedness1("white house","president");
print "nRelatedness measure between white house and president is: ";
print $measure."n";
#Going to search for words that are related to "toyota" and "ford"
my @terms=();
push(@terms,"toyota");
push(@terms,"ford");
#The parameters are the search terms, number of web page results to look
#at, the number of iterations,output file and the "true" indicates that the
#diagnostic data should be stored in the file "results.txt"
$results=$google->Algorithm1(@terms,10,25,1,"results.txt","true");
print $results;
WebService::GoogleHack is a PERL package that interacts with the Google API, and implements basic functions that allow the user to interact with Google and retrieve results in an easy to use format. GoogleHack also implements and extends a number of Natural Language Processing by using the World Wide Web as a source of information.
Main features:
- Issue queries to Google (WebService::GoogleHack, WebService::GoogleHack::Search)
- Retrieve Spelling suggestions from Google (WebService::GoogleHack, WebService::GoogleHack::Spelling)
- Find the Pointwise Mututal Information (PMI) measure between two words (WebService::GoogleHack,WebService::GoogleHack::Rate)
- Given a paragraph find if the paragraph has a positive or negative semantic orientation.(WebService::GoogleHack,WebService::GoogleHack::Rate)
- Given a set of words along with a positively oriented word such as "excellent" and a negatively oriented word such as "poor", find if the word has a positive or negative semantic orientation.(WebService::GoogleHack,WebService::GoogleHack::Rate)
- Given a set of phrases along with a positively oriented word such as "excellent" and a negatively oriented word such as "poor", predict if the given phrases are positive or negative in sentiment.(WebService::GoogleHack,WebService::GoogleHack::Rate)
- Given two or more words finds a set of related words. (WebService::GoogleHack)
<<lessSYNOPSIS
use WebService::GoogleHack;
my $google = new WebService::GoogleHack;
#Initializing the object to the contents of the configuration file
# API Key, GoogleSearch.wsdl file location.
$google->initConfig("initconfig.txt");
#Printing the contents of the configuration file
$google->printConfig();
#Measure the semantic relatedness between the words "white house" and
#"president".
$measure=$google->measureSemanticRelatedness1("white house","president");
print "nRelatedness measure between white house and president is: ";
print $measure."n";
#Going to search for words that are related to "toyota" and "ford"
my @terms=();
push(@terms,"toyota");
push(@terms,"ford");
#The parameters are the search terms, number of web page results to look
#at, the number of iterations,output file and the "true" indicates that the
#diagnostic data should be stored in the file "results.txt"
$results=$google->Algorithm1(@terms,10,25,1,"results.txt","true");
print $results;
WebService::GoogleHack is a PERL package that interacts with the Google API, and implements basic functions that allow the user to interact with Google and retrieve results in an easy to use format. GoogleHack also implements and extends a number of Natural Language Processing by using the World Wide Web as a source of information.
Main features:
- Issue queries to Google (WebService::GoogleHack, WebService::GoogleHack::Search)
- Retrieve Spelling suggestions from Google (WebService::GoogleHack, WebService::GoogleHack::Spelling)
- Find the Pointwise Mututal Information (PMI) measure between two words (WebService::GoogleHack,WebService::GoogleHack::Rate)
- Given a paragraph find if the paragraph has a positive or negative semantic orientation.(WebService::GoogleHack,WebService::GoogleHack::Rate)
- Given a set of words along with a positively oriented word such as "excellent" and a negatively oriented word such as "poor", find if the word has a positive or negative semantic orientation.(WebService::GoogleHack,WebService::GoogleHack::Rate)
- Given a set of phrases along with a positively oriented word such as "excellent" and a negatively oriented word such as "poor", predict if the given phrases are positive or negative in sentiment.(WebService::GoogleHack,WebService::GoogleHack::Rate)
- Given two or more words finds a set of related words. (WebService::GoogleHack)
Download (0.088MB)
Added: 2006-11-28 License: Perl Artistic License Price:
1060 downloads
Print Plug-In 2.0.2
Print Plug-In provides a basic printing capability for The GIMP. more>>
Print Plug-In provides a basic printing capability for The GIMP.
The current release supports PostScript, PCL (HP LaserJet and DeskJet), and ESC/P2 (EPSON Stylus Color) printers. The PostScript printer drivers handle PPD (PostScript Printer Description) files if you have them.
Using the Print Plug-In:
The Printer option provides selections for many common printers. Currently the print plug-in supports the following printers:
- PostScript printers
- HP DeskJet 500, 500C, 520, 540C, 600C, 660C, 68xC, 69xC, 850C, 855C, 855Cse, 855Cxi, 870Cse, 870Cxi, 1100C, 1120C, 1200C, and 1600C printers
- HP LaserJet II, III, IIIp, IIIsi, 4, 4L, 4P, 4V, 4Si, 5, 5FS, 5L, 5P, 5SE, 5Si, 6L, 6P printers
- EPSON Stylus Color, Color Pro, Color Pro XL, Color 400, Color 500, Color 600, Color 800, Color 1500, Color 1520, and Color 3000.
The Output Type option controls whether the printed output is in color or B&W (grayscale). This option is silently forced to B&W for grayscale images and B&W-only printers.
The Media Size option controls the size of the output. By default images are printed to fit the page and are automatically rotated to fill the largest area possible.
The Media Type option tells the printer what type of media is being used (Plain, Coated, etc). Not all printers support the media type option.
The Media Source option tells the printer which paper tray to print from. Not all printers support the media source option.
The Resolution option controls the resolution of the output. Not all printers support the resolution option.
The Orientation option controls whether the output is automatically rotated for maximum page coverage (Auto) or set to a specific orientation (Portrait or Landscape).
The Scaling option controls how large the printed image is. The default is to scale to a percentage of the printable area of the page. You can also specify an image resolution in pixels-per-inch (PPI) by clicking on the PPI radio button. The image is centered by default, however you can adjust the position of the image on the page by dragging the preview image.
The Brightness option controls the overall printed image brightness. A brightness of 100 is usually good for most B&W and PostScript printers, while most inkjet printers need a brightness between 100 and 120 for acceptable results.
Printing to a File
If you want to print to a file, select File from the Printer list. A file chooser dialog is displayed when you press the Print button. Warning, when you print to a file any existing file will be silently overwritten by this release of the plug-in!
Layered Images
Like most plug-ins, the print plug-in only reads the image from the active layer. If you want to print a composite of all visible layers you need to merge the layers (CTRL-M) and then print.
Supported Printers/Features
Most of the printer drivers in the print plug-in use the highest supported resolution for a printer, with the following exceptions:
- EPSON Stylus Color 600, 800, 1520, and 3000 - Currently the driver only supports 720 DPI printing in "compatibility" mode. This makes the drivers extremely slow compared to the Windows and Mac drivers. Unfortunately, I cannot provide optimized drivers (nor drivers for 1440x720) because of our NDA with EPSON.
- EPSON Stylus Photo, Photo Ex, Photo 700 - Currently the driver only supports 720 DPI printing in "compatibility" mode. This makes the drivers extremely slow compared to the Windows and Mac drivers, and you dont get the use of the light cyan and magenta inks (again, because of NDA restrictions.)
<<lessThe current release supports PostScript, PCL (HP LaserJet and DeskJet), and ESC/P2 (EPSON Stylus Color) printers. The PostScript printer drivers handle PPD (PostScript Printer Description) files if you have them.
Using the Print Plug-In:
The Printer option provides selections for many common printers. Currently the print plug-in supports the following printers:
- PostScript printers
- HP DeskJet 500, 500C, 520, 540C, 600C, 660C, 68xC, 69xC, 850C, 855C, 855Cse, 855Cxi, 870Cse, 870Cxi, 1100C, 1120C, 1200C, and 1600C printers
- HP LaserJet II, III, IIIp, IIIsi, 4, 4L, 4P, 4V, 4Si, 5, 5FS, 5L, 5P, 5SE, 5Si, 6L, 6P printers
- EPSON Stylus Color, Color Pro, Color Pro XL, Color 400, Color 500, Color 600, Color 800, Color 1500, Color 1520, and Color 3000.
The Output Type option controls whether the printed output is in color or B&W (grayscale). This option is silently forced to B&W for grayscale images and B&W-only printers.
The Media Size option controls the size of the output. By default images are printed to fit the page and are automatically rotated to fill the largest area possible.
The Media Type option tells the printer what type of media is being used (Plain, Coated, etc). Not all printers support the media type option.
The Media Source option tells the printer which paper tray to print from. Not all printers support the media source option.
The Resolution option controls the resolution of the output. Not all printers support the resolution option.
The Orientation option controls whether the output is automatically rotated for maximum page coverage (Auto) or set to a specific orientation (Portrait or Landscape).
The Scaling option controls how large the printed image is. The default is to scale to a percentage of the printable area of the page. You can also specify an image resolution in pixels-per-inch (PPI) by clicking on the PPI radio button. The image is centered by default, however you can adjust the position of the image on the page by dragging the preview image.
The Brightness option controls the overall printed image brightness. A brightness of 100 is usually good for most B&W and PostScript printers, while most inkjet printers need a brightness between 100 and 120 for acceptable results.
Printing to a File
If you want to print to a file, select File from the Printer list. A file chooser dialog is displayed when you press the Print button. Warning, when you print to a file any existing file will be silently overwritten by this release of the plug-in!
Layered Images
Like most plug-ins, the print plug-in only reads the image from the active layer. If you want to print a composite of all visible layers you need to merge the layers (CTRL-M) and then print.
Supported Printers/Features
Most of the printer drivers in the print plug-in use the highest supported resolution for a printer, with the following exceptions:
- EPSON Stylus Color 600, 800, 1520, and 3000 - Currently the driver only supports 720 DPI printing in "compatibility" mode. This makes the drivers extremely slow compared to the Windows and Mac drivers. Unfortunately, I cannot provide optimized drivers (nor drivers for 1440x720) because of our NDA with EPSON.
- EPSON Stylus Photo, Photo Ex, Photo 700 - Currently the driver only supports 720 DPI printing in "compatibility" mode. This makes the drivers extremely slow compared to the Windows and Mac drivers, and you dont get the use of the light cyan and magenta inks (again, because of NDA restrictions.)
Download (0.033MB)
Added: 2006-08-16 License: GPL (GNU General Public License) Price:
1168 downloads
NAT Check 1
Check Your Network Address Translator for Compatibility with Peer-to-Peer Protocols. more>>
Check Your Network Address Translator for Compatibility with Peer-to-Peer Protocols.
If you are accessing the Internet from behind a Network Address Translator (NAT) of some kind, I would appreciate your help in surveying the behavior of different NATs, in terms of how and whether they support a certain technique for enabling peer-to-peer communication between NATted hosts (particularly when both endpoints are behind NATs). Down, you can understand what NAT is.
Suppose there are three communicating hosts: A, B, and C. Host A is a "well-known" Internet server with a permanent IP address, which acts as an "introducer" for the other two nodes. (For example, Host A might be a well-known ultrapeer or a game catalog server of some kind.) Host B, using Host As "introduction" services, would like to establish a direct peer-to-peer connection with host C. Both B and C, however, are behind (probably different) network address/port translators, and neither of them has exclusive use of any public IP address.
To initiate a peer-to-peer connection with host C, host B first sends A a message requesting an "introduction" to host C. A sends B a reply message containing Cs IP address and UDP port number as reported by host C, in addition to Cs IP address and UDP port number as observed by A. (If C is behind a NAT, then these two address/port combinations will be different.) At the same time, host A sends host C a message containing Bs IP address and UDP port numbers - again, both the ones reported by B and the ones observed by A, which will be different if B is behind a NAT.
Now B and C each know that they want to initiate a connection with each other, and they know each others public (NATted) as well as original IP addresses and UDP port numbers. Both B and C now start attempting to send UDP messages directly to each other, at each of the available addresses. If B and C happen to be behind the same NAT, then they will be able to communicate with each other directly using their "originally reported" IP addresses and UDP port numbers.
In the more common case where B and C are behind different NATs, the "originally reported" addresses will be useless because they will both be private IP addresses in different addressing domains. Instead, the IP address/UDP port combinations observed by A can be used in this case to establish direct communication. Although Bs NAT will initially filter out any UDP packets arriving from Cs public (NATted) UDP port directed at Bs public port, the first UDP message B sends to C will cause Bs NAT to open up a new UDP session keyed on Cs public port, allowing future incoming traffic from C to pass through the NAT to B. Similarly, the first few messages from B to C may be filtered out by Cs NAT, but will be able to start passing through the firewall as soon as Cs first message to B causes Cs NAT to open up a new session. In this way, each NAT is tricked into thinking that its respective internal host is the "initiator" of this new session, when in fact the session is fully symmetrical and was initiated (with As help) simultaneously in each direction.
Required NAT Behavior
There is one important requirement that the NATs must satisfy in order for this technique to work: the NATs must be designed so that they assign only one (public IP address, public UDP port) pair to each (internal IP address, internal UDP port) combination, rather than allocating and assigning a new public UDP port for each new UDP session. Recall that a "session" in Internet terminology is defined by the IP addresses and port numbers of both communicating endpoints, so host Bs communication with host A is considered to be one session while host Bs communication with host C is a different session. If Bs NAT, for example, assigns one public UDP port for Bs communication with A, and then assigns B a different public UDP port for the new session B tries to open up with C, then the above technique for peer-to-peer communication will not work because Cs messages to B will be directed to the wrong UDP port.
RFC 3022 explicitly allows and suggests that NATs behave in the former, "desirable" fashion, by maintaining a single (public IP, public port) mapping for a given (internal IP, internal port) combination independent of the number of active sessions involving this mapping. This behavior is not only good for compatibility with UDP applications, but it also helps to conserve the NATs scarce pool of public port numbers. Maintaining a consistent public port mapping does not adversely affect security in any way, either, because incoming traffic can still be filtered on a per-session basis regardless of how addresses are translated. There in fact appears to be no good reason not to implement the desirable behavior in a NAT, except perhaps for the implementation simplicity of naively allocating a new public port for every new session. Unfortunately, RFC 3022 does not require NATs to implement the desirable behavior, which has led me to wonder just how many real NATs actually do, and hence this page.
What NAT Check Does
The program natcheck.c is basically just a program that "pings" a well-known UDP port at two different servers that are publically accessible on the Internet. Both of these servers run the program natserver.c, with the command-line arguments "1" and "2" respectively. In addition, there a third "conspiring" server runs natserver with the command-line argument "3". Whenever each of the first two servers receives a UDP request, it not only sends a reply directly to the sender of that request, but also sends a message to the third server, which in turn "bounces" the reply back to the original client. The effect is that the client will receive not only solicited "ping" replies from the server the request was directed to, but also "unsolicited" replies from the third server.
To determine if the network address translator in use is implementing the desirable behavior of maintaining a single (public IP address, public port) mapping for a given (client IP address, client port), the client program natcheck.c basically just initiates a sequence of simultaneous pings to the first two servers (in case some of the requests or replies are lost in transit) and checks that the clients address and UDP port as reported by both servers is the same. If the NAT naively allocates a new public port for each new session, then the source port as reported by the two servers will be different, and its time to upgrade your NAT.
The replies echoed from the third server are used only to check whether the NAT properly filters out unsolicited incoming traffic on a per-session basis. Since the client never sends any messages to the third server, if the NAT is properly implementing firewall functionality, the client should never see the third servers echoed replies even after opening up active communication sessions with the first two servers.
Enhancements:
- The NAT Check client no longer attempts to guess whether you have Basic NAT or Network Address/Port Translation (NAPT). It turns to be quite difficult to test for this property reliably, because many NAPTs attempt to bind a private UDP port to a public port with the same port number if that port number is available, causing NAT Check to falsely report Basic NAT. The only way to test for this property reliably would be to run NAT Check on at least two client machines simultaneously, and since this property isnt terribly important to P2P apps its just not worth the trouble.
- The NAT Check client now tests for one additional NAT feature, which I call loopback translation. If a NAT supports loopback translation, it means that a host on the private network behind the NAT can communicate with other hosts on the same private network using public (translated) port bindings assigned by the NAT. Most NATs probably do not support this feature yet, but it may become increasingly important in the future where P2P clients may be located behind a common ISP-deployed NAT as well as individual home NATs. More details on loopback translation will appear in the next version of my Internet-Draft, to be released soon.
- The NAT Check client program now has a command-line option, "-v", which turns on verbose messages during the test.
<<lessIf you are accessing the Internet from behind a Network Address Translator (NAT) of some kind, I would appreciate your help in surveying the behavior of different NATs, in terms of how and whether they support a certain technique for enabling peer-to-peer communication between NATted hosts (particularly when both endpoints are behind NATs). Down, you can understand what NAT is.
Suppose there are three communicating hosts: A, B, and C. Host A is a "well-known" Internet server with a permanent IP address, which acts as an "introducer" for the other two nodes. (For example, Host A might be a well-known ultrapeer or a game catalog server of some kind.) Host B, using Host As "introduction" services, would like to establish a direct peer-to-peer connection with host C. Both B and C, however, are behind (probably different) network address/port translators, and neither of them has exclusive use of any public IP address.
To initiate a peer-to-peer connection with host C, host B first sends A a message requesting an "introduction" to host C. A sends B a reply message containing Cs IP address and UDP port number as reported by host C, in addition to Cs IP address and UDP port number as observed by A. (If C is behind a NAT, then these two address/port combinations will be different.) At the same time, host A sends host C a message containing Bs IP address and UDP port numbers - again, both the ones reported by B and the ones observed by A, which will be different if B is behind a NAT.
Now B and C each know that they want to initiate a connection with each other, and they know each others public (NATted) as well as original IP addresses and UDP port numbers. Both B and C now start attempting to send UDP messages directly to each other, at each of the available addresses. If B and C happen to be behind the same NAT, then they will be able to communicate with each other directly using their "originally reported" IP addresses and UDP port numbers.
In the more common case where B and C are behind different NATs, the "originally reported" addresses will be useless because they will both be private IP addresses in different addressing domains. Instead, the IP address/UDP port combinations observed by A can be used in this case to establish direct communication. Although Bs NAT will initially filter out any UDP packets arriving from Cs public (NATted) UDP port directed at Bs public port, the first UDP message B sends to C will cause Bs NAT to open up a new UDP session keyed on Cs public port, allowing future incoming traffic from C to pass through the NAT to B. Similarly, the first few messages from B to C may be filtered out by Cs NAT, but will be able to start passing through the firewall as soon as Cs first message to B causes Cs NAT to open up a new session. In this way, each NAT is tricked into thinking that its respective internal host is the "initiator" of this new session, when in fact the session is fully symmetrical and was initiated (with As help) simultaneously in each direction.
Required NAT Behavior
There is one important requirement that the NATs must satisfy in order for this technique to work: the NATs must be designed so that they assign only one (public IP address, public UDP port) pair to each (internal IP address, internal UDP port) combination, rather than allocating and assigning a new public UDP port for each new UDP session. Recall that a "session" in Internet terminology is defined by the IP addresses and port numbers of both communicating endpoints, so host Bs communication with host A is considered to be one session while host Bs communication with host C is a different session. If Bs NAT, for example, assigns one public UDP port for Bs communication with A, and then assigns B a different public UDP port for the new session B tries to open up with C, then the above technique for peer-to-peer communication will not work because Cs messages to B will be directed to the wrong UDP port.
RFC 3022 explicitly allows and suggests that NATs behave in the former, "desirable" fashion, by maintaining a single (public IP, public port) mapping for a given (internal IP, internal port) combination independent of the number of active sessions involving this mapping. This behavior is not only good for compatibility with UDP applications, but it also helps to conserve the NATs scarce pool of public port numbers. Maintaining a consistent public port mapping does not adversely affect security in any way, either, because incoming traffic can still be filtered on a per-session basis regardless of how addresses are translated. There in fact appears to be no good reason not to implement the desirable behavior in a NAT, except perhaps for the implementation simplicity of naively allocating a new public port for every new session. Unfortunately, RFC 3022 does not require NATs to implement the desirable behavior, which has led me to wonder just how many real NATs actually do, and hence this page.
What NAT Check Does
The program natcheck.c is basically just a program that "pings" a well-known UDP port at two different servers that are publically accessible on the Internet. Both of these servers run the program natserver.c, with the command-line arguments "1" and "2" respectively. In addition, there a third "conspiring" server runs natserver with the command-line argument "3". Whenever each of the first two servers receives a UDP request, it not only sends a reply directly to the sender of that request, but also sends a message to the third server, which in turn "bounces" the reply back to the original client. The effect is that the client will receive not only solicited "ping" replies from the server the request was directed to, but also "unsolicited" replies from the third server.
To determine if the network address translator in use is implementing the desirable behavior of maintaining a single (public IP address, public port) mapping for a given (client IP address, client port), the client program natcheck.c basically just initiates a sequence of simultaneous pings to the first two servers (in case some of the requests or replies are lost in transit) and checks that the clients address and UDP port as reported by both servers is the same. If the NAT naively allocates a new public port for each new session, then the source port as reported by the two servers will be different, and its time to upgrade your NAT.
The replies echoed from the third server are used only to check whether the NAT properly filters out unsolicited incoming traffic on a per-session basis. Since the client never sends any messages to the third server, if the NAT is properly implementing firewall functionality, the client should never see the third servers echoed replies even after opening up active communication sessions with the first two servers.
Enhancements:
- The NAT Check client no longer attempts to guess whether you have Basic NAT or Network Address/Port Translation (NAPT). It turns to be quite difficult to test for this property reliably, because many NAPTs attempt to bind a private UDP port to a public port with the same port number if that port number is available, causing NAT Check to falsely report Basic NAT. The only way to test for this property reliably would be to run NAT Check on at least two client machines simultaneously, and since this property isnt terribly important to P2P apps its just not worth the trouble.
- The NAT Check client now tests for one additional NAT feature, which I call loopback translation. If a NAT supports loopback translation, it means that a host on the private network behind the NAT can communicate with other hosts on the same private network using public (translated) port bindings assigned by the NAT. Most NATs probably do not support this feature yet, but it may become increasingly important in the future where P2P clients may be located behind a common ISP-deployed NAT as well as individual home NATs. More details on loopback translation will appear in the next version of my Internet-Draft, to be released soon.
- The NAT Check client program now has a command-line option, "-v", which turns on verbose messages during the test.
Added: 2006-06-21 License: GPL (GNU General Public License) Price:
737 downloads
Majic 0.01pre2
Majic is an Erc interprter and compiler. more>>
Majic is the interpreter for a language called Erc. It is written in Java and follows the documented standard for the Erc language. First, a word about Erc: Erc is a link-oriented language. In fact, it is the first link-oriented language. It uses a novel syntax with roots in TCL, Scheme, Bash, and natural languages, among others.
Link orientation is a programming paradigm similar to a cross between link-orientation and object-orientation, with a little hypertext markup thrown in for good measure. In it, although it contains list-like structures which behave like objects, the focus is in fact the links between concepts (structures and elements), as opposed to list organization/processing or object creation.
This makes link-oriented languages such as Erc good for AI or other applications which require keeping track of links between concepts, such as expert systems, semantic searching, and neural nets.
Erc is pronounced URk, with a short U. Majic is pronounced MAH-jik. Both names are derived from the book Web of Angels by John M Ford, in which the Erc was the ethreal currency used in the book universe, and Majic was slang for multiple Erc.
Majic stands for Majic Ate Java Inline Classes, or My Awesome Java Interpreter Code. Erc stands for Enumerate Relative Constants, or Ercs Really Cool. Choose an interpretation, either I sound overconfident (read: like an arrogant jerk), obtrusely technical, or like a hacker with a bad sense of humor. All of that is true, just to clear stuff up.
<<lessLink orientation is a programming paradigm similar to a cross between link-orientation and object-orientation, with a little hypertext markup thrown in for good measure. In it, although it contains list-like structures which behave like objects, the focus is in fact the links between concepts (structures and elements), as opposed to list organization/processing or object creation.
This makes link-oriented languages such as Erc good for AI or other applications which require keeping track of links between concepts, such as expert systems, semantic searching, and neural nets.
Erc is pronounced URk, with a short U. Majic is pronounced MAH-jik. Both names are derived from the book Web of Angels by John M Ford, in which the Erc was the ethreal currency used in the book universe, and Majic was slang for multiple Erc.
Majic stands for Majic Ate Java Inline Classes, or My Awesome Java Interpreter Code. Erc stands for Enumerate Relative Constants, or Ercs Really Cool. Choose an interpretation, either I sound overconfident (read: like an arrogant jerk), obtrusely technical, or like a hacker with a bad sense of humor. All of that is true, just to clear stuff up.
Download (0.028MB)
Added: 2005-04-14 License: GPL (GNU General Public License) Price:
1655 downloads
Template::Plugin::Lingua::EN::Inflect 0.02
Template::Plugin::Lingua::EN::Inflect is a Perl interface to Lingua::EN::Inflect module. more>>
Template::Plugin::Lingua::EN::Inflect is a Perl interface to Lingua::EN::Inflect module.
SYNOPSIS
[% USE infl = Lingua.EN.Inflect; -%]
[% FILTER inflect(number => 42); -%]
There PL_V(was) NO(error).
PL_ADJ(This) PL_N(error) PL_V(was) fatal.
[% END; -%]
[% "... and "; infl.ORD(9); "ly..." %]
# Output:
# There were 42 errors.
# These errors were fatal.
# ... and 9thly...
The Lingua::EN::Inflect is an interface to Damian Conways Linua::EN::Inflect Perl module, which provides plural inflections, "a"/"an" selection for English words, and manipulation of numbers as words.
The plugin provides an inflect filter, which can be used to interpolate inflections in a string. The NUM() function set a persistent default value to be used whenever an optional number argument is omitted. The number to be used for a particular invocation of inflect can also be specified with a number option.
<<lessSYNOPSIS
[% USE infl = Lingua.EN.Inflect; -%]
[% FILTER inflect(number => 42); -%]
There PL_V(was) NO(error).
PL_ADJ(This) PL_N(error) PL_V(was) fatal.
[% END; -%]
[% "... and "; infl.ORD(9); "ly..." %]
# Output:
# There were 42 errors.
# These errors were fatal.
# ... and 9thly...
The Lingua::EN::Inflect is an interface to Damian Conways Linua::EN::Inflect Perl module, which provides plural inflections, "a"/"an" selection for English words, and manipulation of numbers as words.
The plugin provides an inflect filter, which can be used to interpolate inflections in a string. The NUM() function set a persistent default value to be used whenever an optional number argument is omitted. The number to be used for a particular invocation of inflect can also be specified with a number option.
Download (0.005MB)
Added: 2007-04-04 License: Perl Artistic License Price:
933 downloads
Secleted [ 0 ] software to compare
- Page: 1 of 1
- 1
Copyright Notice:
Software piracy is theft, Using crack, password, serial numbers, registration codes, key generators is illegal and prevent future software development. The above 4.4l ford diesel search only lists software in full, demo and trial versions for free download. Download links are directly from our mirror sites or publisher sites, torrent files or links from rapidshare.com, yousendit.com or megaupload.com are not allowed