= Developer Guidelines = [[TOC]] == Getting Started == * [wiki:DeveloperGuidelines/Basics The Basics] * [wiki:Domain Understanding the Domain] * [wiki:DeveloperGuidelines/Tutorial Tutorials] == Development Enviroment == * [wiki:InstallationGuidelines Install a Development Enviroment] * [wiki:DeveloperGuidelines/Git Git] Version Control * [wiki:DeveloperGuidelines/Eclipse Eclipse] debugger == Development Process == We define requirements: * [wiki:Projects] * '''[wiki:BluePrint BluePrints]''' Designs should focus on Usability: * [wiki:DeveloperGuidelines/Usability Usability] Designs should fit within our overall architecture: * [wiki:DeveloperGuidelines/Architecture Architecture] We write Tests: * [wiki:DeveloperGuidelines/Testing Testing] We keep code conventions to maximise readability & consistency: * [wiki:DeveloperGuidelines/CodeConventions Code Conventions] Code should be documented: * [wiki:DeveloperGuidelines/Documentation Documentation] Code should be able to perform well at scale: * [wiki:DeveloperGuidelines/Optimisation Optimisation] Debugging Tips: * [wiki:DeveloperGuidelines/FAQ FAQ] * [wiki:DeveloperGuidelines/Tips#Pythondebugging Python] * [wiki:DeveloperGuidelines/Tips#CSSJavascriptdebugging JavaScript] == Framework == * [wiki:DeveloperGuidelinesS3Framework Sahana Eden Framework: S3] * '''[wiki:S3 S3 API Guide]''' * [wiki:S3/DataTable DataTables] * [wiki:DeveloperGuidelines/DatabaseSynchronization Database Synchronization] * [wiki:DeveloperGuidelines/GIS GIS] - Mapping * [wiki:DeveloperGuidelines/Internationalisation Internationalization] * [wiki:DeveloperGuidelines/Libraries Libraries] * [wiki:DeveloperGuidelines/Menus Menus] * [wiki:DeveloperGuidelines/Messaging Messaging] * [wiki:DeveloperGuidelines/Popup Popups] * [wiki:DeveloperGuidelines/PrePopulate PrePopulate]- initialising the database with lookup lists &/or demo data * [wiki:DeveloperGuidelines/SVG SVG] - One way of producing Charts * [wiki:DeveloperGuidelines/Templates Templates] for instance configuration * [wiki:DeveloperGuidelines/Templates/CustomPages Custom Pages] * [wiki:DeveloperGuidelines/DeploymentSettings Deployment Settings] * [wiki:DeveloperGuidelines/Themes Themes] * [wiki:DeveloperGuidelines/SaveSearchAndSubscription Save Search and Subscription] * [wiki:DeveloperGuidelines/Scheduler Scheduler] - push long-running tasks async as well as have tasks run to a schedule (e.g. recurring daily) * [wiki:DeveloperGuidelines/Search Search] * [wiki:DeveloperGuidelines/UserManagement User Management] * [wiki:DeveloperGuidelines/WebServices Web Services] == Modules == * [wiki:DeveloperGuidelines/Logistics] * [wiki:DeveloperGuidelines/Organisations] * [wiki:DeveloperGuidelinesSurvey] * [wiki:DeveloperGuidelines/WebSetup] ==== Deployment ==== Browsers default to only downloading 2 files from the same origin at a time, so many files is very slow on high latency links. We therefore consolidate into fewer, larger files when running in Production mode. Although, note that iPhone 3.x cannot cache files larger than 15kb and in iPhone 4 the limit is 25kb. And this is the size before gzipping. Since GIS is a specialised app which requires many files, it's JS is loaded separately when required. The build script is {{{static/scripts/tools/build.sahana.py}}} It needs to be run as a web2py script: {{{ python web2py.py -S eden -M -R applications/eden/static/scripts/tools/build.sahana.py }}} There is also a convenience wrapper for Windows to run this: {{{static/scripts/tools/build.cmd}}} You must have an internet connection to run the build script unless you have a local version of the Compiler. Our build process is based on the one used by !OpenLayers * http://trac.openlayers.org/wiki/Profiles This uses Google's Closure compiler to compress the JS. This is done using their web service, however for !OpenLayers itself we need to download the jar file & place in the tools folder since this is over 1Mb: * http://closure-compiler.googlecode.com/files/compiler-latest.zip !ToDo: Investigate using other options instead: * http://developer.yahoo.com/yui/compressor/ * http://www.crowproductions.de/repos/main/public/packer/jspacker.py !ToDo: Download/execute scripts asynchronously: * Projects/Advanced/Optimisation === Mobile === * [wiki:DeveloperGuidelines/Mobile/Android Android] - Android clients === XSLT === * XPath: http://www.w3schools.com/xpath/default.asp * XSLT: http://www.w3schools.com/xsl/default.asp * [http://codespeak.net/lxml/tutorial.html lxml Tutorial] * [wiki:XsltTemplates XSLT] - Stylesheets for XML & JSON !Import/Export == Other Resources == * [wiki:DeveloperGuidelines/Tips Tips] - useful links to explore == Translations == These are Translated versions of the documentation, which may be outdated compared to the English originals * [wiki:DeveloperGuidelines/de German]