Locked History Attachments

GettingStartedTips


This document describes the system requirements necessary for developing applications for Project Fénix. It also provides guidelines on how to setup an efficient development environment. This document should not be used as a reference for preparing a production environment. For that purpose you should refer to the FenixSetup page.

Operating System


The applications developed in Project Fénix are all Java Based, so they can run on any platform for which a Java Virtual Machine (JVM) is available. Our development team uses multiple OS's including Linux, Mac OS X and Windows. Usually operating systems and/or distributions are oriented towards a specific type of user. Note that the requirements for a normal desktop or media workstation differ from those requiring intensive video processing or data manipulation. The suggestions we make in this document are for development environments only. Be aware they may not be adequate for other purposes, in particular for production environments.

While the application may run in a 32 bit OS, it is not supported, and we strongly advise using a 64 bit OS.

Tweaking the File System


Different File Systems (FS's) have vary different behaviors, especially in regard to performance. In a development environment we prefer performance over data consistency/integrity. Note that even in the case of a total system loss, setting up a new environment should not be an issue. This is safe to assume as long as each developer regularly backs up his/her code that has not yet been committed or pushed to a central repository.

If it is an option, XFS is a good choice for your FS. For this FS we recommend the following options be used in your /etc/fstab.

  •     noatime,nodiratime,nobarrier,logbufs=4,osyncisdsync

EXT4 is another popular option among developers, and it seems to provide better performance results than any other FS.

Turn Off Unused/Unnecessary Services


If you're running a Linux distribution on a machine that won't be used by different users, then we also suggest disabling SELinux. To do this on Fedora edit your /etc/selinux/config file accordingly. Also remember to deactivate any unnecessary services.

Secure Sensitive Data


In case your development machine is a laptop, or a PC that is accessible to people outside your development team, then should make sure any directory containing sensitive data is encrypted, for example the directories where MySQL stores the database. Check out this tutorial with an example of how to create such a directory.

SSH Agent


Enough said!

Firewall


Always use a firewall! At most only open up your SSH port. Any other remote access you need to make to your machine you can achieve tunneling through your SSH port. Here's an example of how to login to a remote machine and locally access a running tomcat while still being able to launch any graphical app running on the remote server:

  •     ssh -A -X -L 8080:localhost:8080 <remoteUserName>@<remote.server.name>

To securely access a remote MySQL server, without needing to logon to the remote server, you might use a command such as:

  •     ssh -A -fN -L <localport>:localhost:3306 <remoteUserName>@<remote.server.name>

Software


The following table list the necessary software for developing applications and libraries for Project Fénix.

Some OS distributions are shipped with a few of the software listed above. Alternative JVM's and web containers will also work, but we find that Sun's version of the JVM Apaches version of the web container is best suited for this project. Feel free to experiment with other platforms. We appreciate any feedback regarding different experiences.

Obviously you can use any alternative to eclipse, however other than it being our preference, some of the documentation we provide may refer to it explicitly.

MySQL Optimization


When running a MySQL server on a development machine, some small tweaks can result in significant performance benefits. Always check the options in your /etc/my.cnf file. Remember that the values have to be tuned to your specific hardware and needs. Remember to stop a running MySQL server before editing this file. The following example works well for us:

  • [mysqld]
    default-storage-engine=INNODB
    table_open_cache = 256
    sort_buffer_size = 16M
    net_buffer_length = 4M
    log_bin_trust_function_creators=1
    innodb_additional_mem_pool_size=4194304
    innodb_buffer_pool_size=96468992
    innodb_flush_log_at_trx_commit=1
    innodb_log_buffer_size=4194304
    innodb_log_file_size=96468992
    sort_buffer_size=4194288
    max_allowed_packet=67107840

Adaptations might be needed depending on the operating system, for example under ubuntu settings for ports, socket locations and data directories had to be kept. The advice is to merge these settings with the ones your operating system came with, keeping the OS specific values and replacing the optimisations.

Afterwards, go to the /var/lib/mysql folder and remove any existing innodb files before starting the MySQL server. These files usually have the following names:

  • ibdata1
    ib_logfile0
    ib_logfile1

Environment Variables


The following variables need to be defined on your system. The values we provide here are only examples. Adjust the values accordingly. In most Linux based systems you'll do this in the .bashrc file found in your user home directory.

  • export SOFTWARE=$HOME/software
    export JAVA_HOME=$SOFTWARE/java
    export CATALINA_HOME=$SOFTWARE/tomcat
    
    export PATH=${JAVA_HOME}/bin:${PATH}
    export PATH=${PATH}:${CATALINA_HOME}/bin
    export PATH=${SOFTWARE}/eclipse:${PATH}
    
    export JAVA_OPTS="-Xms256m -Xmx2048m"
    export MAVEN_OPTS="$JAVA_OPTS -Dmaven.compiler.useIncrementalCompilation=false"
    export CATALINA_OPTS="$JAVA_OPTS -Dorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false -Djava.awt.headless=true"

You may want to adjust the Xmx option to increase the heap size.

For faster startup times for short running JVMs (such as Maven compilation of small projects), you may want to use the option -noverify.

Eclipse Configuration


Usually eclipse overrides the environment variables with its own configuration file eclipse.ini. Edit this file and adjust the following properties under the -vmargs option:

  • -vmargs
    -Xms128m
    -Xmx1g

Also don't forget to install any Eclipse plugins that may be helpful for developing your applications and libraries (Keep in mind that the fewer you install, the more fluid it will be). We highly recommend the following plugins:

Finally, remember to install the code style format used in Project Fénix. Do this in eclipse under Window > Preferences > Java > Code Style > Formatter > Import using the Fénix Code Style configuration file.