CGRAN - A new look

Recently I have been working on giving Comprehensive GNU Radio Archive Network (CGRAN) a new look. While the old CGRAN site was built using trac wiki pages, the new one looks more like a standard website, with nitty-gritty details like gnuradio version dependencies, tags associated with each OOT Module, more info about OOT module developers, etc., all packed in one place. The site's built using pelican static site generator (Hey ! I use pelican for building this blog as well :D) and uses bootstrap-material-design framework by Fez Vrasta, to style the site. Design is not just the only attraction to this site - the module page information is automated and most important of all, the site's tightly copuled with PyBOMBS. Read along to know more !

Design Idea

First off, the site's built with bits and pieces collected from different sources:

Also, while designing the site, I took a bit of linience in borrowing ideas from two similar websites - atom.io and customelements.io. The front-page looks similar to the customelements.io with more emphasis on the list of OOT Modules. Unlike customelements.io, which is a standalone site for collection of various polymer elemets, CGRAN is a part of the GNU Radio family and it was enough that we display the condensed top-matter, as all the extra information concerning OOT Modules is available on GNU Radio wiki. That said, there are relevant links on the site to connect to the right wiki page :)

Rule Zero : PyBOMBS and CGRAN

Intelligent CGRAN and integrating it with PyBOMBS has been the top priority ever since PyBOMBS task force came into picture. The idea is to automatically generate a list of OOT modules available as PyBOMBS recipes and display them on CGRAN.

What does this mean ?

  • The OOT Module developer has to write a PyBOMBS recipe,
  • Pull a request for the recipe to be accpeted into PyBOMBS repo,
  • Fill in the details in the Manifest file created by gr-modtool, in the module repo,
  • Sit back while the CGRAN site collects information about the new module and generate a new page for it.

Simple isn't it ?

Module Pages and Manifest

I always liked the atom.io's way of displaying a detailed information on its package/theme on a separate page(that way, the user can stay in a place and get more info about a project). I created the OOT Module pages in a similar fashion, but atom.io uses the package/theme's README to display information on it's project info page. This doesn't fit the CGRAN model, as few already existing OOT Modules have license embedded into their README file. Not only does the user have to scroll down to get past the license information, it looks a bit odd on the individual pages. So what did we do ? Enter Manifest.yaml (the format's subject to change) !!! The Manifest.yaml provides few mandatory fields to fill in, along with a description field, where the OOT Module author can write any information regarding the module, which he/she thinks will be of best interest to the user.

Now, why is YAML the preferred file format ?

  • It is human readable
  • Easily readable on github (Assuming the OOT Modules reside on github)
  • CGRAN can scrape the necessary information to generate info for Module pages in markdown format (remember intelligent CGRAN ?)

What Next ?

While we have come far from a trac based site to an automated site for CGRAN, more features (like repo stats, to name one) are to be implemented up the sleeve without posing any overhead to the OOT Module authors.

P.S The current state of CGRAN could not have been achieved, if not for constant inputs from Nathan West and other PyBOMBS Task Froce members :)