If not stated otherwise, all changes are done by mme.

Aug 06 1995:
    
    -   changed nnet.*, layer.*, neuron.*:
        In each file added a method 'Init(...)', where all important actions
        are done. The constructors are only for setting some default values
        as object parameters and something like that. Was needed, because
        when inheriting new paradigms, lots of things will change in the
        constructor, but the parent classes constructor is called each time,
        so all paradigm-dependend things have to be done in a separate 
        method: Init(...).

    -   began n_hopfield.*

Aug 10 1995

    -   developed nnet_fast.*
        This is a faster working version of the original Backpropagation 
        Network, directly inherited from nnet.*.
        Benefit of this version is, that the Patterns from the pattern file
        and the LearnPatterns from the learnpattern file are read into the
        memory when these files are opened. So the Net-method Load_Pattern()
        now works just on two arrays in memory, rather than with two files.
        Although through caching techniques of Linux the time for reading in
        the files directly is not that long, I had on my DX4/100 system an
        effort with a to 55.7 % reduced learning time for the handwriting
        problem. Testvalues are:
               time with old version, but shut up error file (see below):
                            17 minutes 47 seconds
               time with new version, and shut up error file (see below):
                            09 minutes 54 seconds
        for 10000 steps with (8,8,8) Neurons without BIAS, 
        pattern files handwrite-lower.* each test.

    -   changed nnet_fast.* nnet.*
        In each file shut up the error file handling. 
        In nnet.cc only erased error file writing, but opening and closing 
        still included.
        In nnet_fast.cc no error file handling anymore. No opening, no writing
        and so no closing. In comments within the file stated, that this is
        a intermediate change, there will be other solutions when Networking
        things are discussed.


Aug 17 1995:

    -   changed C_NNet massively.
        affected files: nnet.*, partly nnet_fast.* and nn_autoass.*[proto]

        It was needed to create a new method 
               LAYERTYPE *Take_Layer(int i_Num);
        with the benefit to have an easy to use method to get a Layer's
        adress. The problem was, that for the modelled Autoassociator Net-
        work only one Layer is present, while in the former Backpropagation
        Network a whole Layerstore was present. So Take_Layer(...) hands
        a Layer-Pointer back and can be applied to each derived class
        respectively. (In this sp. case the method just returns the pointer
        which is stored as a parameter to the Network, while in C_NNet and
        C_FNNet it works on a LayerStore.)
        The value of LAYERTYPE is determined by means of a C-MACRO and can
        be set dependend on the type of Layer used when creating the new
        class.
        The method is private and therefore has to be applied in each 
        derivation newly, because otherwise the compiler will complain about
        the undeclared function.

        Changed constructor of C_NNet, so that in case of invalid parameters
        an error message is written to stderr and exit(255) is called.
 
        Changed C_NNet/C_FNNet::recall(...) massively
        A new method Recall(...) replaces recall(...) and gets the same
        parameters. The method Open_OUT(...) assembles the filename itself.
        The method recall() contains now code for exactly one recall.
        The method Recall(...) calls now: Open_OUT(...), Load_Pattern(...)
        and then recall(), followed by Write_OUT(...).
        The method Action(...) got changed, so that it now calls Recall(...)
        instead of the former recall(...).

        Changed C_NNet/C_FNNet::learn(...) massively
        A new method Learn(...) replaces learn(...) and gets the same para-
        meters. The methods Open_LRN(...) and Open_ERR(...) assemble the
        filenames themselves. The method learn() now contains code for
        exactly one learn-step from last to first layer. The method Learn(...)
        calls Open_LRN(...), Open_ERR(...), Randomize_Patterns(...),
        Load_Pattern(...), recall(), Detect_Error(...) and learn(). The
        method Action(...) got changed, so that it now calls Learn(...) 
        instead of the former learn(...).

        Prepared my versions of Autoassociator Paradigm ready for testing.
        More about this later on, when first tests have been done.

Sep 10    1995:

    -   changed neuron.cc
        Exchanged some german words (Zaehler, Nenner) with their english
        counterparts (numerator, denominator). Additionally - changed some
        if-conditions to gain better readability.
        (Thanks rsc@pub.th-zwickau.de (Ralf Schmidt) for mentioning this
         'errors'.)

    -   changed nnet.cc
        some hacks for allowing full names for GWI, OUT and ERR files.
        not yet tested.


Oct 22 1995

    -   developed arrman-t.h, an listman-t.h-like template class that uses
        arrays instead of lists.
        Did some measurement to prove the effort; this is it:
        (On my AMD 486 DX4/100) needed with nnet_fast 6:58 minutes to learn
        10000 steps handwrite-lower. This is just 70.4 % of time needed
        using lists. (Not that big effort, but an effort!)


    -   changed backnet.h for several improvements:

           - included some #include <...> - statements, taken from some
             other header file to increase the generosity of backnet.h
           - included some #include <...> - statements for use with other
             compilers, say BORLAND C++. Especially elseif'd time.h and
             dos.h against sys/time.h and unistd.h. Furthermore defined
             is_open to is_open() in case a BORLAND C++ Compiler sees it.
             *** CHECK THE __BORLANDC__ MACRO ASAP! ***

           - included a define for use of _WITH_ARRAY_ - switch.

    -   improved several header- and source code files: excluded some 
        '#include <...>' - statements to backnet.h for more generosity (s.a.)
        Thus the following header files in include got changed:

           neuron.h
           layer.h
           nnet.h
           nnet_fast.h

        and the following source files in src got changed:

           neuron.cc
           layer.cc
           nnet.cc.

    -   changed neuron.h/.cc for including function 
             unsigned int getseed()

        This is used (as the name implies) for getting a seed value for the
        random'ed weights. Naturally we take the smallest delivered part of
        the kernel time. For UNIX (BSD) this is the microsecond, for DOS
        it's the millisecond (yet another reason to take UNIX ;-]). The
        other difference is the used function for getting the time. This is
        gettimeofday(...) for BSD and gettime(...) for DOS. Thus a generic
        getseed() function was needed. On compile time a switch decides, 
        whether to take the DOS-like functions or the UNIX-likes.
        *** CHECK THIS SWITCH! ***

    -   mme comment: This was really a lot for today; most thanks go to
        Heiko Schellhorn (hsc@pub.th-zwickau.de), who maintains the DOS-line
        and suggested the BORLAND-compatibility-changes.

Nov 05 1995

    -   As now development should become very fast, a new development-
        release struct seems to be needed. From now on there will be 
        version numbers (currently 0), major version numbers (currently 1)
        and minor version numbers (5 for this release). I have the intent
        that this clarifies the problems somebody might have with the
        archives.

    -   A more minor change is the splitting of the src-directory. We have
        now 2 different source paths for the two different development
        directions we are going. Maybe there is some possibility to unite
        the two ways some day, but until we see anything of this there may
        be some (development-) releases.
        For the next time, development for a single-process-model goes into
        src/single, development for the client-server-model goes into
        src/cliserv. There is an independent Makefile in the src/cliserv 
        path, that means that this Makefile is not called from the global
        Makefile at all. This is useful since there's no effective working
        with the possibly created binaries from src/cliserv-sources. All the
        other things will still work, I hope ;-).

    -   Additionally I did some work on the client-server-part, since this
        is now becoming more clear. I created some back_connect_1.cc from some
        functions in neuron_serv_tcp_3.cc which evolved to  
        neuron_serv_tcp_4.cc. The function headers of this went into 
        netbacknet.h.
        Then I developed neuron_serv_tcp_4.cc to work as a command line
        configurative binary. You have to specify service name (which is 
        then looked up in /etc/services, not yet tested) or port number, 
        where the neuron server should recide.
        For me, at loopback, this worked, lets see for other places. 
        Unhappily there's still no test_cli_tcp_4.cc, instead I had to 
        change test_cli_tcp_3.cc a little to work correctly (there are not
        longer the macros SERV_HOST_ADR and SERV_TCP_PORT in netbacknet.h).

Nov 12 1995

    -   I changed arrman-t.h for different reasons. Especially two methods
        (Get_List and Set_List) are included, which will return or receive
        whole arrays to copy to existing ones. This is especially useful for
        the Array Server, which will be accessed fewer times when using 
        this method for getting/setting whole arrays instead of singular 
        elements.
        Furthermore some error management corrections have been done to
        arrman-t.h, esp. check for wrong parameters (0-value).
        I really suggest using C_Array instead of C_List, not only because
        of higher speed, but because of a supposedly cleaner status.

    -   More for testing aims and getting experience I created a document
        doc/arrman-t.sgml with linuxdoc-sgml 1.4 which can be formatted into
        many formats as PS, DVI, LaTeX, GNU-info, txt, html, ...
        It can serve as documentation to C_Array.

    -   I created src/cliserv/test_cli_tcp_4.cc which corresponds with 
        src/cliserv/neuron_serv_tcp_4.cc. 

    -   neuron_serv_tcp_4.cc got changed: recv_req(int) is not longer 
        implemented there, but in back_connect_1.cc -- therefore this got
        changed, too.

Nov 15 1995 
    
    -     rsc: included his autoassociator-paradigm-sources for testing.
    -     mme: Edited Makefiles for better interchangeability between Linux
             and other OSTYPEs. 

Nov 17 1995

    -    rsc: Included own testfile in prog. Changed some Makefiles.

Nov 19 1995   

    -     rsc: deleted the Bias-Parameter in constructor of C_NNet_aa
          in the call of the constructors of C_FNNet, 
           C_Layer_aa and a NO_BIAS is NO_BIAS is given
          concerning this the question for BIAS in rsc_autotest
          is deleted.

Nov 24 1995
    
    -    rsc: deleted some i_Bias-stuff in rsc_autotest.cc, now it should 
             compile without errors
             deleted and inlude some comments in the source-files


Dec 03 1995

    -    rsc: changed some things in the Autoassociator-sourcecode,
             it doesn't write correctly in the gwi- and in the out-file
             there seems also to be some problems with the lists.
             I haven't it fixed already, I hope, I get it in the next 
             times.

Dec 04 1995 
    
    -    mme: changed some DBG-Macros in nnet_fast.cc for better 
             readability of the output result.

Dec 09 1995
    
    -    mme: changed implementation of Save() in C_NNet and C_FNNet for
             sake of better inheriting. Save() is now the class-independent
             part of the whole weightsaving routine and should be called
             unchanged from all inherited classes.
             The class-dependend method, where especially the type of 
             layer to call is specified, is now virtual int save() and 
             shall be replaced from each inheriting class.
             It is called by Save(). Save() itself is virtual, too, but this
             property should only sparsly be used.

Dec 10 1995    

    -     rsc: found some errors, now it's the question whether
               the Input-values of the neurons are correctly read
               from the MST-File and correctly written to 
               S_Layer->i_Input_List


Dec 10 1995
    
    -    mme: Implemented prototype of ArrayManager. Though array handling
             is not implemented yet, it shows good behaviour for different
             usage levels. Got to be improved, appearance in 0.2 is not 
             unrealistic since the whole autoassociator testing is not as
             fast as planned.

Dec 17 1995

    -   rsc: deleted C_Lay_aaStor, because we have only one layer
             Recall is now the inherited method of the superclass
             recal changed
             detect_error changed
            
    
Dec 19 1995

    -   rsc: changed Detect_Error in nnet_aa.cc
              now the average is used


Dec 22 1995 
    
    -    mme: changed implementation of arrman-t.h, which is now a template
             not of a type (X) but of a size (sz), which is the size of
             each array field. Using that better array-performance is
             possible.

Jan 02 1996

    -    mme: tested array-server-prototype on (real) remote connection
             instead of 'loopback', works. still todo is  a buffered send&
             receive that fixes some deadlocks.

          
Jan 03 1996 

    -   rsc: changed some things in nnet_aa.cc and rsc_autotest.cc


Jan 12 1996

	-   rsc: changed line 487 in nnet_aa.cc :
			 MaxiDiff=-1 now.


Jan 16 1996

    -   mme: improved array-serving just a bit by adding timeouts on
             the low level communication functions. 
             Did some minor corrections in the arrman-t.h and listman-t.h.
             Sometimes these are replaced by the new array-manager class,
             even for the single-process-modules.


Jan 28 1996

	-   rsc: wrote a documentation
			 deleted an error in neuron_aa.cc (S_NNet wasn't overgiven there,
			 	but new-created :-( )
			 changed the modify_weight-function in neuron_aa.cc (If the 
				highest weight
				is greater than 1e+100, then this weight and all other weights
			 	of the neuron are divided through the weight-count, 
				this was needed,
				because some weights became to great, resulting in a floating-
				point-error)


Jan 28 1996 

    -  mme: Made everything ready for distribution as backnet-0.2.

---------------------------------------------------------------------------

