If you followed our blog, you already know that last weekend our team held the a presentation at Drupal Camp Arad 2012. If you are curious to find out what our session was all about, you`ll find below all the details about ”Using Drupal to create high scale websites with multiple instances. Case study: Fish Hub”.
About Fish Hub - Fishermen communities across USA
Fishhub is a Drupal application build to help communities of fishermen across the US to manage resources, plan boat and harvest catches, promote and manage their business, interact and exchange useful information. Inside a community, Community and Program Managers will maintain resources related to fishing activities.
Workflow – Workflow & Tools
The project is being developed with an agile process. Sprints are 1 week long with releases to production at the end of each week. Client feedback is from weekly calls.
Tools used for project management include Jira and Basecamp. Code is in a Git repository on Bitbucket. Additional Atlassian tools include Crucible and FishEye. Additional scheduling and specifications via Google Docs. Direct communication between teams and team members via Skype calls and chats.
Application is hosted in cloud, on Debian Squeeze, with a minimum 4 Gb of memory and 2 cores allocated. Besides usual apache2, php5 and mysql, xcache is used for opcache and memcached for drupal. Access is enforced by 256-bit SSL security, with certificates issued by StartCom.
Each community is a drupal instance. Management of instances is performed by Aegir (www.aegirproject.org). It helps us deploy new communities with a minimum of effort. Aegir also helps for building platforms for development, testing, and production. Migration from Drupal versions is also made easier through the use of platforms instead of individual site migration.
Applications | Main functionalities
Platform (Wheelhouse) - Dashboard for each main tool
Main platform contains general tools for fishermen: maintaining profile information, messaging system, managing a marketing page, a fisherman feeds section, news and events, their business information containing boats and permits for species to catch, all wrapped up on a dashboard for friendly user experience. The community managers in addition can manage the species list, pages of community and users list.
Boat Plan - Planning a business
Application build to help fishermen plan their business. They can map out their income and expenses throughout the year. Multiple plans are possible, giving the fishermen the ability to try out different scenarios for the year. Includes real-time generated charts, automatic calculations, sharing as pdf by mail and many more. Also, building settlement sheets to help them keep track of actual income and expenses.
QuotaX - The marketplace of the community
The marketplace of the community! It helps fishermen to create transactions of quotas, grouped in portfolios, managing an inventory or even apply to programs to get more quota.
NOAA Connector – What is NOAA?
Fishermen are required to report their trips and catch to NOAA, a government organization. At NOAA, the data is entered from hand-written forms, resulting in many errors, and the potential to negatively impact a fisherman’s business. A tool to connect Fish Hub to the various NOAA websites was built. None of the NOAA sites have an API so the tool is designed to scrape the user face interface of their sites. Multiple solutions using cURL and a scriptable GUI were required.
Challenges in Drupal
Features synchronization – Keeping everything the same
Having a lot of drupal instances needed also a lot of work for deployment. So, a major help for the project was “Features”. With that module we managed to deploy all our iterations easy, by exporting all database settings into code and then synchronizing them with git. Having all database settings into code was much easier for us to deploy back to database when we needed.
Performance - Complex application requires performance improvements
Top contrib modules used
Views (/views) - The swiss army knife of Drupal
The swiss army knife of Drupal, used extensively for fishermen management, programs, inventory, everything that requires management. Ordering lists, referencing content types or entities, views is almost everywhere and does a great job almost out of the box.
Field collection (/field_collection) - Field in field in field in field in field in field …
Giving the fact that we are collecting a large quantity of data from all users, this module is a must for building complex forms, since is an extension of core’s Field.
Homebox (/homebox) - Custom blocks resizable and reorderable everywhere
To build and maintain highly customisable dashboards for a great user experience, this module was one of the first choices. Custom blocks resizeable and reorderable everywhere!
Profile2 (/profile2) - One user, multiple profiles
One user, multiple profiles. Public or private, the user has the possibility to manage all of them, assigned to roles via permissions.
Webform (/webform) - Bringing forms to the next level
Flexible framework for building surveys and forms. Allows for the clients to build and manage their own interactions with users. Much improved with the form_builder interface.
Chaos tools suite (/ctools) - AJAX Forms at your fingertips
We use it mainly for modal dialog boxes. We have custom forms, node edit forms, pages that are rendered in modals for a better user experience. Also, some AJAX we used is implemented with ctools.
MENU trail by path (/menu_trail_by_path) - Brings the menu back on the right path
A small module, but very helpful for us. As the name say, this module sets the active trail class for nested menus by path. So, if we have /foo and /foo/bar, menu item pointing to foo will be active for both links.
SCSS – Faster to write, easier to maintain. Extends CSS with variables and selector inheritance. Compiles with Compass tool. ( sass-lang.com, compass-style.org )
A helpful module used in order to generate the css code from our .scss files. Extends CSS with nested rules, variables, and selector inheritance. Faster to write, easier to maintain.
superfish (/superfish) – Super user-friendly super menus
Building friendly-to-use menus is always a challenge on any web application. The user experience depends very much of the intuitivity of navigation and on that Superfish does a great job. Sliding menus, fading in and out, a bit of alters in the back-end and the result is an optimal use of space with maximum menus details.
About theming, Omega is the chosen base theme. Being a very flexible and clean one, it was very easy building the theme that we needed for our project. Stylesheets were broken out into major sections of the site to keep them manageable.
And Some Funny Facts
- 21516 lines of code
- 1033 tables in database for a community
- over 120 liters of coffee
- over 60 AA batteries for mice
- Thursday became our “Friday 13th”