development
F2F Computing Development Documentation
This is about the development efforts in the new version of F2F, using a c-core and providing backends to various langauages.
Project organization
F2F has a modular architecture which allows to port it to the platforms with limited set of resources.
The Core Module
The main F2F module responsible for peer management in F2F computing groups, inter-peer communication and running the application code. The core has a set of interfaces accessible to the dependent modules, which are registered to the Core at boot-time. Core needs at least one Computing- and one Communication module to be registered in order to run the distributed applications. In order to register new peers, to create computing groups, to start, control and monitor the running distributed applications the core (and attached computing and communication modules) need to be wrapped by UI-front end. The front-end is responsible for wrapping the Core interfaces with GUI elements, console commands or configuration scripts.
Communication Modules
The distributed computing applications need a fast communication between the running instances, hence the direct inter-peer connections are more preferable then a relayed one. However in case when direct connection is impossible the relayed one can be used. The communication is then relayed over existing peer or a set of peers. There is number of communication protocols (TCP, UDP, SCTP, Bluetooth OBEX ... ) and instant messaging protocols (XMPP, MSN, ICQ ... ), hence the need for multiple communication modules.
Computing Modules
The distributed applications can be written in different languages, the High Performance Computing applications usually require low level languages like C/C++ and Fortran. At the same time prototyping the distributed applications requires higher level languages like Python. The support of mainstream languages (Java,C#) attract more developers to write the distributed applications for Friend-to-Friend platform.
Development Requirements
Development Utilites (SDK, runtime and development dependencies): On Windows: As F2F was originally developed on Linux, the GNU development utilities are required on Windows. We use MinGW and MSysplatforms to emulate GNU utilities on windows. Use automatic installer to install the MinGW on windows. **** On All Platforms To build the F2F computing on various platforms we developed a python based build system which includes Python scripts, SConstructor scripts and SWIG generator interface definitions. In order to run the build scripts the following tools have to be installed:
Python 2.6.6 (python and python-dev packages on Linux, Python 2.6.6 installer on Windows)
SCons >= 2.0.0 (scons package on Linux, SCons installer on Windows)
SWIG >=1.3.0 (swig package on Linux, SWIG archive on Windows)
NB! On Linux all the utilities are by default visible in system path, on Windows you have check if the corresponding utilities (python, scons, swig) are in system path. If these are not there you have to add them manually, otherwise if some of them is missing the build scripts will be not runnable or failing in the middle of build process. The most of the Modules of F2F (Core, LLVM, Communication) are written in pure C or C++. In order to build these Modules the GNU C/C++ compiler has to be installed (build-essential package on Linux, MinGW environment on Windows). **** Some of the F2F modules (like Python Computing Engine, Python Console Front-End and Java Console Front-End) are platform independent and require only the corresponding SDK to be installed in the system.
Java JDK 1.6.0 for Java Based Modules (openjdk-6-jdk and openjdk-6-jre on Linux, Oracle Java jdk1.6.0 on Windows)
Python 2.6.6 (including development headers) for Python Based Modules (python and python-dev packages on Linux, Python 2.6.6 installer on Windows)
On Linux: Because the original development environment for F2F is Linux, some modules are strictly Linux oriented (LLVM Computing Engine, Pidgin-Plugin Front-End). In order to build these packages the following development packages need to be installed on Linux:
pidgin-dev (and all its dependencies) - Required by Pidgin-Plugin Frond-End
llvm-dev (2.6 or 2.7 on Debian 6.0, 2.8 on Ubuntu 10.10)
The support of the other platforms by these modules depends on the development resources, which are currently limited.
Eclipse IDE
The Friend-to-Friend Computing development evolves multiple languages including C/C++, Java and Python. Ofter there is a need to quickly switch between the languages keeping all the highlighting and autocomplete features of the IDE. Eclipse is the one which supports this feature. In order to develop the Friend-to-Friend Computing in Eclipse the following additional plugins should be installed:
In addition you can install egit to integrate git version control system into eclipse, however git original utilities gitk and git-gui are far more advanced.
Git - Fast Version Control System
We keep out code in the most advanced opensource distributed version control system (Git), which was developed by the authors of Linux Kernel.
In windows you just use the installer package from the Git downloads page.
In Linux you should install git-all package from the repository.
If you are new to the Git, please consider the following manual we provided for our students.
Openfire XMPP Server
Friend-to-Friend Communication modules are heavily dependent on Instant Messaging. The instant communication is used to bootstrap the Peer-to-Peer communication, hence the instant messaging modules should be tested well. For offline-testing the XMPP based Instant Messaging we used Openfire XMPP Server. This one is Java based and has nice Web based management interface. You can use this one to run the same offline-tests we do by following next steps:
Install Openfire locally
Disable offline message storage
Create accounts f2f01,f2f02,f2f03 and f2f04 with password f2f
Using Pidgin-Plugin run 4 instances locally (or in your local network) using 4 accounts you just created.
Associate the accounts (all-to-all and select the Initiator or at least all-to-one which will be Initiator)
On the Initiator instance create F2F-Chat and invite remaining Instaces
Submit the Distributed Application for testing
Using Python Console Front-End, follow steps (1-2) form previous list
The testing scripts are held in /adapters/im/headless/src/tests
Modify f2fSlave.py, f2fSlave2.py, f2fSlave3.py, change the server name, login name and password accordingly to the accounts you just created
Modify f2fMaster.py in the same way in addition specify 3-instances you will use in computing group (use the accounts you created)
In master script specify the distributed application you wish to run
Run slave instances using bash script (sh run.sh f2fSlave.py)
Run master instance using bash script (sh run.sh f2fMaster.py)
To terminate instance simply hit any key during runtime
Example applications can be found in the source folders of each computing modules
Quick Development Setup in Linux
In Debian/Ubuntu you just install following packages:
sudo aptitude install git-all build-essential llvm-dev python-dev pidgin-dev openjdk-6-jdk openjdk-6-jre scons swig
If you want to have Eclipse IDE:
sudo aptitude install eclipse eclipse-jdt eclipse-cdt eclipse-pydev
Quick Development Setup in Windows
Joke;) There is no quick way in Windows, you need to manually setup all these tools in addition to MinGW environment.
Getting the code
We assume you followed the previous instructions and installed Git version management system. Our main repository is accessible read-only at http://git.f2f.ulno.net, alternatively through Gitweb interface. To clone the repository use the following Git command:
git clone http://git.f2f.ulno.net f2f-computing
As the F2F project is getting larger and we have more developers evolved, the repository now contains the separate branches for each of them.
The branches:
master - the default branch with F2F stable build, this one is automatically checked by git clone command
headless-java-dev - The Java Console Front-End Development (owned by Vladimir Shkarupelov)
core-dev - The Core Componetnt Development (owned by Artjom Lind)
f2f-dev - The F2F Build Scripts Development, where different F2F modules are put together and tested on different platforms
Read/Write access:
You need to be a member of the development team in order to have direct write access to the main repository. If you want to join please contact us and send your public ssh-key. If you just want to propose some changes, please send us a link to your published repository or send your changes by mail in git archive.
Building the code
We assume you did set up Python, SCons and SWIG accordingly to our manual. For building navigate to directory where you checked out the Friend-to-Friend Computing
scons -f sconsbuild.py debug=1
For cleaning:
scons -f sconsbuild.py -c
Build Scripts and Project Directory structure
//TODO: Switching between required modules //TODO:Adding new module
Automating Build/Debug in Eclipse
//TODO: Outdated, currently this holds only for F2F Mobile build
(old-mobile tag in repository) For automating the build in eclipse, put
this line in the External Builder Build command
field (select in
project - properties - C/C++ Build - Builder settings - External
Builder). make sure to unselect Use default build command
and
Generate Makefiles automatically
. As Build directory
select
${workspace_loc:/F2FCore/build
}. In the Behaviour
tab make sure
the field next to Build
is empty and the field next to Clean
contains -c
. Now edit in F2FHeadless/src/tests
f2fMaster.py
and f2fClient.py
so that the parameters reflect the servers-settings
you use. For testing, run first f2fClient.py
and then parallel
f2fMaster.py
. For convenience and a good debugging experience,
create the following four run targets in eclipse:
-
python
-
F2FHeadless master
Project: F2FHeadless
Main Module: ${workspace_loc:F2FHeadless/src/tests/f2fMaster.py}
Arguments: Working directory: Other: ${workspace_loc:F2FHeadless/src/tests}
-
F2FHeadless slave
Project: F2FHeadless
Main Module: ${workspace_loc:F2FHeadless/src/tests/f2fSlave.py}
Arguments: Working directory: Other: ${workspace_loc:F2FHeadless/src/tests}
-
-
c/c++
-
F2Fheadless c-master
Project: F2FCore
C/C++ Application: /usr/bin/python (or the windows executable)
Arguments: Program arguments: f2fMaster.py
Arguments: Working directory: ${workspace_loc:F2FHeadless/src/tests}
-
F2Fheadless c-slave
Project: F2FCore
C/C++ Application: /usr/bin/python (or the windows executable)
Arguments: Program arguments: f2fSlave.py
Arguments: Working directory: ${workspace_loc:F2FHeadless/src/tests}
-
Then you can debug the f2f in c and in python. Have fun calculating Pi the hard way