Click here to Skip to main content
15,880,608 members
Articles / Artificial Intelligence

Artificial Neural Networks made easy with the FANN library

Rate me:
Please Sign up or sign in to vote.
4.93/5 (46 votes)
28 Aug 2013CPOL24 min read 194.1K   10.6K   206  
Neural networks are typically associated with specialised applications, developed only by select groups of experts. This misconception has had a highly negative effect on its popularity. Hopefully, the FANN library will help fill this gap.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML
><HEAD
><TITLE
>Fast Artificial Neural Network Library</TITLE
><link href="../style.css" rel="stylesheet" type="text/css"><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.7"><LINK
REL="NEXT"
TITLE="Introduction"
HREF="c13.html"></HEAD
><BODY
CLASS="book"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="BOOK"
><A
NAME="AEN1"
></A
><DIV
CLASS="TITLEPAGE"
><H1
CLASS="title"
><A
NAME="bookinfo"
>Fast Artificial Neural Network Library</A
></H1
><H3
CLASS="author"
><A
NAME="AEN5"
></A
>Steffen Nissen</H3
><H3
CLASS="author"
><A
NAME="AEN8"
></A
>Evan Nemerson</H3
><P
CLASS="copyright"
>Copyright &copy; 2004 </P
><HR></DIV
><DIV
CLASS="TOC"
><DL
><DT
><B
>Table of Contents</B
></DT
><DT
>1. <A
HREF="c13.html"
>Introduction</A
></DT
><DD
><DL
><DT
>1.1. <A
HREF="c13.html#intro.dl"
>Getting FANN</A
></DT
><DT
>1.2. <A
HREF="x26.html"
>Installation</A
></DT
><DD
><DL
><DT
>1.2.1. <A
HREF="x26.html#intro.install.rpm"
>RPMs</A
></DT
><DT
>1.2.2. <A
HREF="x26.html#intro.install.deb"
>DEBs</A
></DT
><DT
>1.2.3. <A
HREF="x26.html#intro.install.win32"
>Windows</A
></DT
><DT
>1.2.4. <A
HREF="x26.html#intro.install.src"
>Compiling from source</A
></DT
></DL
></DD
><DT
>1.3. <A
HREF="x68.html"
>Getting Started</A
></DT
><DD
><DL
><DT
>1.3.1. <A
HREF="x68.html#intro.start.train"
>Training</A
></DT
><DT
>1.3.2. <A
HREF="x68.html#intro.start.execution"
>Execution</A
></DT
></DL
></DD
><DT
>1.4. <A
HREF="x100.html"
>Getting Help</A
></DT
></DL
></DD
><DT
>2. <A
HREF="c104.html"
>Advanced Usage</A
></DT
><DD
><DL
><DT
>2.1. <A
HREF="c104.html#adv.adj"
>Adjusting Parameters</A
></DT
><DT
>2.2. <A
HREF="x141.html"
>Network Design</A
></DT
><DT
>2.3. <A
HREF="x148.html"
>Understanding the Error Value</A
></DT
><DT
>2.4. <A
HREF="x161.html"
>Training and Testing</A
></DT
><DT
>2.5. <A
HREF="x181.html"
>Avoid Over-Fitting</A
></DT
><DT
>2.6. <A
HREF="x184.html"
>Adjusting Parameters During Training</A
></DT
></DL
></DD
><DT
>3. <A
HREF="c189.html"
>Fixed Point Usage</A
></DT
><DD
><DL
><DT
>3.1. <A
HREF="c189.html#fixed.train"
>Training a Fixed Point ANN</A
></DT
><DT
>3.2. <A
HREF="x203.html"
>Running a Fixed Point ANN</A
></DT
><DT
>3.3. <A
HREF="x217.html"
>Precision of a Fixed Point ANN</A
></DT
></DL
></DD
><DT
>4. <A
HREF="c225.html"
>Neural Network Theory</A
></DT
><DD
><DL
><DT
>4.1. <A
HREF="c225.html#theory.neural_networks"
>Neural Networks</A
></DT
><DT
>4.2. <A
HREF="x241.html"
>Artificial Neural Networks</A
></DT
><DT
>4.3. <A
HREF="x246.html"
>Training an ANN</A
></DT
></DL
></DD
><DT
>5. <A
HREF="c253.html"
>API Reference</A
></DT
><DD
><DL
><DT
>5.1. <A
HREF="c253.html#api.sec.create_destroy"
>Creation, Destruction, and Execution</A
></DT
><DD
><DL
><DT
><A
HREF="r258.html"
>fann_create</A
>&nbsp;--&nbsp;Create a new artificial neural network, and return a pointer to it.</DT
><DT
><A
HREF="r285.html"
>fann_create_array</A
>&nbsp;--&nbsp;Create a new artificial neural network, and return a pointer to it.</DT
><DT
><A
HREF="r315.html"
>fann_create_shortcut</A
>&nbsp;--&nbsp;Create a new artificial neural network with shortcut connections, and return a pointer to it.</DT
><DT
><A
HREF="r339.html"
>fann_create_shortcut_array</A
>&nbsp;--&nbsp;Create a new artificial neural network with shortcut connections, and return a pointer to it.</DT
><DT
><A
HREF="r361.html"
>fann_destroy</A
>&nbsp;--&nbsp;Destroy an ANN.</DT
><DT
><A
HREF="r376.html"
>fann_run</A
>&nbsp;--&nbsp;Run (execute) an ANN.</DT
><DT
><A
HREF="r396.html"
>fann_randomize_weights</A
>&nbsp;--&nbsp;Give each connection a random weight.</DT
><DT
><A
HREF="r421.html"
>fann_init_weights</A
>&nbsp;--&nbsp;Initialize the weight of each connection.</DT
><DT
><A
HREF="r448.html"
>fann_print_connections</A
>&nbsp;--&nbsp;Prints the connections of an ann.</DT
></DL
></DD
><DT
>5.2. <A
HREF="x472.html"
>Input/Output</A
></DT
><DD
><DL
><DT
><A
HREF="r474.html"
>fann_save</A
>&nbsp;--&nbsp;Save an ANN to a file.</DT
><DT
><A
HREF="r494.html"
>fann_save_to_fixed</A
>&nbsp;--&nbsp;Save an ANN to a fixed-point file.</DT
><DT
><A
HREF="r519.html"
>fann_create_from_file</A
>&nbsp;--&nbsp;Load an ANN from a file.</DT
></DL
></DD
><DT
>5.3. <A
HREF="x534.html"
>Training</A
></DT
><DD
><DL
><DT
><A
HREF="r536.html"
>fann_train</A
>&nbsp;--&nbsp;Train an ANN.</DT
><DT
><A
HREF="r557.html"
>fann_test</A
>&nbsp;--&nbsp;Tests an ANN.</DT
><DT
><A
HREF="r577.html"
>fann_get_MSE</A
>&nbsp;--&nbsp;Return the mean square error of an ANN.</DT
><DT
><A
HREF="r593.html"
>fann_reset_MSE</A
>&nbsp;--&nbsp;Reset the mean square error of an ANN.</DT
></DL
></DD
><DT
>5.4. <A
HREF="x609.html"
>Training Data</A
></DT
><DD
><DL
><DT
><A
HREF="r611.html"
>fann_read_train_from_file</A
>&nbsp;--&nbsp;Read training data from a file.</DT
><DT
><A
HREF="r629.html"
>fann_save_train</A
>&nbsp;--&nbsp;Save training data.</DT
><DT
><A
HREF="r648.html"
>fann_save_train_to_fixed</A
>&nbsp;--&nbsp;Save training data as fixed point.</DT
><DT
><A
HREF="r670.html"
>fann_destroy_train</A
>&nbsp;--&nbsp;Destroy training data.</DT
><DT
><A
HREF="r685.html"
>fann_train_epoch</A
>&nbsp;--&nbsp;Trains one epoch.</DT
><DT
><A
HREF="r709.html"
>fann_test_data</A
>&nbsp;--&nbsp;Calculates the mean square error for a set of data.</DT
><DT
><A
HREF="r726.html"
>fann_train_on_data</A
>&nbsp;--&nbsp;Train an ANN.</DT
><DT
><A
HREF="r761.html"
>fann_train_on_data_callback</A
>&nbsp;--&nbsp;Train an ANN.</DT
><DT
><A
HREF="r806.html"
>fann_train_on_file</A
>&nbsp;--&nbsp;Train an ANN.</DT
><DT
><A
HREF="r841.html"
>fann_train_on_file_callback</A
>&nbsp;--&nbsp;Train an ANN.</DT
><DT
><A
HREF="r886.html"
>fann_shuffle_train_data</A
>&nbsp;--&nbsp;Shuffle the training data.</DT
><DT
><A
HREF="r902.html"
>fann_merge_train_data</A
>&nbsp;--&nbsp;Merge two sets of training data.</DT
><DT
><A
HREF="r922.html"
>fann_duplicate_train_data</A
>&nbsp;--&nbsp;Copies a set of training data.</DT
></DL
></DD
><DT
>5.5. <A
HREF="x938.html"
>Options</A
></DT
><DD
><DL
><DT
><A
HREF="r940.html"
>fann_print_parameters</A
>&nbsp;--&nbsp;Prints all of the parameters and options of the ANN.</DT
><DT
><A
HREF="r954.html"
>fann_get_training_algorithm</A
>&nbsp;--&nbsp;Retrieve training algorithm from a network.</DT
><DT
><A
HREF="r972.html"
>fann_set_training_algorithm</A
>&nbsp;--&nbsp;Set a network's training algorithm.</DT
><DT
><A
HREF="r993.html"
>fann_get_learning_rate</A
>&nbsp;--&nbsp;Retrieve learning rate from a network.</DT
><DT
><A
HREF="r1007.html"
>fann_set_learning_rate</A
>&nbsp;--&nbsp;Set a network's learning rate.</DT
><DT
><A
HREF="r1024.html"
>fann_get_activation_function_hidden</A
>&nbsp;--&nbsp;Get the activation function used in the hidden layers.</DT
><DT
><A
HREF="r1040.html"
>fann_set_activation_function_hidden</A
>&nbsp;--&nbsp;Set the activation function for the hidden layers.</DT
><DT
><A
HREF="r1060.html"
>fann_get_activation_function_output</A
>&nbsp;--&nbsp;Get the activation function of the output layer.</DT
><DT
><A
HREF="r1076.html"
>fann_set_activation_function_output</A
>&nbsp;--&nbsp;Set the activation function for the output layer.</DT
><DT
><A
HREF="r1096.html"
>fann_get_activation_steepness_hidden</A
>&nbsp;--&nbsp;Retrieve the steepness of the activation function of the hidden layers.</DT
><DT
><A
HREF="r1112.html"
>fann_set_activation_steepness_hidden</A
>&nbsp;--&nbsp;Set the steepness of the activation function of the hidden layers.</DT
><DT
><A
HREF="r1133.html"
>fann_get_activation_steepness_output</A
>&nbsp;--&nbsp;Retrieve the steepness of the activation function of the output layer.</DT
><DT
><A
HREF="r1149.html"
>fann_set_activation_steepness_output</A
>&nbsp;--&nbsp;Set the steepness of the activation function of the output layer.</DT
><DT
><A
HREF="r1170.html"
>fann_set_train_error_function</A
>&nbsp;--&nbsp;Sets the training error function to be used.</DT
><DT
><A
HREF="r1191.html"
>fann_get_train_error_function</A
>&nbsp;--&nbsp;Gets the training error function to be used.</DT
><DT
><A
HREF="r1209.html"
>fann_get_quickprop_decay</A
>&nbsp;--&nbsp;Get the decay parameter used by the quickprop training.</DT
><DT
><A
HREF="r1224.html"
>fann_set_quickprop_decay</A
>&nbsp;--&nbsp;Set the decay parameter used by the quickprop training.</DT
><DT
><A
HREF="r1242.html"
>fann_get_quickprop_mu</A
>&nbsp;--&nbsp;Get the mu factor used by quickprop training.</DT
><DT
><A
HREF="r1257.html"
>fann_set_quickprop_mu</A
>&nbsp;--&nbsp;Set the mu factor used by quickprop training.</DT
><DT
><A
HREF="r1275.html"
>fann_get_rprop_increase_factor</A
>&nbsp;--&nbsp;Get the increase factor used by RPROP training.</DT
><DT
><A
HREF="r1290.html"
>fann_set_rprop_increase_factor</A
>&nbsp;--&nbsp;Get the increase factor used by RPROP training.</DT
><DT
><A
HREF="r1308.html"
>fann_get_rprop_decrease_factor</A
>&nbsp;--&nbsp;Get the decrease factor used by RPROP training.</DT
><DT
><A
HREF="r1323.html"
>fann_set_rprop_decrease_factor</A
>&nbsp;--&nbsp;Set the decrease factor used by RPROP training.</DT
><DT
><A
HREF="r1341.html"
>fann_get_rprop_delta_min</A
>&nbsp;--&nbsp;Get the minimum step-size used by RPROP training.</DT
><DT
><A
HREF="r1356.html"
>fann_set_rprop_delta_min</A
>&nbsp;--&nbsp;Set the minimum step-size used by RPROP training.</DT
><DT
><A
HREF="r1374.html"
>fann_get_rprop_delta_max</A
>&nbsp;--&nbsp;Get the maximum step-size used by RPROP training.</DT
><DT
><A
HREF="r1389.html"
>fann_set_rprop_delta_max</A
>&nbsp;--&nbsp;Set the maximum step-size used by RPROP training.</DT
><DT
><A
HREF="r1407.html"
>fann_get_num_input</A
>&nbsp;--&nbsp;Get the number of neurons in the input layer.</DT
><DT
><A
HREF="r1422.html"
>fann_get_num_output</A
>&nbsp;--&nbsp;Get number of neurons in the output layer.</DT
><DT
><A
HREF="r1437.html"
>fann_get_total_neurons</A
>&nbsp;--&nbsp;Get the total number of neurons in a network.</DT
><DT
><A
HREF="r1452.html"
>fann_get_total_connections</A
>&nbsp;--&nbsp;Get the total number of connections in a network.</DT
><DT
><A
HREF="r1467.html"
>fann_get_decimal_point</A
>&nbsp;--&nbsp;Get the position of the decimal point.</DT
><DT
><A
HREF="r1483.html"
>fann_get_multiplier</A
>&nbsp;--&nbsp;Get the multiplier.</DT
></DL
></DD
><DT
>5.6. <A
HREF="x1499.html"
>Error Handling</A
></DT
><DD
><DL
><DT
><A
HREF="r1501.html"
>fann_get_errno</A
>&nbsp;--&nbsp;Return the numerical representation of the last error.</DT
><DT
><A
HREF="r1516.html"
>fann_get_errstr</A
>&nbsp;--&nbsp;Return the last error.</DT
><DT
><A
HREF="r1533.html"
>fann_reset_errno</A
>&nbsp;--&nbsp;Reset the last error number.</DT
><DT
><A
HREF="r1547.html"
>fann_reset_errstr</A
>&nbsp;--&nbsp;Reset the last error string.</DT
><DT
><A
HREF="r1561.html"
>fann_set_error_log</A
>&nbsp;--&nbsp;Set the error log to a file descriptor.</DT
><DT
><A
HREF="r1580.html"
>fann_print_error</A
>&nbsp;--&nbsp;Print the last error to the error log.</DT
></DL
></DD
><DT
>5.7. <A
HREF="x1595.html"
>Data Structures</A
></DT
><DD
><DL
><DT
><A
HREF="r1597.html"
>struct fann</A
>&nbsp;--&nbsp;Describes a neural network.</DT
><DT
><A
HREF="r1837.html"
>struct fann_train_data</A
>&nbsp;--&nbsp;Describes a set of training data.</DT
><DT
><A
HREF="r1900.html"
>struct fann_error</A
>&nbsp;--&nbsp;Describes an error.</DT
><DT
><A
HREF="r1936.html"
>struct fann_neuron</A
>&nbsp;--&nbsp;Describes an individual neuron.</DT
><DT
><A
HREF="r1970.html"
>struct fann_layer</A
>&nbsp;--&nbsp;Describes a layer in a network.</DT
></DL
></DD
><DT
>5.8. <A
HREF="x1994.html"
>Constants</A
></DT
><DD
><DL
><DT
><A
HREF="r1996.html"
>Training algorithms</A
>&nbsp;--&nbsp;Constants representing training algorithms.</DT
><DT
><A
HREF="r2030.html"
>Activation Functions</A
>&nbsp;--&nbsp;Constants representing activation functions.</DT
><DT
><A
HREF="r2077.html"
>Training Error Functions</A
>&nbsp;--&nbsp;Constants representing errors functions.</DT
><DT
><A
HREF="r2099.html"
>Error Codes</A
>&nbsp;--&nbsp;Constants representing errors.</DT
></DL
></DD
><DT
>5.9. <A
HREF="x2169.html"
>Internal Functions</A
></DT
><DD
><DL
><DT
>5.9.1. <A
HREF="x2169.html#api.sec.create_destroy.internal"
>Creation And Destruction</A
></DT
><DT
>5.9.2. <A
HREF="x2169.html#api.sec.io.internal"
>Input/Output</A
></DT
><DT
>5.9.3. <A
HREF="x2169.html#api.sec.train_data.internal"
>Training Data</A
></DT
><DT
>5.9.4. <A
HREF="x2169.html#api.sec.io.errors"
>Error Handling</A
></DT
><DT
>5.9.5. <A
HREF="x2169.html#api.sec.options.internal"
>Options</A
></DT
></DL
></DD
><DT
>5.10. <A
HREF="x2399.html"
>Deprecated Functions</A
></DT
><DD
><DL
><DT
>5.10.1. <A
HREF="x2399.html#api.sec.error.deprecated"
>Mean Square Error</A
></DT
><DT
>5.10.2. <A
HREF="x2399.html#api.sec.steepness.deprecated"
>Get and set activation function steepness.</A
></DT
></DL
></DD
></DL
></DD
><DT
>6. <A
HREF="c2519.html"
>PHP Extension</A
></DT
><DD
><DL
><DT
>6.1. <A
HREF="c2519.html#php.install"
>Installation</A
></DT
><DD
><DL
><DT
>6.1.1. <A
HREF="c2519.html#php.install.pear"
>Using PEAR</A
></DT
><DT
>6.1.2. <A
HREF="c2519.html#php.install.ext"
>Compiling into PHP</A
></DT
></DL
></DD
><DT
>6.2. <A
HREF="x2553.html"
>API Reference</A
></DT
><DD
><DL
><DT
><A
HREF="r2555.html"
>fann_create</A
>&nbsp;--&nbsp;Creates an artificial neural network.</DT
><DT
><A
HREF="r2597.html"
>fann_train</A
>&nbsp;--&nbsp;Train an artificial neural network.</DT
><DT
><A
HREF="r2641.html"
>fann_save</A
>&nbsp;--&nbsp;Save an artificial neural network to a file.</DT
><DT
><A
HREF="r2664.html"
>fann_run</A
>&nbsp;--&nbsp;Run an artificial neural network.</DT
><DT
><A
HREF="r2688.html"
>fann_randomize_weights</A
>&nbsp;--&nbsp;Randomize the weights of the neurons in the network.</DT
><DT
><A
HREF="r2714.html"
>fann_init_weights</A
>&nbsp;--&nbsp;Initialize the weight of each connection.</DT
><DT
><A
HREF="r2740.html"
>fann_get_MSE</A
>&nbsp;--&nbsp;Get the mean squared error.</DT
><DT
><A
HREF="r2756.html"
>fann_get_num_input</A
>&nbsp;--&nbsp;Get the number of input neurons.</DT
><DT
><A
HREF="r2777.html"
>fann_get_num_output</A
>&nbsp;--&nbsp;Get the number of output neurons.</DT
><DT
><A
HREF="r2798.html"
>fann_get_total_neurons</A
>&nbsp;--&nbsp;Get the total number of neurons.</DT
><DT
><A
HREF="r2819.html"
>fann_get_total_connections</A
>&nbsp;--&nbsp;Get the total number of connections.</DT
><DT
><A
HREF="r2835.html"
>fann_get_learning_rate</A
>&nbsp;--&nbsp;Get the learning rate.</DT
><DT
><A
HREF="r2854.html"
>fann_get_activation_function_hidden</A
>&nbsp;--&nbsp;Get the activation function of the hidden neurons.</DT
><DT
><A
HREF="r2873.html"
>fann_get_activation_function_output</A
>&nbsp;--&nbsp;Get the activation function of the output neurons.</DT
><DT
><A
HREF="r2892.html"
>fann_get_activation_steepness_hidden</A
>&nbsp;--&nbsp;Get the steepness of the activation function for the hidden neurons.</DT
><DT
><A
HREF="r2911.html"
>fann_get_activation_steepness_output</A
>&nbsp;--&nbsp;Get the steepness of the activation function for the output neurons.</DT
><DT
><A
HREF="r2930.html"
>fann_set_learning_rate</A
>&nbsp;--&nbsp;Set the learning rate.</DT
><DT
><A
HREF="r2949.html"
>fann_set_activation_function_hidden</A
>&nbsp;--&nbsp;Set the activation function for the hidden neurons.</DT
><DT
><A
HREF="r2971.html"
>fann_set_activation_function_output</A
>&nbsp;--&nbsp;Set the activation function for the output neurons.</DT
><DT
><A
HREF="r2993.html"
>fann_set_activation_steepness_hidden</A
>&nbsp;--&nbsp;Set the steepness of the activation function for the hidden neurons.</DT
><DT
><A
HREF="r3015.html"
>fann_set_activation_steepness_output</A
>&nbsp;--&nbsp;Set the steepness of the activation function for the output neurons.</DT
></DL
></DD
></DL
></DD
><DT
>7. <A
HREF="c3037.html"
>Python Bindings</A
></DT
><DD
><DL
><DT
>7.1. <A
HREF="c3037.html#python.install"
>Python Install</A
></DT
></DL
></DD
><DT
><A
HREF="b3048.html"
>Bibliography</A
></DT
></DL
></DIV
><DIV
CLASS="LOT"
><DL
CLASS="LOT"
><DT
><B
>List of Examples</B
></DT
><DT
>1-1. <A
HREF="x68.html#example.simple_train"
>Simple training example</A
></DT
><DT
>1-2. <A
HREF="x68.html#example.simple_exec"
>Simple execution example</A
></DT
><DT
>2-1. <A
HREF="x161.html#example.train_on_file_internals"
>The internals of the <CODE
CLASS="function"
>fann_train_on_file</CODE
> function, without writing the status line.</A
></DT
><DT
>2-2. <A
HREF="x161.html#example.calc_mse"
>Test all of the data in a file and calculates the mean square error.</A
></DT
><DT
>3-1. <A
HREF="c189.html#example.train_fixed"
>An example of a program written to support training in both fixed point and floating point numbers</A
></DT
><DT
>3-2. <A
HREF="x203.html#example.exec_fixed"
>An example of a program written to support both fixed point and floating point numbers</A
></DT
><DT
>5-1. <A
HREF="r285.html#example.api.fann_create_array"
><CODE
CLASS="function"
>fann_create_array</CODE
> example</A
></DT
><DT
>6-1. <A
HREF="r2555.html#example.php.fann_create.scratch"
><CODE
CLASS="function"
>fann_create</CODE
> from scratch</A
></DT
><DT
>6-2. <A
HREF="r2555.html#example.php.fann_create.load"
><CODE
CLASS="function"
>fann_create</CODE
> loading from a file</A
></DT
><DT
>6-1. <A
HREF="r2597.html#example.php.fann_train"
><CODE
CLASS="function"
>fann_create</CODE
> from training data</A
></DT
><DT
>6-1. <A
HREF="r2664.html#example.php.fann_run"
><CODE
CLASS="function"
>fann_run</CODE
>Example</A
></DT
></DL
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="c13.html"
ACCESSKEY="N"
>Next</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
>&nbsp;</TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Introduction</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Publisher
Poland Poland
Software Developer's Journal (formerly Software 2.0) is a magazine for professional programmers and developers publishing news from the software world and practical articles presenting very interesting ready programming solutions. To read more

Comments and Discussions