Forum Home
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular

    [Dev] Packaging feathercoind and feathercoin-qt on Linux

    Technical Development
    linux feathercoin release
    6
    45
    40578
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • wrapper
      wrapper Moderators last edited by wrapper

      Tried to register the Feathercoin name on opensuse build service but it has been taken (and abandoned ) by aduffeck@suse.de

      Gonna contact him to get the name.

      1 Reply Last reply Reply Quote 0
      • wrapper
        wrapper Moderators last edited by wrapper

        Building Feathercoind

        0.8.7.3 - buildunit.txt

        sudo apt-get install libboost1.37-dev fails

        In Kubuntu 15.10 this is now libboost1.58-dev

        warning during compile :

        main.cpp: In function ‘bool ProcessBlock(CValidationState&, CNode*, CBlock*, CDiskBlockPos*)’:
        main.cpp:2374:150: warning: format ‘%u’ expects argument of type ‘unsigned int’, but argument 2 has type ‘int64 {aka long long int}’ [-Wformat=]
        return error(“ProcessBlock() : block has a time stamp of %u before the last checkpoint of %u”, pblock->GetBlockTime(), pcheckpoint->nTime);

        feathercoind builds

        This is the code at line 2374 main.cpp

            if((pblock->GetBlockTime() - pcheckpoint->nTime) < 0) {
                if(pfrom) pfrom->Misbehaving(100);
                return error("ProcessBlock() : block has a time stamp of %u before the last checkpoint of %u", pblock->GetBlockTime(), pcheckpoint->nTime);
            }
        
            // Here was some code to verify block difficulty upon block and checkpoint
            // time difference which had never worked well in general and was broken
            // across the hard forks for Feathercoin in particular
        

        Note: ProcessBlock()

        There is a mismatch to how ProcessBlock is called in main and rpcmining.cpp - it looks like there is a bug in main.cpp should be &pblock …

        src/miner.cpp
        Showing the top match. Last indexed on 21 Mar.
        // Process this block the same as if we had received it from another node
        CValidationState state;
        if (!ProcessBlock(state, NULL, pblock))
        return error(“FeathercoinMiner : ProcessBlock, block not accepted”);
        }

        return true;
        }

        src/rpcmining.cpp
        Showing the top match. Last indexed on 21 Mar.
        throw JSONRPCError(RPC_DESERIALIZATION_ERROR, “Block decode failed”);
        }

        CValidationState state;
        bool fAccepted = ProcessBlock(state, NULL, &pblock);
        if (!fAccepted)

        1 Reply Last reply Reply Quote 0
        • wrapper
          wrapper Moderators last edited by wrapper

          Building feathercoin-qt 0.9.3.1 on Kubuntu 15.10

          ./autogen.sh
          ./configure
          make

          error : ./autogen.sh: 3: ./autogen.sh: autoreconf: not found

          apt-get install dh-autoreconf

          autoupdate

          ./configure --with-incompatible-bdb

          make

          fails with error :

          /usr/include/boost/variant/get.hpp:178:5: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’
          BOOST_STATIC_ASSERT_MSG(
          ^

          Found this post : scatha

          Re: Error Compiling Zetacoin Ubuntu
          January 29, 2016, 08:41:47 AMI have similar problems with various coins- the solution is usually I try a different version of boost-devel, make clean and recompile.


          Seems Boost 1.58 is the probable cause : – Found this post

          Considering that boost 1.59 seems fine with the code, I’d go for:

          if((${Boost_MAJOR_VERSION} EQUAL 1) AND (${Boost_MINOR_VERSION} EQUAL 58))
          message( STATUS “Defining BOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT”)
          add_definitions(“-DBOOST_VARIANT_USE_RELAXED_GET_BY_DEFAULT”)
          endif()

          just after the find_package( Boost … ) in the main CMakeLists.txt


          Looks like there was a PPA to get the latest Boost version : will continue tomorrow…

          https://codeyarns.com/2013/12/27/how-to-upgrade-the-boost-library-on-ubuntu/


          Found this :

          https://github.com/icook/zmark/commit/40ddb16a05c703c7cd9dce10f3aef09c0679e3d3

          Edited line 299 of rpcrawtransaction.cpp

          from
          const CScriptID& hash = boost::get<const CScriptID&>(address);

          to
          const CScriptID& hash = boost::get<CScriptID>(address);


          Continues further with build then error :

          shiftdialog.cpp:28:23: fatal error: QJsonObject: No such file or directory


          Installed libzxing libqrencode-dev qtbase5-dev libqt5opengl5-dev


          Now build fails with new error :

          CXX libbitcoinqt_a-shiftdialog.o
          shiftdialog.cpp:28:23: fatal error: QJsonObject: No such file or directory
          compilation terminated.


          Found similar problem compiling MInt

          There must be a newer version of that object files other than the one supplied with mint. The version table ends at GLIBCXX_3.4.19

          Code: Select all
          objdump -x /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.19|grep ‘GLIBCXX_3.4.1’

          Tried : Install libstdc+±5 (4.9 installed) build failed


          Found another similar Mint problem @Wellenreiter worked on :

          https://bitcointalk.org/index.php?topic=178286.msg13823798#msg13823798

          qtbas5-dev appears to be installed correctly…

          QJsonObject: The compiler misses the file qjasonobject.h
          As Mint is a kind of special flavor of Ubuntu I checked the Ubuntu packages.
          You need to install the package qtbase5-dev. That package contains qjsonobject.h as you can see here:
          http://packages.ubuntu.com/wily/amd64/qtbase5-dev/filelist

          QtPrintSupport/QPrinter: The compiler misses the file qprinter.h
          Again, the package qtbase5-dev contains the header files for QtPrintSupport.
          If you have installed qtbase5-dev, check for the directories containing qprinter.h and qjsonobject.h
          and specifiy these directories for the configure script. Use ‘configure --help’ for syntax.

          Searched for qjsonobject.h and qjsonobject.h not found


          Found This : https://bugreports.qt.io/browse/QTBUG-27096 :

          All instances of “#include <QPrinter>” or “#include <QPrintDialog>” that I had in my Qt4 project must now be replaced by “#include <Qt/qprinter.h>” or “#include <Qt/qprintdialog.h>”, which is not Qt standard.

          Edit :
          src/qt/utilitydialog.cpp

          Actual position of Qt printer headers in Ubuntu 15.10 :
          /usr/include/x86_64-linux-gnu/qt5/QtPrintSupport/qprinter.h
          usr/include/x86_64-linux-gnu/qt5/QtPrintSupport/qprintdialog.h

          Try - Change lines including utilitydialog.cpp headers include from :

          // Use QT5’s new modular classes
          #include <QtPrintSupport/QPrinter>
          #include <QtPrintSupport/QPrintDialog>
          #include <QtPrintSupport/QPrintPreviewDialog>

          Change lines in utilitydialog.cpp to :
          // Use QT5’s new modular classes
          #include <QtPrintSupport/qprinter.h>
          #include <QtPrintSupport/qprintdialog.h>
          #include <QtPrintSupport/qprintpreviewdialog.h>

          build error :

          CXX libbitcoinqt_a-notificator.o
          CXX libbitcoinqt_a-optionsdialog.o
          In file included from optionsdialog.cpp:17:0:

          CXX libbitcoinqt_a-shiftdialog.o
          shiftdialog.cpp:28:23: fatal error: QJsonObject: No such file or directory
          compilation terminated.


          from : https://bugreports.qt.io/browse/QTBUG-27096
          Did you add QT += printsupport in the pro file?
          It should work that way. Please let me know if you still have problems.

          Can’t find feathercoin.pro in 0.9.3.1 release source.


          Back to basics ran full instructions :

          qmake failed

          so ran full build with qmake -project :

          make clean
          ./autogen.sh
          autoupdate
          ./configure --with-incompatible-bdb
          qmake -project
          make


          Added QT += printsupport to feathercoin.pro file as suggested here :

          https://bugreports.qt.io/browse/QTBUG-27096

          Caused early crash of compile with error :

          make[5]: Entering directory ‘/home/tony/programs/Feathercoin/src/qt’
          CXX libbitcoinqt_a-shiftdialog.o
          shiftdialog.cpp:28:23: fatal error: QJsonObject: No such file or directory
          compilation terminated.
          Makefile:1509: recipe for target ‘libbitcoinqt_a-shiftdialog.o’ failed
          make[5]: *** [libbitcoinqt_a-shiftdialog.o] Error 1

          edited utiltydialog.cpp to try a different “full path” to Qt “problem” libraries.

          // Use QT5’s new modular classes
          #include <QtPrintSupport/QPrinter>
          #include <QtPrintSupport/QPrintDialog>
          #include <QtPrintSupport/QPrintPreviewDialog>
          #include <QtGui/QPainter>
          #include “walletmodel.h”

          // Use QT5’s new modular classes
          #include <QtPrintSupport/qprinter.h>
          #include <QtPrintSupport/qprintdialog.h>
          #include <QtPrintSupport/qprintpreviewdialog.h>
          #include <QtGui/QPainter>
          #include “walletmodel.h”

          Tried compile with modified headed and …/configure --with-incompatible-bdb --enable-dependency-tracking

          build failed.

          1 Reply Last reply Reply Quote 1
          • Wellenreiter
            Wellenreiter Moderators last edited by

            too much in one post.

            • qjasonobject:
              • is available with qt5 only. I’m not sure, which qt-package I installed to get it, if it is not the one I mentioned in the other thread
            • feathercoin.pro
              • doesn’t exist and is not needed for qt5 based compiles

            I will try to build for Ubuntu 15.10 and 6.04 with your modification in rpcrawtransaction.cpp. May be I also will try to change the dependency for boost lib to boost <= 1.59

            Feathercoin development donation address: 6p8u3wtct7uxRGmvWr2xvPxqRzbpbcd82A
            Openpgp key: 0x385C34E77F0D74D7 (at keyserver.ubuntu.com)/fingerprint: C7B4 E9EA 17E1 3D12 07AB 1FDB 385C 34E7 7F0D 74D7

            1 Reply Last reply Reply Quote 1
            • wrapper
              wrapper Moderators last edited by wrapper

              Don’t worry about the post yet, all is negative. Just documenting what I’ve tried, so Aciddude doesn’t duplicate effort…

              Still got a couple more things to grind through. I am starting to run out of ideas to try tho’.

              Trying to Install 1.59 is next on my list, I couldn’t easily find a PPA . (There is a bug in 1.58)

              That sounds like the easiest fix, now all know mods have been tried. If it worked, it would use the same code, so no special mods needed.

              1 Reply Last reply Reply Quote 0
              • wrapper
                wrapper Moderators last edited by wrapper

                Now we have the 0.8.7.3 build for Ubuntu is it more sensible to move to (testing) 0.11?

                and if 0.8.7.3 and 0.9.3.1 compile on 16.04?

                The problem does seem to be a glitch with libboost1.58-all-dev on Ubuntu 15.10 anyway. It seems to be a system dependancy.

                I’ve exhausted workarounds to try for the moment.

                1 Reply Last reply Reply Quote 0
                • Wellenreiter
                  Wellenreiter Moderators last edited by

                  I’d prefer to keep the 0.11.x versions on the testnet.
                  Nevertheless @Lizhi ist using 0.11.2 on the prodnet. I asked him to specify his needs for the testnet, e.g. client versions to test compability and switch over to protocol version 4, but he didn’t come back to me.

                  May be I can spare some time to try the build on ubuntu 16.04… but… it’s my wifes Birthday next Sunday, so probably I’ll have other duties :d

                  Feathercoin development donation address: 6p8u3wtct7uxRGmvWr2xvPxqRzbpbcd82A
                  Openpgp key: 0x385C34E77F0D74D7 (at keyserver.ubuntu.com)/fingerprint: C7B4 E9EA 17E1 3D12 07AB 1FDB 385C 34E7 7F0D 74D7

                  1 Reply Last reply Reply Quote 1
                  • U
                    UnklAdM Regular Member last edited by UnklAdM

                    I’ve got a dev box at home with 14.04 LTS installed on it. Would getting this working on that help at all? If so, what version should I try?

                    I managed to get my primary wallet running on Centos 7 but that was a totally different scenario.

                    Just trying to help out, the wife passed 6 weeks ago and I’m trying to keep busy. I’ve been pretty active with Syscoin lately so a lot of this is pretty fresh to me.

                    - UnklAdM

                    wrapper 1 Reply Last reply Reply Quote 1
                    • AcidD
                      AcidD Moderators last edited by

                      @UnklAdM - all I can say is I’m sorry man…

                      I’m attempting ubuntu 16.04 now and going with Feathercoin v0.9.3.1

                      • FTC Block Explorer + API @ https://fsight.chain.tips
                      • FTC Beer Money: 6x4LEQV88zRnBvZoH6ZNK6SeRxx4KiTyJs
                      • FTC bech32 address: fc1q4tclm3cv4v86ez6el76ewmharexfapxhek5a03
                      • BTC bech32 address: bc1qk8umuccapuafspk9e5szahvp0detafuzugv4ay

                      1 Reply Last reply Reply Quote 1
                      • wrapper
                        wrapper Moderators @UnklAdM last edited by wrapper

                        @UnklAdM said:

                        I’ve got a dev box at home with 14.04 LTS installed on it. Would getting this working on that help at all? If so, what version should I try?

                        - UnklAdM

                        There isn’t a problem with building on Ubuntu 14.04 or 15.04,

                        the problems are now finding why Feathercoin 0.9.3.1 doesn’t build for Ubuntu 15.10 (probably a bug in libboost1.58 Ubuntu dependency).

                        Looking into whether (the Centos problem) solution of upgrading to 1.59 can be done (compile from source) and run on standard installs of Ubuntu …

                        and testing 0.8.7.3 and 0.9.3.2 builds on Ubuntu 16.04

                        Source code :
                        https://github.com/FeatherCoin/Feathercoin

                        Build Instructions in /doc for wallet (feathercoin-qt) dependencies : multiwallet-qt.md
                        Build Instructions in /doc for daemon (feathercoind) dependencies : readme-qt.rst (only available in 0.8.3 currently)

                        Then (remove the --with-incompatible-bdb to retain 4.8 version dB)

                        make clean
                        ./autogen.sh
                        autoupdate
                        ./configure --with-incompatible-bdb
                        qmake -project
                        make

                        1 Reply Last reply Reply Quote 0
                        • AcidD
                          AcidD Moderators last edited by AcidD

                          So apparently it compiled…

                          Feathercoin-qt is 143.2MB

                          when I try to run it I get an error:
                          “Could not display Feathercoin-qt”

                          “There is no application install for “shared library” files. do you want to search for an application to open this file?”

                          =====
                          edit: WHOOOP!! IT WORKS
                          in terminal running sudo ./feathercoin-qt loaded it fine. it’s syncing the block chain now. Screen shots coming.

                          • FTC Block Explorer + API @ https://fsight.chain.tips
                          • FTC Beer Money: 6x4LEQV88zRnBvZoH6ZNK6SeRxx4KiTyJs
                          • FTC bech32 address: fc1q4tclm3cv4v86ez6el76ewmharexfapxhek5a03
                          • BTC bech32 address: bc1qk8umuccapuafspk9e5szahvp0detafuzugv4ay

                          wrapper Wellenreiter 2 Replies Last reply Reply Quote 1
                          • AcidD
                            AcidD Moderators last edited by

                            BOOM CITY !!

                            Image

                            • FTC Block Explorer + API @ https://fsight.chain.tips
                            • FTC Beer Money: 6x4LEQV88zRnBvZoH6ZNK6SeRxx4KiTyJs
                            • FTC bech32 address: fc1q4tclm3cv4v86ez6el76ewmharexfapxhek5a03
                            • BTC bech32 address: bc1qk8umuccapuafspk9e5szahvp0detafuzugv4ay

                            1 Reply Last reply Reply Quote 1
                            • wrapper
                              wrapper Moderators last edited by wrapper

                              We might as well concentrate on 16.04 builds (for Ununtu) so …
                              Since 15.10 is soon to end support, there isn’t a great necessity to have a 9.3.1 build, especially since we can now produce 0.8.3.1 with the fixed dependencies.

                              I’ll upgrade / set up virtual box to confirm the build works.

                              I’ll start to look at some pushing updates to the build docs, ie can’t build 15.10 and updated dependency condition.

                              1 Reply Last reply Reply Quote 0
                              • wrapper
                                wrapper Moderators @AcidD last edited by wrapper

                                @aciddude said:

                                So apparently it compiled…

                                Feathercoin-qt is 143.2MB

                                when I try to run it I get an error:
                                “Could not display Feathercoin-qt”

                                “There is no application install for “shared library” files. do you want to search for an application to open this file?”

                                =====
                                edit: WHOOOP!! IT WORKS
                                in terminal running sudo ./feathercoin-qt loaded it fine. it’s syncing the block chain now. Screen shots coming.

                                1st point - there is a compression method to reduce the size for release binaries

                                from : https://github.com/FeatherCoin/Feathercoin/blob/0.9.3.1/doc/build-unix.md

                                The release is built with GCC and then “strip bitcoind” to strip the debug symbols, which reduces the executable size by about 90%.

                                in Feathercoind case

                                cd src
                                strip feathercoind

                                2nd point - don’t run feathercoin-qt as sudo, otherwise the wallet will be put into root …

                                try running

                                cd ~/Feathercoin
                                ./feathercoin-qt

                                or you need to run make install and run feathercoin-qt directly

                                3rd point found this reference to previous work Wellenreiter did on 0.9.3.1 build.

                                http://forum.feathercoin.com/topic/8168/building-feathercoin/9

                                1 Reply Last reply Reply Quote 1
                                • wrapper
                                  wrapper Moderators last edited by wrapper

                                  Other potential areas to Investigate current Feathercoin build issues :

                                  FTC 0.9.3.1 - Building on Ubuntu 15.10

                                  Possible other issues with rpcrawtransaction.cpp
                                  Possible causes :
                                  Miss match between Qt4 and Qt5 build requirements
                                  rpcrawtransaction.h missing?
                                  Task :
                                  check sources re:
                                  https://trac.macports.org/changeset/136010

                                  Research why no rpcrawtransaction.h?

                                  15.10 build error zxing in snapwidget.cpp:71
                                  Possible causes :
                                  Causes :
                                  missing system path to zxing headers in snapwidget.cpp / snapwidget.h

                                  Task :
                                  Try building without QR codes

                                  Run make clean on a fresh clone of FTC messages

                                  checking for moc-qt5… no
                                  checking for moc5… no
                                  checking for moc… /usr/bin/moc
                                  checking for uic-qt5… no
                                  checking for uic5… no
                                  checking for uic… /usr/bin/uic
                                  checking for rcc-qt5… no
                                  checking for rcc5… no
                                  checking for rcc… /usr/bin/rcc
                                  checking for lrelease-qt5… no
                                  checking for lrelease5… no
                                  checking for lrelease… /usr/bin/lrelease
                                  checking for lupdate-qt5… no
                                  checking for lupdate5… no
                                  checking for lupdate… /usr/bin/lupdate
                                  checking whether to build Feathercoin Core GUI… yes (Qt5)

                                  Task :
                                  Check negative checks

                                  Results :
                                  Moc5 - included in qtbase5-dev-tools
                                  Note: qtbase5-private-tools is not installed try that result build still failed.

                                  Investigate Bitcoin Github issue as cause

                                  http://www.boost.org/users/history/version_1_58_0.html

                                  1 Reply Last reply Reply Quote 0
                                  • wrapper
                                    wrapper Moderators last edited by

                                    Just noting Commits on Aug 24, 2015
                                    @enlighter @Bushstar
                                    Update rpcrawtransaction.cpp

                                    A fix in 0.8.7 was not transferred/updated at head to 0.9.3

                                    Note: Have we a way of checking all “Feathercoinpatches” have been applied to the new version? Did we check any Litecoin only patches, that we “used” were brought into the Bitcoin Build?

                                    1 Reply Last reply Reply Quote 0
                                    • Wellenreiter
                                      Wellenreiter Moderators last edited by wrapper

                                      We need to maintain release notes, specifying what was implemented in what version. Also the goal must be to have one production release only, which requires a good release planning.

                                      @lizhi : can you add a release notes file, where you specify what you implemented, e.g ‘implemented ACP’ or ‘implemented bib 102’?
                                      I know, that this also is part of a commit comment, so does anybody know a way to create the release notes from the github commit comments?

                                      Feathercoin development donation address: 6p8u3wtct7uxRGmvWr2xvPxqRzbpbcd82A
                                      Openpgp key: 0x385C34E77F0D74D7 (at keyserver.ubuntu.com)/fingerprint: C7B4 E9EA 17E1 3D12 07AB 1FDB 385C 34E7 7F0D 74D7

                                      1 Reply Last reply Reply Quote 1
                                      • Wellenreiter
                                        Wellenreiter Moderators @AcidD last edited by

                                        @aciddude said:

                                        So apparently it compiled…

                                        Feathercoin-qt is 143.2MB

                                        when I try to run it I get an error:
                                        “Could not display Feathercoin-qt”

                                        “There is no application install for “shared library” files. do you want to search for an application to open this file?”

                                        =====
                                        edit: WHOOOP!! IT WORKS
                                        in terminal running sudo ./feathercoin-qt loaded it fine. it’s syncing the block chain now. Screen shots coming.

                                        I never had a problem to run feathercoin-qt as non-root user.
                                        Can you tell what you did to get it compiled?
                                        Did you modify the code?
                                        Did you install additional libraries?

                                        Feathercoin development donation address: 6p8u3wtct7uxRGmvWr2xvPxqRzbpbcd82A
                                        Openpgp key: 0x385C34E77F0D74D7 (at keyserver.ubuntu.com)/fingerprint: C7B4 E9EA 17E1 3D12 07AB 1FDB 385C 34E7 7F0D 74D7

                                        AcidD 1 Reply Last reply Reply Quote 1
                                        • Wellenreiter
                                          Wellenreiter Moderators last edited by

                                          @wrapper : we should include the strip command in the packaging process and the stripped code NEVER ahould be committed to github, othwise debugging could become a pain.
                                          Also I think that the 143mB binary is a result of static linking, qhwre all libraries are part of the binary. Dynamic linking should reduce the size also and has the advantage, that we don’t need to release a new version, if a library is patched

                                          Feathercoin development donation address: 6p8u3wtct7uxRGmvWr2xvPxqRzbpbcd82A
                                          Openpgp key: 0x385C34E77F0D74D7 (at keyserver.ubuntu.com)/fingerprint: C7B4 E9EA 17E1 3D12 07AB 1FDB 385C 34E7 7F0D 74D7

                                          1 Reply Last reply Reply Quote 0
                                          • wrapper
                                            wrapper Moderators last edited by wrapper

                                            @Lizhi @Ghostlander @Bushstar

                                            Development procedure

                                            @Wellenreiter Thanks for the update, it’s a complex situation and keeping close to Bitcoin development, at least takes advantage of all their testers.

                                            Although, slower than it could be with dedicated paid staff, the open source “chaos” does seem to work. As you say, so far we have tried to make everything backwardly compatible, where that was not possible, members have moved to the new forks pretty well.

                                            The main thing FTC seems deficient at is a guide or methodology for “upgrading” a Bitcoin fork to include all FTC specific enhancements / settings. Particularly as of the extra complexity of moving from Litecoin fork directly to Bitcoin core.

                                            I could be wrong and Bush, Wellenreiter or Lizhi have a way of doing it but it would assist in finding members who could help, if we get everything documented now.

                                            As far as testing 0.9.3.1 and above, the main thing we must do is test all FTC specific features have been included a work. Even if that is a simple as being “double checked” by someone …

                                            That is the main effort should be in maintaining the fork difference.

                                            We could have a Development thread called FTC additional packages, with each as a post, updated with “install in version” and checked by …

                                            created by the first checker. From a list of commits to 0.6 to 0.8 Feathercoin Github?

                                            List of FTC Pages and system settings / additional files

                                            ACP
                                            Name changes : Bitcoind changed to Feathercoind
                                            images and icons
                                            splash screen
                                            eHRC
                                            neoscrypt
                                            Transaction fees
                                            Block times
                                            checkpoints

                                            etc

                                            Release procedure

                                            To keep things simple and to allow others to help get involved, we also need an updated release procedure post.

                                            It again would be a simple check list, from the git hub readme, so a checker can be allocated and sign of the release steps.

                                            We could of course just point the forum to slight update to the Feathercoin readme, but having it on the forum would help members get involved, reduce errors and spread the development load from staff.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post