Current Courses

Computer Graphics

Signals Systems and Patterns

Amiga Assembler Tutorial

A more detailed descpription of this tutorial can be found URL

Course Design

Advanced Machine Learning

Machine learning is the study of algorithms that can learn from data. Intelligence can be seen as the capability to act under uncertainty. This course tries to make these two concepts principled and teach the underlying scientific framework namely Bayesian statistics. I give a third of the lectures in this course focusing on Bayesian modelling, non-parametrics and Kernel methods. The course is suitable for anyone who is interested acquiring a foundation for understanding machine learning algorithms from a unified perspective, learning a basis for developing new novel algorithms and models.

The material in this course is mathematical, the concepts are not advanced, only basic linear algebra and calculus but the course is focused on understanding which means that to get something out from the material will require a certain mathematical maturity.

Low-level Programming and Computer Architecture

This course is focused learning the real low levels of computers. We start from the real basics trying to explain what actually happens in the electronics when you press a key and build this up to a level where we start abstracting the hardware with operating systems and high-level programming languages. I thoroughly believe that the best way to learn these things is through practice, therefore the course is heavily lab focused where the three labs makes up the dominant part of the course. We use Raspberry Pi computers to do the labs and program the hardware directly by learning ARM assembler. We also do a lab in C where we hack the Linux kernel to extend it with additional functionality.

The course is suitable for anyone who have an interest in low-level computing and does not require any previous background except a genuine interest in computers. I believe that the course is important for anyone who will work with computers in the future, understanding how a computer really works will make you a better programmer even if you will mainly use high-level languages in the future.

Previous Teaching

Between 2010 to 2015 I was a lecturer at Royal Institute of Technology, since January 2016 I am a lecturer at University of Bristol.

2015-2016

  • Low Level Programming and Computer Architecture - Lecturer
  • Advanced Machine Learning - Lecturer
  • Computer Graphics - Lecturer

2014-2015

  • Low Level Programming and Computer Architecture - Lecturer
  • Advanced Machine Learning - Lecturer

2013-2014

  • Low Level Programming and Computer Architecture - Lecturer
  • Degree Project in Machine Learning for Engineering Physics - Project Supervisor
  • Degree Project in Computer Science - Project Supervisor
  • Computer Graphics and Interaction - Guest Lecturer

2012-2013

  • Low Level Programming and Computer Architecture - Lecturer
  • Degree Project in Machine Learning for Engineering Physics - Project Supervisor
  • Degree Project in Computer Science - Project Supervisor
  • Computer Graphics and Interaction - Guest Lecturer

2011-2012

  • Computer Graphics and Interaction - Lecturer
  • Computer Science and Numerical Methods - Lecturer
  • Scientific Visualisation - Lecturer
  • Scientific Programming - Lecturer

2010-2011

  • Scientific Programming - Lecturer