Projects (September 2015)


This is the tentative project list for September 2015; it should be updated shortly.



This term UCOSP is happy to be partnering with eight projects:

  • Markus: Web-based grading platform.
  • UMPLE: UML modeling and programming tool.
  • BB10 Phonegap: Mobile app platform.
  • Formulize: Database, reporting and workflow management system.
  • Review Board: Code review tool.
  • Fish: Web platform for simulation-based experiments.
  • CodeIgniter: PHP framework for web applications.
  • Waterbear: Web programming toolkit.


MarkUs is a web-based grading tool built with Ruby on Rails. The primary goal of MarkUs is to make it easy for graders to read and annotate students’ code. Graders also fill in a marking scheme or rubric created by the instructor.  Annotations may be saved for later reuse.  Students submit their code using either the web interface or using standard Subversion tools, and can form their own groups when allowed by the instructor. As MarkUs grows, we continue to add more useful features including a REST API that allows some operations on MarkUS to be scripted, a remark request system, more reporting, and support for PDF annotations.  We are also working towards integrating a testing infrastructure that would allow students to run instructor created tests on their submission and get realtime feedback. Students working on MarkUs will learn basic web application development technologies using Ruby and Rails.  MarkUs is hosted on Github so students will become familiar with Git and the process we use when working on the code. Because MarkUs is used by several thousand students in more than 4 universities (on 3 continents!), we take code quality seriously.  All code submissions go through a code review, so the first task that students are asked to complete is fixing a trivial bug so that they become familiar with the code review process.  Students working on MarkUs need to be able to work in Linux either natively or in a virtual machine. As the summer comes to a close, we are putting together a list of the next projects, but here are some of the areas we are looking at for the fall. 1) Completing the transition from Prototype to JQuery.  This will be a good project for someone wanting to learn JQuery and willing to do some detailed work. 2) Enhancing the grade entry table. MarkUs includes a simple table that can be used to entry grades for tests or labs for example.  It works reasonably well, but is missing some features and needs more testing. 3) Continue work on a git back end.  In the current version, student files are stored in subversion repositories, and we would like to allow instructors to set up git repos instead. 4) Implementing additional user requested features. Many of these are recorded in the issue tracker. 5) Work on the port to Rails4.  We may be nearly finished this port, but there are often additional things to clean up. More information: and their blog,


Umple is an open source toolkit whose objective is to merge UML modeling and programming into a single activity. Umple can be used in several ways: It can be used as a textual language for UML. It can also be used as a programming-language pre-processor, allowing UML concepts like associations and state machines to be added directly to Java, C++, and PHP. In addition, Umple allows drawing UML diagrams online and generating code directly from those diagrams. It is the goal of the Umple team to have large numbers of programmers and modelers incrementally adopt Umple. The barriers to entry are low, since using Umple can be done in a minimal way, without disrupting the existing model or code. Umple is an open-source project hosted on Google Code. You will have the opportunity to learn some or all of the following:

  • Model-driven design using UML
  • Test-driven development using JUnit
  • Programming in Java, Umple, PHP, C++, and/or Javascript
  • Compiler design including parsing and code generation
  • Web site design (of the UmpleOnline tool)
  • Eclipse plugin development (of the Umple plugins)
  • A variety of other libraries and tools
  • Agile open source development with continuous integration

The exact set of skills you will employ depends on the task(s) you choose to work on. More information: Suitable student projects:

PhoneGap/Cordova Plugins for BlackBerry 10

BlackBerry is embracing application development with HTML5 and seeking to push the boundaries of what can be accomplished with web technologies on a mobile device. Our focus is on secure, high performance, enterprise applications on multiple platforms. A significant amount of our work is done in the open on, under the Apache 2 license. This term BlackBerry will continue to work on PhoneGap/Cordova compatibility, porting native plugins from iOS and Android, and writing new ones for BlackBerry 10. We may also spend time working on sample applications. Students should be familiar with C++ or JavaScript development, though they do not need to be experts with both.


Formulize is a tool for making data management systems on the web. It has extensive support for modelling workflows, so that organizations can customize how users interact with the data that Formulize is managing. It is aimed at “power users” in not-for-profits and other organizations without large IT departments and resources, empowering them to create systems that would otherwise require custom programming to deploy. The most basic operation in Formulize, is the creation of forms. Administrators can specify what elements should appear on the form, and also how different groups of end users should be able to interact with the form. From there, administrators can make custom screens that control how lists of entries in each form are shown to end users. Administrators can also control how different forms relate to each other, similar to describing table relationships in an ERD. These relationships then govern how data is queried from the database, enabling screens to display complex sets of information to users, rather than just entries from a single form. Formulize can work as a standalone application, installed on a web server. Formulize can also be embedded within any PHP-driven web application on the same server where it is installed. A Drupal module has been created that supports extensive integration with the Drupal content management platform, including single sign-on for users. Integration plugins for WordPress and Joomla have also been created (by previous UCOSP students!). Who uses Formulize? Formulize is used by organizations around the world, for a variety of purposes, from tracking the status of housing renovations, to recording the activities of wilderness rescue teams. The lead developer of Formulize is Freeform Solutions, a Canadian not-for-profit organization that helps other not-for-profits with IT. Freeform has used Formulize with several past and current clients, including: Oxfam Canada, the Boys and Girls Clubs of Canada, the Ontario Association of Children’s Aid Societies, the Australasian College of Sports Physicians, and various social science research projects at the University of Toronto, McMaster University and the University of Western Ontario. How is Formulize built? Formulize is built primarily with PHP, but makes use of HTML and Javascript as well of course. jQuery is also used extensively in the more recent parts of the code base (the project started in 2004). Formulize relies on MySQL for database operations. Because it is a tool that you use to create other systems, rather than a tool that does something for end users by itself, there is a high degree of abstraction throughout the codebase, especially the parts that interact with the database. The code has to read configuration information specified by the administrators, and use that to dynamically generate all operations, including database queries. The newer parts of the codebase employ some object orientation. Older parts remain largely procedural. The codebase is maintained on GitHub. What will students learn? Students will have extensive exposure to PHP of course, and related web technologies. Students will be tasked with fixing problems and adding features to Formulize. We follow a specific process in our GitHub repository, to record code changes, documentation and Selenium tests all together. The tests are run automatically by our continuous integration system, based on Travis-CI and Sauce Labs. Students will have to develop documentation for their features, as well as verification tests in Selenium, before their code will be merged with the master branch. This should give students a deeper understanding of the role of software engineering in the larger process of maintenance and deployment of software. Learn more about Formulize:

Review Board

Review Board is a powerful web-based code review tool that helps developers do peer review as they write code. Review Board is used by thousands of software companies including Twitter, Yahoo, and VMware, as well as many open-source projects like Apache and KDE.
Students working on Review Board will have the opportunity to learn about back-end web development using Python and Django, as well as front-end development using HTML, CSS, Javascript, jQuery, and Backbone.js. Source control is managed via Git on GitHub. All patches are reviewed using Review Board, and students are expected to contribute to reviews for each other, as well as to other members of the development community.
Some possible projects include:
  • Making improvements to Review Board’s extensions infrastructure, which allows third party developers to build features that aren’t generic enough to be part of the product.
  • New kinds of integration with other services, such as deeper bug tracker integration, an adapter for GitHub pull requests, or allowing users to log in using Mozilla Persona.
  • Reworking parts of the UI to work better on touch devices like tablets and smartphones.
For a full list of project suggestions, check out our wiki: Student Project Ideas
Some experience using Python and/or Django, Javascript and jQuery would definitely be a plus. In our experience, Git is usually the largest stumbling block, so students comfortable with Git (or able to quickly get comfortable with Git) will likely have an easier time developing.
For more information, see the project web page at, or our students blog at


Fish is a web platform to conduct simulation-based experiments in the field of environmental psychology. The basic setting for the experiments is as follows: participants access “oceans” (on their browsers) that have a number of fish in them. They see other participants join the same ocean; some of them may be bots. They decide how much they want to fish for themselves, knowing that if they overfish they may cause the fish bank to collapse. Behind the scenes, experimenters can change a large number of settings to test their hypotheses—for instance, testing whether greedier bots make human participants greedier as well, or whether hiding profits makes human participants less or more focused on conservation. Fish is currently being used to conduct studies like these in several labs around the world.There are many requests for additional features and enhancements, and participating students would be working to make these happen. There are necessary improvements on the Node backend and on the styling and behaviour of the site’s frontend, and we can tailor together those we request from participating students to their interests.The project is programmed in Javascript, using NodeJS as the backend server. Fish uses MongoDB as its database server, and Socket.IO to handle the interaction between participants and the simulation engine.
For more information see the project page at


CodeIgniter is a community-driven open source project, that provides a lean MVC framework for building web applications using PHP. It makes it easy to follow good practices building web applications, without insisting that there be a single way to accomplish each task. The framework is mostly object-oriented, with its core classes and libraries, but it also includes some collections of helper functions.

CodeIgniter 1.0 was released in 2006, by EllisLab, in Beaverton, Oregon. It has undergone a number of revisions over the years, with version 2.0 released in 2011; the current stable version sits at 2.2.0. In the fall of 2014, ownership was transferred to the British Columbia Institute of Technology, in Burnaby, BC. There has been a lot of activity this fall, as we get ready for version 3.0, to be released shortly under the MIT license.

Our source code repository is at The project has a substantial base of contributors from around the world, and is the most forked PHP framework on Github. We have an active forum (, an IRC channel (, and even the occasional tweet ( We use the Git-flow workflow model, with forking and branching. Code contributions are handled by pull requests to the main repository, usually to the “develop” branch. Travis-ci is used to run unit testing builds against all submitted pull requests. Documentation is built using Sphinx.

Governance is provided by a council of seven experienced CodeIgniter developers, from Bulgaria, Canada, Germany and USA. We use Trello for brainstorming and out-of-band deliberations, and that would be a good tool for a distributed team too.

The project lead (and project mentor for a UCOSP student team) is a full-time instructor at BCIT. His primary teaching responsibility is the webapp development course for their Computer Systems Technology diploma. He has been using CodeIgniter in the course for four years, and will be using a Github repository to distribute and manage labs and assignments during the winter 2015 term – something that could be extended to include a UCOSP student team. He is also advocating a devops course for the first year computer students, before they start work on industry-sponsored programming projects.

CodeIgniter has several subprojects that would suit a UCOSP student team:

– Unit testing: Our unit testing support needs beefing up, both in terms of the quality of unit tests for core framework components, and building new components that would make it easier for application developers to unit test theor code built on top of CodeIgniter. To be built using PHPunit.

– Command line tools: We don’t have any command line tools, and there are a number of them that would be really handy … for instance, updating Composer dependencies, generating scaffolding or even base applications, andupgrading from one version to another. To be built using PHP and CodeIgniter.

– IDE plugins: we don’t have any IDE plugins, which would make it easier for new adoptees of the frameworks (and students) to use CodeIgniter for their projects. NetBeans and Eclipse are the two that come to mind, although others are welcome afterwards. The plugins would be implemented using the native language of the IDE, typically Java, with Ant scripts to run the CI command line tools.

– Application manager: a tool, command-line and/or IDE based, which would make it easy for an app developer to choose compatible and approved plugins, from a number of categories, to integrate with their webapp. To be built using PHP.

There are usually any number of outstanding issues to address, as well as proposed enhancements. Once the roadmap for version 4 is finalized, there will be even more and bigger projects too!


Waterbear is a toolkit for making programming more accessible and fun. Having a visual language means you don’t have to focus on learning a syntax to start programming.  Waterbear is also a toolkit for making programming more accessible and fun. Having a visual language means you don’t have to focus on learning a syntax to start programming. It’s good for kids, artists, and anyone who would like to make their computer do something new without having to become a “programmer” (although it could lead to that). More details are available at the Waterbear site or in the Waterbear Github repository.

Possible Projects:

* As the Waterbear foundations stabilize, we need to rework the interactive development interface (IDE) to make it friendler, more powerful, and easier to use.
* Creating demos which use the blocks to showcase different programming tasks.
* Creating new block-based teaching languages using a subset of the blocks, or by wrapping a different language (such as Python or Lua).