Friday, October 1, 2021

Why students should get involved in open source

One of the key areas University College London have been focused on is project based learning over traditional programming assignment. UCL Computer Science launched the UCL Industry Exchange Network (UCL IXN) in 2011. The unique Industry Exchange Network pedagogical approach, established by Prof Dean Mohamedally and Prof Graham Roberts, has been endorsed as best practice by the UK government*.

* Reviewed in the UK government’s Topol Review 2019 and endorsed by the UK Foreign and Commonwealth Office. 

Other universities run capstone programmes where students might have a single industry project experience, often in their final year. In contrast, UCL Computer Science undergraduate students can work on industry projects as part of their taught modules, in multiple years of their degree programme. Master's students have three months dedicated to a full time on an UCL IXN summer project. UCL IXN uses a motivation tracking approach to focus on students' particular interests, identifying the fields in which they want to work. The project allows student to become specialists who don't need to retrain before starting employment. For partners, the programme allows them to innovate with low risk. Creating proof of concepts and prototypes with the students, they explore ideas quickly with minimal costs and disruption to their business. Within the framework of the IXN student learn both technical and soft skills, these include skills such as social and organisational skills. You can see some of the past Microsoft projects at IXN Project.

Allowing students to develop a sense of context of the impact of their work and contributions to a wider community is a huge opportunity.  Understanding how development work across disparate development teams and working across different technologies and services. During the projects Students get exposure to standard, patterns, processes and practices, and learn skills from leadership, interacting with Open Source project’s working with global and diverse communities, understanding of priorities and negotiation skills, understanding of documentation and communicating feature requests, requirements, and implementation requirements.

Contributing to Open source solutions also teaches students of how to deal with communication problems which are common on GitHub Open Source projects, appreciating the software as a product through practices such as issue triaging and release planning and most importantly documentation and communication in respect of receiving, discussing, and addressing code review comments.

This finding and outcomes were recently discussed in:
Why computing students should contribute to open source software projects | Communications of the ACM, 
Author: Prof. Diomidis Spinellis,Authors Info & Affiliations,
Communications of the ACM Volume 64 Issue 7 pp 36–38

I completely agree with the discussed learning outcomes:

- Analysis and evaluation to application and creation
- Navigating through a project’s assets, such as software code, issues.
- Documentation, and pull requests;
- Evaluating swiftly the product and process quality of software systems or components, as is often required in modern software reuse.

- Configuring, building, running, and debugging third-party code and utilising CI/CD.

- Setting up and running software intensive systems with diverse software and hardware requirements. 

Some the key consideration goals of Open Source projects  

- Choosing realistic contribution goals. (Initially students tend to wildly overestimate their ability to contribute to a project within a 8 - 14 week project period.)
- Skills/Experience of reading third-party code to identify where their additions or fixes need to be made.
- Modifying a large third-party system by adding a new feature or fixing a bug.
- Writing tests that demonstrate a contribution is working as expected now and into the future.
- Working with software systems developed using multiple programming languages and tools.
- Documenting their work in both formal report, markdown and communications.
- Following version control workflows, such as working on issue branches and rebasing code commits, actions, testing frameworks.

As Prof. Diomidis Spinellis states: 'Both the social and technical learning outcomes are very relevant in the modern workplace—and they go well beyond the proposed ACM/IEEE curriculum for software engineering.'


I would like to share three IOT Project we have been working with Student on this summer lead by colleagues Dave Glover and Mike Hall.  The following  have being developed in cooperation by a very talented team of university students at UCL (University College London). 

This article covers three community driven tools which are being developed under Open Source by students around the world, these projects may help kick start your Azure Sphere IoT projects.

  1. Azure Sphere DevX
  2. Azure Sphere GenX
  3. Azure Sphere Hardware Definition Extension for VS Code and Visual Studio 2019


Azure Sphere DevX


Azure Sphere DevX is the library that underpins the Azure Sphere Developer Learning Paths on Microsoft Learn.

The library has been split out from the Learning path to make it easier to use and it’s now used in several projects including the Altair 8800 on Azure Sphere, the Azure Sphere GenX projects, and several customer projects.


Azure Sphere DevX is an Open-Source community-driven library that is based on the Azure Sphere samples on GitHub and from real-life experiences building Azure Sphere applications. The emphasis here is on community-driven, the library is not an official Azure Sphere library, and community contributions are very welcome.


The library consists of convenience functions and data structures that simplify and reduce the amount of code you write, read, debug, and maintain and allows you to focus on the problem you are trying to solve rather than the underlying infrastructure code. The Azure Sphere DevX convenience functions are callback centric, the library looks after the infrastructure, and you write the code for the callback handlers. You have full access to the source code so you can learn how the library works.


The DevX library addresses many common Azure Sphere scenarios including the following:

  1. Azure IoT Messaging:
    Implements connection management and simplifies sending messages along with application and content properties metadata.
  1. Azure IoT Hub Device Twins:
    Handles Device Twin JSON serialization and deserialization along with a type system to validate data types received and sent.
  1. Direct methods:
    Simplifies in-bound direct methods message processing and passes direct method payload to the associated direct method handler.
  1. Intercore messaging:
    Provides a context model to simplify the passing of messages between high-level and real-time application cores.
  1. Event times:
    Simplified API for all common Event Timer scenarios.
  1. Deferred updates:
    You focus on when you want application and OS updates to occur rather than how to defer updates.


Visit the Azure Sphere DevX library Wiki to learn more. Check out this video introduction to Azure Sphere DevX.


Azure Sphere GenX


Getting started with any embedded project always involves a reasonable degree of effort and this is true of Azure Sphere too. If you checked out Azure Sphere Developer learning Paths and Azure Sphere DevX then you will have noticed the library is very pattern and declarative based and it has made a great candidate for a code generator.


The goal of the Azure Sphere GenX code generator is to make it easy to create a project that has all the basic elements in place ready for you to start to implement your code. So, for example, a best practice for an Azure Sphere project is to include an application watchdog timer, and control the timing of application and OS updates with Deferred Update support. You will also invariably want your device to connect and communicate with the Cloud, and Azure Sphere GenX makes connecting and communicating with Azure IoT a breeze.


To use the Azure Sphere GenX generator you declare an application model JSON file with all the base features you want your application to have, you save the file, and the generator runs to create your application, you can update the application model as your ideas evolve and then you start your development with a lot of code in place. The generator doesn’t do everything for you, but it will help get up and running fast.


Azure Sphere GenX is a community-driven project, you can create or extend custom “recipes”, that are more focused on your project requirements. Community contributions to the project are most welcome.

Learn more from the Azure Sphere GenX wiki.


Check out this video introduction to Azure Sphere GenX.


Azure Sphere Hardware Definition Extension for VS Code and Visual Studio



Along with the focus on IoT security, one of the core strengths of Azure Sphere is the Hardware definition files. Azure Sphere hardware is available from multiple vendors, and each vendor may expose features of the underlying chip in different ways. The Hardware definition file provides an abstraction of the microcontroller peripherals. They also allow you to create more meaningful peripheral names. 


The process of defining a Hardware Definition file can be error prone and time consuming.  Welcome to the Visual Studio Azure Sphere Hardware Definition extensions for both Visual Studio Code and Visual Studio 2019 to simplify the process.


The Azure Sphere Hardware Definition Tools GitHub repo to download and try out and be sure to raise any issues you find on the GitHub repo. or simply install the latest version of the extension from the Marketplace (for Visual Studio or Visual Studio Code), or find all versions in releases.



Posted at