From Nsnam
Jump to: navigation, search

Main Page - Current Development - Developer FAQ - Tools - Related Projects - Project Ideas - Summer Projects

Installation - Troubleshooting - User FAQ - HOWTOs - Samples - Models - Education - Contributed Code - Papers

Return to GSoC 2017 Accepted Projects page.

Project overview

  • Project name: ns-3 App Store
  • Abstract: The goal of the project is to create an app store for contributed ns-3 modules. The project aims to support modularization of the ns-3 codebase and federation of development activities. Once this project is complete, ns-3 users will be able to download modules depending on their requirements. Developers will be able to upload new modules once such modules are approved by the maintainers.
  • About me: I am a 4th year Computer Science undergraduate student from National Institute of Technology Karnataka (NITK), Surathkal, India. I am an open source enthusiast and have about 3 years experience of intensive programming in Python and Django. I had been working in ns-3 for the past few months on Rate Adaptation Algorithms (RAA) in ns-3.

Technical Approach

The App Store will be created using Django framework, based on the Cytoscape App Store. The primary aim will be to modify the Cytoscape code to support ns-3 requirements. It was found out that the Django dependencies used by the Cytoscape code are outdated. The Django version being used there is also an old one. The first step in the project will be to create a clone of the App Store that meets ns-3 requirements. Cytoscape app store lets users upload the .jar files directly to the site and it verifies the app in the backend. ns-3 modules does not follow this system and hence the system needs modifications. Considering these differences, a new Django web application will be created that supports ns-3 requirements, reusing maximum amount of code possible from Cytoscape. The web application will be deployed using Apache servers alongside the existing Wordpress instance. The application will be kept separate during development and it will be merged once complete. Detailed description of the project is available here

Web Application

The frontend of the web application will be designed using Bootstrap and Materialize. The design will be integrated using the MTV (Model Template View) architecture of Django. Bootstrap and Materialize will be integrated with Django templates. The backend of the web application will be Django Models and Views, created in Python. The App Store will be built on top of Django Edge which provides features like user profiles, accounts and bootstrap-enabled admin pages. SQLite(Default Django Database) will be used for development. For production, PostgreSQL will be used. During the development phase, the default Python server will be used. To test the webapp in production, the website will be run using nginx and gunicorn. To make it available for public use, the web application will be integrated with the current ns-3 website.

Milestones and Deliverables

The entire GSoC period is divided into 3 phases. The deliverables at the end of each phase is as mentioned below :

Phase 1

  • Django web application for ns-3 App Store with basic requirements
  • Deploy the application on a test server
  • Make url available for developers to get feedback

Phase 2

  • Feedback and ratings feature
  • Bake integration
  • Documentation and tutorials update

Phase 3

  • Extensive testing
  • Integrate documentation of separate modules to the main site
  • Make url available for public users

Weekly Reports

Community Bonding Period (May 5-29)

Summary :

  • A detailed design for the App Store has been created, which will be followed in the coding phase. The design can be found here.
  • The technologies to be used for implementing the application has been finalised.
    • The App Store will be implemented using Edge, a Django starter package which implements user accounts and themed pages by default.
    • Bootstrap and Materialize will be used for designing the frontend.
  • Created a basic skeleton project using Edge to be used for further development.
  • The wiki and Readme has been updated to include steps for installation.
  • A mirror of the git repository has been setup in the development VM for testing (necessary packages have also been installed)

Week 1 (May 30-June 5)

Tasks Completed :

* Setup the initial frontend code
* Complete the static parts (navbar, footer)
* Design homepage
* Design login, signup pages
* Design App page

Summary :

Week 1 of the Coding Phase was spent in designing the frontend pages of the Web Application.

  • Materialize and Bootstrap are used for the frontend design.
  • Bootstrap is used to power the admin page and Materialize is used in designing all the other pages.
  • The frontend design of all pages required for the first phase of the project has been completed.

Week 2 (June 6-June 12)

Tasks Completed :

* DB Design
* Design Views for User Interaction
* Integration with Frontend (User Flow)
* Started ElasticSearch integration.

Summary :

Week 2 was spent in designing the Database to be used for the WebApp.

  • The Database model is similar to the one used in Cytoscape App Store, but the implementation is different.
  • Views that handle the user workflow have been designed and implemented.
  • The designed views have been integrated with the previously static frontend, which enables data to be added from the Django Admin panel.
  • Unlike Cytoscape App Store, we have decided to use ElasticSearch instead of Xapian as it is more widely used and accepted. Integration of ElasticSearch with the Web Application is in progress and will be completed in the Week 3 along with developer and maintainer workflows.

Week 3 (June 13-June 19)

Tasks Completed:

* ElasticSearch Integration
* Developer Workflow
     * Forms and Frontend
     * Views and Backend Integration
* Maintainer Workflow
     * Forms and Frontend
     * Views and Backend Integration

Summary :

Week 3 of the coding phase was spent in designing the Developer and Maintainer workflows as well as in integrating ElasticSearch.

  • During Development, a bug in Django-haystack has been identified which prevents partial word seach while using ElasticSearch. This bug will be addressed in the next week.
  • The workflows for Developers and Maintainers have been completed. These include Creating and Editing Apps, and their respective releases.
  • The views have been designed in such a manner that only the respective App Editors or AppStore Maintainers are permitted to edit an existing app or a release. Only maintainers are allowed to create a new app and they specify the editors who will be given the previlege to edit the App Page.

Week 4 (June 20-June 26)

Tasks Completed :

* Fix ElasticSearch Bug 
* Completed Backend-Frontend Integration
* Website setup and made available for developers

Summary :

Week 4 of the coding phase was spent in completing the remaining bugs in the website before the first launch.

  • The ElasticSearch bug which was identified in the previous week is fixed in this week by making use of the SearchQuerySet feature of haystack.
  • The remaining backend-frontend integration is complete now and the site is ready for first launch.
  • The website has been setup in the VM using gunicorn and nginx and it is made available for the developers for testing.

First Phase Evaluations (June 26-June 30)

As previously planned, the AppStore has been made available to users for testing. The AppStore is setup at and is available to the public. The documentation for using the site or for setting up your own instance of the AppStore can be found here

Week 5 (June 27-July 4)

Tasks Completed :

* Added comments and rating
* Fixed overhang and spacing issues
* Address Phase 1 review comments


  • Users can now add their ratings and comments for the app they want. There is an issue in displaying the stars. This issue will be fixed in the coming weeks.
  • There were some overhang issues identified in some browsers. That has been fixed in this week.
  • During phase 1, we received a comment regarding the number of downloads in the site. It has been removed from the site since the feature is not so useful for ns-3 modules.

Week 6 (July 5-July 11)

Tasks Completed :

* Fixed Firefox/IE height issues
* Added smaller screen support
* Added bakefile support
* Added download page


  • Issues were identified in Firefox and IE where heights were rendered differently which caused the site to appear differently in different browsers. This issue has been fixed by adding the correct padding to the pages.
  • To support smaller screens, the responsive nature of material design has been used. The sizes of different screens have been setup explicitly to account for the change.
  • The website has been modified to accept a bakeconf file and retrieve details from it. But, the details that must be retrieved from the file needs to be finalized.
  • The download button in the app page has been modified to point to a new page, which gives different options for downloading and setting up the module.

Week 7 (July 12-July 18)

Tasks Completed :

* Tried modifying Materialize design to match Cytoscape design

Design Decision

We have made a compromise on the current responsive decision to use the Cytoscape AppStore which does not take responsiveness into consideration. We have chose it since we feel that ns-3 AppStore is mainly intended for desktop users. A mail has been sent out to Cytoscape maintainers asking the kind of attribution they prefer when we use their design. Meanwhile, our backend code will be integrated to their design and the site will be made available to the developers.


  • Since Cytoscape AppStore is a well designed website, we decided to change the looks of our site based on it.
  • Unfortunately, Materialize design cannot be modified to match the exact look of Cytoscape Appstore.
  • A design decision was made this week, to compromise responsiveness and move to Cytoscape design. The Cytoscape frontend design will be integrated to our design over the next week.

Week 8 (July 19-July 25)

Tasks Completed

* Add Cytoscape frontend code to our repository
* Integrate the new frontend with the old backend
* Remove materialize
* Update the VM


  • As decided in the previous week, we moved to Cytoscape design since Materialize was found to not suite our needs.
  • The new frontend from Cytoscape was integrated with the backend designed for ns-3 App Store.
  • Since the new website works on Bootstrap, the extra dependency on Materialize has been removed.
  • The VM has been updated with the latest code and it is made available to developers for feedback, as part of Phase 2.

Second Phase Evaluations (July 24-July 28)

Over Phase 2, the issues identified in the App Store has been rectified, mainly, frontend issue. The frontend has undergone major changes as we moved from Materialize to Cytoscape design. Few new features like screenshot support, bakefile support has been added. The AppStore is setup at and is available to the public.

Plan for Phase 3

  • Switch from Username-Password accounts to Google OAuth login (to prevent spammers and bots).
  • Change the URL structures (Move to names rather than numbers, Use easily decipherable names. Eg : for SiFt module v1.0).
  • Autopopulate the App Page fields from the stored bakeconf file.
  • Authors will have the ability to edit the app, add screenshots, writeup on dependencies etc. (Markdown Supported)
  • New Tabs : Maintenance (Shows the current maintainer, status of the module, etc.), Dependencies (Specific instructions from author to handle dependencies)
  • Logged In users can provide feedback (Comments thread)
  • The navigation panel of the website has to be redesigned to match that of other ns-3 pages, including the links and pull-down menu.
  • Apps can be made inactive : An inactive app will not show up on the search results or the main page. This can be done by using a BooleanField, active.
  • Database needs to be migrated to production, MySQL is not suitable for production. We need to switch to PostgreSQL for production. A cron job needs to be run to frequently backup the database.
  • Provide a well built documentation on using the website.
  • Build a Test suite and use Travis for continuous integration.

Deliverables : Fully functional ns-3 app store is deployed by August 29.

Enhancement : Complete all envisioned extensions to make use of the app store at the command line. That is, implement commands that can be used to fetch and app from the App Store and to update it later using command line. This can be done by using Django Rest Framework to open up APIs for the command line functions to access the app store.

Week 9 (July 26-Aug 1)

Tasks Completed

* Added Active field to apps
* Change URL names from numbers to names


  • Added a new active field to the Apps model. Only those apps with active=True will show up in the main page of the website.
  • The URL numbers have been changed from numbers to names to provide easy access for the bake-tool in the future.

Week 10 (Aug 2-Aug 8)

Tasks Completed

* Added Instructions section
* Added Maintenance section
* Added code to parse bakeconf
* Editors can choose default download now
* Update the VM


  • A new tab has been added in the App Page that supports markdown. Editors can edit this sections to include installation instructions.
  • Maintenance tab has been added in the App Page, editable by editors. It supports markdown and can be used to mention the maintenance aspect of the App.
  • Basic structure of the function to parse the bakeconf has been added to the backend, but it is not integrated since the structure of bake file isn't fixed yet.
  • Editors can choose the link to which download button points.

Week 11 (Aug 9-Aug 15)

Tasks Completed

* Resolve open GitHub issues regarding the workflow.


  • Resolved open issues : Closed

Week 12 (Aug 16-Aug 22)

Tasks Completed

* Resolve open GitHub issues.


  • Resolved open issues : Closed

Final Evaluations