An introduction to the basics of programming using the Python programming language, with an emphasis on programming of relevance to scientists. COMP151 introduces programming in a way that is targeted towards the needs of scientists and those working with data. Although the paper is called "Programming for Scientists", it is equally useful for anyone interested in programming in general, or in programming with data specifically. COMP151 uses the Python programming language which is the most popular language for data science applications, and the 3rd most popular language overall and continues to grow in popularity.
An introduction to computer programming suitable for beginners with little or no prior experience. Introduces the Java programming language, basic object oriented concepts, and simple graphical applications. If you have no prior computer programming background, then COMP 161 is the paper for you. It is a beginner’s introduction to programming in the object-oriented Java language. It occupies an important part in the computer science curriculum, because is normally required preparation for COMP162. Students with prior programming experience may sit an Advanced Placement Test for direct entry to COMP162.
An introduction to computer programming suitable for beginners with some prior experience. Builds on and extends basic Java and object oriented programming. Introduces broader programming concepts and other languages.
COSC212 extends the skills taught in COMP112 with the help of programming skills acquired from COMP150 or COMP160. It focuses on bringing together websites and databases (in technical terms: client-side and server-side technologies). It is a useful paper both for those interested only in building websites and for those with a more general interest in Computer Science.
This paper builds on and extends the knowledge students have gained of programming and the Java language in COMP160. More advanced programming ideas, such as recursion and abstract data type design, are introduced, as well as their implementations in Java. Then a variety of different data structures are discussed together with the algorithms to query and modify them. Theoretical and practical analyses of efficiency are used at each stage of the paper.
This paper extends the variety of data types familiar from COMP160 and COSC241, and looks more closely at the algorithms that operate on them. Among the new data types to be treated are balanced search trees and graphs. The performance of algorithms is a unifying theme throughout, and so the paper provides an introduction to the analysis of algorithms and their classification according to complexity. Students taking this paper will be introduced to their second programming language — all practical work will be done in C. Prior or concurrent enrolment in any MATH paper is recommended.
The first part of this paper will cover the basics of computer architecture, including data representation, digital logic and devices, combinational and sequential circuits, structure of a computer, memory systems, data input and output, microprogramming and assembler language concepts. The second part will cover the characteristics of operating systems, including processes, interprocess communication, process queues and states, scheduling, memory management, virtual memory, file systems, protection and security and resource allocation. Practical work with Java and UNIX will be an integral part of the course.
(This paper is also known as TELE202.) As an introductory paper to data communications and computer networks, this paper consists of three parts. The first part covers the fundamental aspects of data communications, including transmission media, signals and encoding, modulation, multiplexing, data compression, error detection and correction, security, and protocols. The second part covers the topics of computer networks, including the Open Systems Interconnect (OSI) model, Local Area Networks (LANs) and their IEEE standards,flow and error control, Wide Area Networks (WANs), routing algorithms, congestion control, and transport services. The third part covers the principles of the Internet, including the TCP/IP reference model, the Internet Protocol (IP) suite, various Internet applications, and IPv6. Some advanced topics, such as wireless networking, and computer ethics are also covered in the paper.
See COSC244 above.
This paper covers network addressing schemes; network design; network management; the Simple Network Management Protocol; network reliability; secret and public key cryptography; digital signatures and authentication; privacy considerations.
COSC326 Effective Programming S1, S2, SS
This paper aims to improve and develop programming skills by setting a series of exercises which require an analytical and creative approach to problem solving. Most, but not all, of these exercises will involve programming tasks. Some will not use computers at all, some will use them only for ancillary tasks. Each solution will be assessed against the requirements and students will be expected to go back and rework each problem until it is completed satisfactorily. Students will be required to fully test and debug their programs as well as learn to identify inefficiencies. The main objectives of this course are to develop and foster general skills relating to computer related techniques, understanding a problem, problem solving strategies and working with people. Most of the exercises will require working in pairs or in teams, although some exercises are individual.
This course, which assumes some mathematical background, will explore the hierarchy of languages that are accepted by the fundamental machines of computer science, including finite automata and Turing machines. Discussion of the limits to computation will lead to a review of classic problems such as the halting problem, and consideration of recursive functions and predicates. The course concludes with a discussion of cost in space and time and the classification of languages and problems according to their complexity.
An introduction to the techniques for handling pictorial data in computers:
- display devices, lines, filling, antialiasing, and dithering algorithms
- transformation and clipping in two and three dimensions
- three-dimensional visualisation
- modelling with polygons, parametric patches, constructive solid geometry andimplicit surfaces
- colour and light theory, ray tracing, radiosity and other techniques for portraying realism
- texture mapping with two and three dimensional maps, functional textures
- principles of animation from 3Dmodels
An introduction to knowledge representation and problem solving for Artificial Intelligence, focused on the study and design of intelligent agents. An intelligent agent is a system that perceives its environment and takes actions that maximize its chances of success. We will cover these specific topics: robotics, machine learning, artificial neural networks, classification and clustering, stochastic optimisation, genetic algorithms, probabilistic inference, Bayesian networks, hidden Markov models and speech recognition.
A comprehensive introduction to database technology covering both the theoretical and practical aspects of database systems. The theory is based on a thorough understanding of the relational model and how it is implemented in practice. Thereis an emphasis on practical work using the commercial DBMS, Oracle. Topics include relational database theory, data modelling, interactive SQL, SQL with C. SQL with Java, active databases with triggers and PL/SQL, and database management systemimplementation techniques.
This paper covers the development of large-scale, reliable, and maintainable software systems. Topics include software specification; software design; system design; formal specification; prototypes; system maintenance; code reading and browsing; software reuse; project management; human factors; documentation; standards for software and documentation; verification and validation; configuration management; and software evolution. Assignment work consists of a major project completed in teams of four or five people, to develop and implement a useful system, including all relevant documentation.
The fundamental principles and technologies used to build cloud computing platforms and applications hosted in the cloud. Learn how cloud computing works, how it is evolving, and how to best use it. This paper will teach you about the fundamental technologies used by cloud computing providers to build their platforms. You will also learn how to redesign software to use cloud computing.
This course takes a practical, hands on approach to making games. We will design, prototype, implement and polish complete games over the six week course. How do we implement a game in a set timeframe? How do we ensure its quality? What sets successful developers apart from everyone else with a good idea? What do fluffy buns have to do with critiquing a design? Topics covered will include, but are not limited to: programming, project management, game design, visual and audio design and case studies from the industry.
This paper covers advanced network topics, network programming techniques, and protocol development skills that are essential in both industry and applied research. Topics include socket programming over TCP and UDP, network programming over client-server architecture, wireless sensor networks, Internet of things, cyber-physical systems, data center networks, mobile social networks, Li-Fi networks, network-on-chips, vehicular networks, and software-defined networks. The overall aim is to provide students with sufficient background in advanced network theory and to equip students with necessary skills in network programming. This paper will also give students practice in creative thinking about computer networks.
Classical propositional logic, metatheorems, semantics and proof theory; nonmonotonic logic; belief change theory; satisfaction in modal and first-order languages; automated reasoning algorithms and SAT-solvers. The overall aim is to provide students with sufficient background in applied logic to understand at least broadly research in logic-based artificial intelligence as published in, for example, the journal Artificial Intelligence. The emphasis is necessarily on the acquisition of technical skills, and in particular on facility with propositional languages of various sorts (although first-order logic is also treated).
Cryptography theory, including public key systems, and computer security in practice. The overall aim is to provide students with an understanding of the role played by various aspects of cryptography in computer security, and to explore topics such as the modern theoretical bases of cryptography - a central aspect of contemporary computing both in theory and in practice.
Part I (Cryptography)
- History and theoretical background
- Stream ciphers
- Asymmetric and public key encryption schemes
- Knapsacks and attacks
- Complexity and quantum computation
- Quantum algorithms, cryptography and key exchange
Part II (Security)
- Computer security overview
- Kerberos and Microsoft Active Directory
- Block ciphers, HTTPS, TLS/SSL and certificates
- Web single sign on
- Decentralised authorisation and OAuth 2.0
- Homomorphic encryption
Introduction to artificial neural networks (ANNs) and "deep learning". These are computational tools inspired by the brain. They offer new technology, new perspectives on computation, and insights into human cognition. As this topic is new to most, the course is divided into two phases. The first introduces basic material and will be in a lecture driven format. We will cover an introduction to the topic, the practical use and tuning of ANNs, and fundamental algorithms / architectures including (a selection of): 1-layer nets, multi-layer nets, back propagation, Hopfield nets, Boltzmann machines, unsupervised learning, dynamic architectures, reinforcement learning, and "deep learning" (convolutional nets). The second phase covers current research within the field, and will be in a more open, student driven format. The material will be different every year, as it will be driven by your specific interests. Topics which have been frequently covered in the past include: advanced neural network theory, applications to vision and robotics, purpose built hardware ("neurocomputers"), applications within artificial life and software agents, neural/symbolic hybrids, mathem
This paper addresses the question of how language is implemented in the human brain. Answering this question draws on research in several disciplines: neuroscience, psychology, linguistics and computational modelling. The aim of the course is to provide an accessible introduction to the relevant topics for students from each of these disciplines. We will approach the topic by focussing on the interface between language and the sensorimotor system. We consider an observer perceiving a simple concrete event (a man grabbing a cup), and examine what is involved in converting the sensorimotor representation of this event to a linguistic representation - for instance, the English sentence 'The man grabbed a cup'.
There are three parts to the course.
- Part 1: Models of the perception, execution and representation of reach-to-grasp actions. (Visual attention, object classification, visuomotor control, action recognition, working memory representations.)
- Part 2: Models of natural language syntax. (Chomsky's Minimalism, construction grammar, statistical language models.)
- Part 3: Models of language acquisition in infants. (Phonological, lexical and syntactic development.)
Students will learn about the key empirical methods employed in psychology and neuroscience (behavioural experiments, neuroimaging, single-cell recording, lesion studies), some of the influential computational models of sensorimotor cognition and language processing (saliency maps, convolutional networks, motor control, the mirror system, competitive queueing networks, Elman networks, cross-situational word learning) and the basics of two influential syntactic theories (Chomsky's Minimalism and Goldberg's Construction Grammar).
Examines the theory and practice of database design and administration. Also provides a survey of research in the database field, such as distributed database, data mining, time series database, graph database, embedded database, and temporal/geographic databases. This course explores the practical and theoretical concerns of modern approaches to database design and management. The fundamentals of this topic are already covered in COSC344 (Database Theory and Applications), in which students learn about Entity-Relationship modelling, query languages, and client-side application programs. This course instead concentrates on concepts of database resource management, database administration, and the state of the art in the field of database research. Students will learn:
- The principles of installing and managing a database server
- The fundamental theories of relational algebra
- Topics of current research within the field
- A range of database-related applications and technologies
Course Outline (may be subject to change):
The course falls into the following three parts: Part I introduces the data models developed for database design. It covers the hierarchical model, network model, relational model, and the new data models for non-relational databases. Part II provides two practice sessions on database administration. The first session gives a tutorial on installing, configuring, and managing Oracle DBMS relating to every-day tasks that might be encountered by a database administrator. The second session gives a tutorial on installing, configuring and using Cassandra. Part III covers advanced database technologies and the current research in the database field. The topics include distributed databases, data mining, time-series databases, key-value stores, graph databases, and embedded databases.
Concepts, principles, and algorithms in Information Retrieval and text processing. This paper will enhance the understanding of concepts, principles and algorithms in Information Retrieval and bring students to the frontiers of research in the topic. The objectives of the paper are:
- To examine the design and the internals of a search engine;
- To discuss Information Retrieval and Search Engine research issues;
- To build a search engine capable of searching gigabytes of data in a fraction of a second
- To understand how techniques such as compression affect performance;
- To study parsing and lexical analysis as it applies to simple natural language processing
This paper will cover those aspects of Information Retrieval necessary to understand and implement a simple relevance ranking search engine. It will start with parsing and simple natural language processing as it applies to indexing and then move on to the advanced data structures seen in searching the index. Methods of improving the performance of the search engine will be introduced. Such methods include relevance feedback, link-mining and so on. Issues in quantitative analysis of search engines will be covered including the statistics necessary to determine whether one search engine out-performs another. Statistics will also be taught as it applies to Language Modelling and probabilistic relevance ranking. Scalability will also be covered.By the end of the course the student will understand how and why search engines work, will have implemented a simple scalable search engine and will be familiar with current research in the topic.
Enhance the concepts, principles, and algorithms in operating systems with real implementations. The aims of this paper are:
- enhance the understanding of concepts, principles and algorithms in operating systems;
- enrich students' experience in real operating systems; and
- bring students to the frontiers of research in operating systems.
The objectives of the paper are:
- Examine the design and the internals of a real operating system (Linux);
- Discuss the design and research issues in operating systems;
- Program in a real operating system (Linux);
- Understand how an operating system interacts with modern CPU (x86_64);
- Study performance optimization at assembly and compiler level
This paper will cover process management, memory management, I/O systems, and file systems in a real operating system (Linux). It will enable students to write modules working in Linux kernel. Issues such as process management, interrupts and exceptions, device drivers, concurrency, memory management, file systems, interrupt handling, security and performance optimizations will be discussed and experienced through programming. Modern operating systems research such as microkernel will be exposed through reading materials. This paper will also cover Windows Research Kernel as a case study and for comparison purposes in a few lectures.
This paper presents theory and practice of concurrent programming, including locks, transactional memory, and message passing; multicore and distributed systems; and specification and testing of protocols. Concurrent programming is about building programs in which many activities are taking place, and the existence of and collaboration between these activities is essential to the program's design. In distributed systems, like credit card systems and telephone networks, the activities happen on physically separate machines communicating by sending messages over wires or radio channels. In multicore computers, the activities may take place on one or many cores and they may communicate through shared memory. The difficulties and principles are similar.
The first half of the paper is about shared memory concurrency, presenting general concepts in the context of POSIX threads. The second half is about message passing between logicallyseparate processes, using Erlang. There will also be material on specification and verification. Students will learn about designing, implementing, and testing concurrent and distributed programs. Students will learn about deadlock, starvation, livelock, races, and such hazards, about why "let it crash" is a good approach to errors, about the difference between task parallelism and data parallelism, and some concurrency design patterns.
This course examines a range of topics in the related fields of image processing, computer vision, and computer graphics. These three fields all relate to images, and the processing and construction of images in computer programs. The topics covered will change from year to year, and will cover a mix of vision, graphics, and image processing. Possible topics include animation, motion tracking, image mosaicing, 3D reconstruction, content-based image retrieval, and procedural modelling. Examples will be drawn from the recent literature, current research activities in the department, and practical applications.
COSC470 Special Topic S1, S2
This paper is by special arrangement.
This is typically a one-off paper that is offered because of staff or student interest in a topic.
This is a full year project (worth 40 points), generally individual, carried out under the supervision of one or more staff members. A list of project proposals is provided at the preliminary lecture, but it is possible to arrange projects of your own choice if a staff member is available and willing to act as supervisor. Assessment details can be tailored to individual projects, but will involve some form of presentation and a significant written component. For MSc students the project may well lead to thesis work in the following year. Regular meetings with the supervisor are an integral part of each research project.
This is a full year research project (worth 40 points), generally individual, carried out under the supervision of one or more staff members. A list of project proposals is provided at the preliminary lecture, but it is possible to arrange projects of your own choice if a staff member is available and willing to act as supervisor. Assessment is based on a mid year presentation, interim report and and final report at year's end. For Honours students the project may lead to thesis work if they decide to continue with further study in the following year. Regular meetings with the supervisor are an integral part of each research project.