Friday. Log Out! Shut down! Get out!

Case Study on FishHub.org

November 23, 2012by Florin Târnovanuin Activities, Development, PeopleNo Comments
todd_florin

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.

Environment

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

Building such a complex web application needed a lot of tools and settings to improve performance. So, from all existing tools for caching, we chose memcache. Furthermore, we have improve performance by aggregating all css and javascript files into one (here we has another big issue with IE and we had to split those files, as it were to big for IE).

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.

Sassy (/sassy)

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.

Theming

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”

Tags:

Florin Târnovanu

When he was asked what are the things he likes, Florin answered that he loves Ubuntu, OS X and Drupal. Unsurprisingly, he told us that he hates Windows² :)

So, we are introducing to you our most technological guy, Florin! He rejoices spending time with his family and his favourite holiday is Christmas.

If you want to keep him motivated you have to make him feel independent, give him recognition and he’ll work with dedication.

What do you think?

*