Contents

My school curriculum

Contents

This page describes the courses I took during my studies. The description is not mine, it’s taken from refens
If there is a problem with it, feel free to contact me, I’ll remove this page.

Ensimag 1st year

Introduction to imperative programming:

In this course, we introduce the principles of imperative programming. The language Python is used for all examples in the course, and for the exercises

  • modular programming, exceptions, arrays, pointers, recursion.
  • elementary algorithms: arithmetics, sorts.
  • data structures: stacks, queues, linked lists.
  • introduction to reasoning with assertions (loop invariants).
  • introduction to testing and debugging.

Unix: Introduction and shell programming:

The goal of this module is to guide the students through their first contact with their working environment in the Ensimag. We insist on the Unix operating system which will be the main one used through their studies in the school

  • An introduction, in which students will learn the basics of Unix and get familiar with the Ensimag’s systems for day-to-day use
  • A second part where they will lear how to use the Unix shell to write programs, and learn how to use Git for version-control.

Communication networks & Security:

This course presents an introduction to the arena of telecommunication networks. The objective is to get students familiar with network concepts and key players of this business. It also teaches a practical use of basic Internet observation tools as well as the mechanisms Internet & telecom services (e-mail, www, voice calls…).

  • General networking concepts : graphs, services, key players, and historical view.
  • Network architecture, protocols : basic functions (flow control, addressing, etc) and layering.
  • Network applications: WWW, DNS, e-mail…
  • Security for Internet services : secure connections, authentication, certificates.
  • Transmission and coding of information over radio and fixed links.

Analysis for engineers:

This course introduces mathematical tools in analysis that are widely used in signal processing or in scientific computing. Laboratory works on computers will illustrate some application of these tools in signal linear filtering or in image compression.

  • Lebesgue integral
  • Fourier transform
  • Metric and normed linear spaces, Banach spaces
  • Differential calculus in Banach spaces

Formal language theory 1:

The formal language theory course develops mathematical concepts and techniques that are foundational to computer science. This course introduces the fundamental definitions and methods associated with artificial languages, typically programming languages. It is a prerequisite to most of the computer science courses that are given during the following semesters at Ensimag.

  • Introduction to formal language theory
  • Regular languages: finite state automata, algorithms on automata, closure properties for regular languages, Kleene lemma
  • Handling formal grammars: Chomsky hierarchy, derivation trees, ambiguity, proofs on grammars

Language theory 2:

Introduction to technics for language description and analysis. Application to programming languages. Basic notions of computability theory (algorithms, computable functions, undecidability).

  • Context-free languages
  • Programming language descriptions and analysis
  • Computability theory

Applied Probability:

This course is intended to provide the main tools for modelling random variables as well as the basic techniques of probability theory and simulation of random variables. Several exercises and examples will illustrate the theory.

  • Conditional probability and Bayes formula.
  • Independence.
  • Random variables.
  • Expectation and Variance.
  • Decision theory.

Information theory:

Provide the theoretical fundamentals for the quantitative measurement of information (what is a bit of information?), Representation, storage, transmission, protection and information hiding. Application to lossless compression, error correcting codes, transmission security and content security (steganography).

  • Uncertainty and information. Entropies . The Shannon entropy and its properties. Entropy and information transfer.
  • Structure of a communication chain. Information and compression. Channel capacity and channel coding.
  • Coding of discrete sources. Asymptotic equipartition. Theoretical optimal codes . Construction of optimal codes.
  • Transmit and store information. Discrete channel (binary symmetric channel). Channel coding and second Shannon theorem.
  • Error correcting codes. Repetition and second Shannon theorem. Error detection codes. Error correcting codes. Linear block codes. Hamming distance and Euclidean distance. Maximum likelihood decoding.
  • Some applications: steganography, information leakage and security.

Economy:

This course proposes the basic tools for understanding the main problems of an economy considered from a macroeconomic point of view.

Business management and communication:

Supply to the students elements allowing them of:

  • Understand the environment of companies and the constraints;
  • Acquire the basic notions indispensable to the understanding of the management of company (marketing, accounting and financial microeconomic, human, legal information system, resources;
  • Understand the interactions between the main functions of the company.
    Supply to the students the necessary tools:
  • for a written and oral professional report
  • for groupwork

Algorithms and data structures:

This lecture completes first semester teaching in programming and algorithm design. It is focused on analysis of algorithms and advanced data structures and algorithms. Practical work is used to implement concepts studied during lectures, but also possibly to practice new concepts.

  • Analysis of algorithms: best and worst case, average analysis and amortized cost.
  • Data structures: Trees, Dictionnaries, Priority queues, Graphs
  • Recursive programming, divide and conquer.

Software project:

  • Learning the stages from the source code to the executable
  • Learning the C language
  • Using intensively pointers
  • Designing and using complex data structures
  • Introducing software engineering

Introduction to numerical methods:

The aim of this course is to introduce basic numerical methods for solving problems arising from physical, mathematical or computer modellings. The mathematical theory of these methods will be associated with practical implementations in Scilab of real life applications.

  • Solutions of linear systems (direct and iterative methods, eigenvalue problems).
  • Solutions of nonlinear equations: Newton’s method.
  • Data interpolation, numerical intégration.
  • Non-linear equations: Newton’s method
  • Numerical schemas fo ordinary differential equations: Runge-Kutta methods

Architecture: Digital circuits and computer architecture elements:

This course aims at giving the bases required for the understanding of how a computer is able to performs program interpretation. In order to do so, it relies on the explanation of digital circuit behavior, that allows firstly the actual implementation of boolean logic and memory elements, and secondly defines the way to build complex functions using elementary functions. These concepts are developed in order to analyse and design simple processor behavior, and instruction set interpretation. This course is by nature practical, and contains labs.

Low-level software and hardware

Filling the gap between high level programming and computer architecture, it provides students with a synthesis of these fields and a global understanding of how computers work. The course is organized around the learning of assembly languages (RISC and CISC).

Statistical principles and methods

The aim of statistics is to provide useful information from random data. This course presents the basic principles of statistical data analysis (description, estimation, tests), and the most usual statistical methods. The focus of the course is application more than theory. The concepts introduced are illustrated with R.

  • Descriptive statistics. Statistical plots. Statistical indicators.
  • Point estimation. Definition and quality of an estimator. Method of moments. Maximum likelihood. 3. Confidence intervals.
  • Testing statistical hypotheses. The decision problem. One-sample parametric tests. Tests on the parameters of a normal distribution, on a proportion. Chi-squared test.
  • Linear regression Simple linear regression model. Least squares estimators.

Operations research

Introduction to Operations Research

  • Graph Theory and applications : connectivity, matching, stability, colouring, trees and arborescences, shortest path, scheduling.
  • Linear Programming and applications : modelling, the simplex method, duality, sensibility analysis, Zero-sum games.
  • Notions of complexity theory.

Sports

English

Spanish

Ensimag 2nd year

Principles of database management systemes

The theoretic part covers the following topics: DBMS functionalities, overview of the most common data models, the relational approach and database design. For the relational model we study the normalization theory, relational algebra and the Structured Query Language (SQL2) for data definition and manipulation.

Concerning database design we worked out the entity-relationship model and introduced rules to translate an E/R schema into a relational one.

Object-Oriented Programming

Introducing the main concepts of Object-Oriented Programming (OOP), applied with the Java programming langage.

  • Classes and objects, notion of encapsulation
  • Inheritance and polymorphism, abstraction, interfaces
  • Java Collections: abstract data types and their implantations
  • Java exceptions
  • Notions of UML and object-oriented paradigm

Database Project

In this project, students will have to buildan application using a database. They will analyse the specific needs, build an Entity/Relationship schema, translate it into relational schema, implant this one in the Oracle DBMS. Functionalities of the application will also be analysed and translated into transactions and queries. Those ones will be tested on Oracle and then implemented in Java using the JDBC API.

Algorithms and Discrete Optimization

In this course, we learn object oriented programming and study how to provide solutions to complex algorithmic problems. The course covers an introduction to OO programming, the design of algorithms driven by the analysis of their cost, and their implementation with an object oriented language. It is illustrated by the study of optimization problems using different techniques such as branch and bound, dynamic programming. Concepts are applied with practical training.

  • Basis of OOP: concept of object, writing of classes and using of objects.
  • Recall of: cost and analysis of algorithms (time and memory cost; worst, average and amortized case analysis).
  • Abstract date type for sets of objects (containers and iterators): study and using via the notion of interface and a library of components.
  • Graphs – recall of the representations and OO implementation.
  • Modelling of some optimization problems with graph and shortest path.
  • Polymorphism, inheritance.
  • Recursive programming, Branch & Bound.
  • Design of complex data structures – cost and OO design
  • The language Java will be used. Two practical trainings (free time, by pairs) consist in programming some algorithms studied in class, with an OO language.

Operating systems and concurrent programming

This course aims at understanding the various components of an operating system. Concurrency playing a major role in most of these components, this course also contains an important part on concurrent programming.

  • Functions and design of operating systems
  • Processes management, lightweight process, low-level synchronisation
  • File systems
  • Standard communication mechanisms
  • Virtual memory, memory hierarchy, mapped files
  • Classical schemes of synchronisation
  • Introduction to distributed applications

Operating Systems Development Project - Fundamentals

  1. Design of IO driver in C => students will use pointers to write directly to the video memory of the PC
  2. Time-sharing using the PC hardware clock => this implies writing an interrupt handler to manage the hardware clock (with a very small part in 32 bits x86 assembly)
  3. Writing a simple preemptive scheduler => this is the main part of the projet: students will first use a cooperative scheduler to share time between processes, then they will connect the scheduling fonction to the hardware clock handler in order to implement preemptive scheduling.

Logic bases for computer science

The aim of this class is to introduce students to several fundamental notions of Logic that are frequently used in computer science. Among other things, students will discover the formal notions of proofs and models, as well as some links between the expressivity of a logic and its decidability

  • Normalization
  • Refutational inference systems
  • Compactness theorem
  • First-order logic
  • Herbrand’s theorem
  • Skolemization
  • The Resolution calculus
  • Logic programming

Principles of Internet

Learn basic concepts of computer networking and acquire practical notions of protocol implementations.

The purpose of this lecture is to give you a sound understanding of computer networking, with a strong emphasis on TCP/IP and the Internet model. Both theoretical and practical knowledge should be acquired. Training classes parallel to the course will give you an opportunity of learning implementation details and you will acquire practical knowledge through networking labs.

Software engineering project

The objective of this project is to illustrate some aspects of software engineering through the development of a large application. The main points are: compliance with requirements, software design, validation and verification techniques, quality process. The software, which is to be developed in Java, is a compiler for a subset of an advanced language. This theme has been chosen firstly because the requirements can be understood quickly, and secondly because it allows a deeper understanding of the underlying concepts of programming languages.

Financial diagnostic

  • The company: cycles, organization, information systems
  • Financial diagnostic: income statement intermediate balances, analysis of financial structure (source of funding, capacity of self-financing), and of financial balance
  • Cost calculation, direct costing and break-even point

Software analysis design

The aim of this course is to present techniques for software object analysis and design. The presented approaches rely on the UML notation, which allows the developer to elaborate object models with various diagrams. This course will be illustrated by practice exercises and case studies.

  • UML Diagrams
  • Requirement Analysis and Expression
  • Object Modeling
  • Design
  • Design patterns

Construction of WEB applications

On the client side (frontend), we will discuss the languages ??HTML, CSS, Javascript and the ReactNative framework.

On the server side (backend), we discuss the MVC architecture in a node application with the express framework.

On the development side, the implementation of integration and continuous deployment techniques using gitlab.

  • Basic web concepts (HTTP, HTML, CSS)
  • Client side scripting language (javascript)
  • Asynchronous programming via event management and Ajax
  • Authentication (session, JWT)
  • MVC architecture with Node express
  • Continuous integration (code quality, tests)
  • Continuous deployment (deployment in pages, in the cloud, generation of applications)

Probability for computer science

Random processes are basic tools for modeling communication networks and computer systems for their design. They allow on one hand to understand the phenomena of heavy/low traffic and on the other hand to develop management policies (protocols, allocation, optimization…) The purpose of this course is to lead to:

  • Know how to model a computer system using Markov processes;
  • Be able to analyze the behavior of random processes using formal methods or simulations;
  • Be able to analyze the behavior of classic protocols of communication

Code Analysis for Safety and Security

This course is an introduction to the foundations of semantics and program analysis. It presents the basis necessary to specify and design reliable applications, as well as to build and use analysis and verification tools

  • Operational semantics of programming languages.
  • Weakest precondition and program proof.
  • Data-flow analysis.
  • Static analysis and abstract interpretation.
  • Applications to compilers and to software safety and security.
  • Practical works with two industrial tools.

Introduction to research

Students work on a research subject for half a day 12 weeks in a lab in Grenoble

Advanced algorithms approximation parallel and randomized algorithms - Complexity

This course presents the complexity theory (lower bounds, complexity classes and reduction, NP classification) and presents the main techniques to design efficient algorithms: parallel, randomized and approximation algorithms, heuristics. The course is coupled to a practical project on the programming of a multi-players game in rust.

  1. Machine models, Problem Complexity. Heuristics (e.g. alpha-beta)
  2. Complexity; lower bounds; reduction.
  3. Complexity classes P, NP, NP-complete.
  4. Approximation algorithms. APX classes.
  5. Randomized Algorithms. PP classes.
  6. Parallel Algorithms. C classes.
  7. Interactive algorithms and proofs (IP). Polynomial hierarchy

Statistical Analysis and Document Mining

The aim of this course is to present statistical approaches for analysing multivariate data. The information age has resulted in masses of multivariate data in many different fields: finance, marketing, economy, biology, environmental sciences,…The theoretical and practical aspects of multivariate data analysis are given equal importance. This balance is achieved through practicals involving actual data analysis using the R software.

  1. Multiple linear regression. Least squares, Gaussian linear model, test of linear hypotheses, one-way analysis of variance.
  2. Principal Components Analysis (PCA).
  3. Classification, linear discriminant analysis, perceptron, Naive Bayes
  4. Text mining, numeric representation of texts, connexion with graph clustering.

Sports

English

Spanish

Ensimag 3rd year

Access to information: from the web of data to the semantic web

The objective of this course is to present the concepts, methods and algorithms used in information access systems on the web. With the massive production of data on the Web, information retrieval, once seen as a specialty field at the intersection of documentary techniques and computer science, has become one of the major technologies of the 21st century. This course is structured in three parts:

  • information retrieval on the web: understanding the concepts underlying textual search engines on the Internet
  • graph query language: learn the theoretical tools and algorithms for querying tree-structured data (such as web pages)
  • semantic web

Distributed Algorithms

The course covers the fundamental algorithmic aspects of distributed systems. The basic notions of distributed algorithms will be presented: machine failures, synchronous vs. asynchronous communications, fault detectors, etc. These basic notions will be illustrated through the study of some fundamental algorithms that are used in most distributed systems (message broadcasting, consensus, etc.).

Advanced cloud architecture

The goal of this course is to study in depth the use and design of large-scale cloud architectures. It consists of 4 parts:

  • use of a cloud solution, study of a deployment,
  • performance and energy consumption criteria and metrics,
  • design elements of a cloud architecture: virtualization, containers,
  • security in the cloud: isolation, authentication.
    Several cloud architecture solutions will also be presented and studied.

Open Data Challenge

The project will begin with a short introduction to interactive data visualization. Then, students will work in teams on a visualization project. The project will proceed as follows:
First, each team will choose one or more datasets from those available on institutional open data platforms.
The teams will propose a visualization project for these datasets, which will have to be validated by the teachers, aimed at highlighting an original aspect of the datasets.
Teams will then implement a data visualization interface in the language of their choice (which may involve setting up a complete data processing chain to make the data suitable for visualization).
The project will culminate in a demonstration, which should show a working prototype.

Technology conferences

The purpose of these presentations is to bring in industrial speakers who will develop a technical subject directly related to their professional activity. The objective of each conference is not to advertise a particular company, but rather to provide a specialist perspective on a field directly related to one of the topics covered in the Information Systems Engineering option.

Model engineering

Model Driven Engineering (or MDE) is a development approach that conceives the entire software development cycle as a process of production, iterative refinement and model integration. On this basis, the development process is seen as a progressive transformation from a PIM (Platform Independent Model), which specifies the solution of a system independently of programming technologies, to a PSM (Platform Specific Model) which describes how this solution can be implemented in a particular technology. The objective of this course is to present various complementary approaches for building models and to present how to transform these models into technical platforms or code. The theoretical concepts of this course are illustrated by practice through various IDM platforms: EMF, TopCased, Acceleo, Ecore tools…

Artificial intelligence

  • Acquire basic skills in machine learning and artificial intelligence.
  • Acquire sufficient general knowledge in data science to be able to interact with specialists in statistical learning theory or artificial intelligence.
  • Know one or two specific fields of Artificial Intelligence

Models and languages for model checking

This course presents methods and tools for the reliable design of systems consisting of agents (or processes) running in parallel in an asynchronous manner and possibly subject to real-time constraints. These methods and tools address the needs of telecoms (telecommunication protocols), software (distributed algorithms, cloud computing, …), embedded systems and hardware (multi-processor architectures, arbitration protocols, cache coherence protocols, asynchronous circuits, GALS architectures, …). The methods are based on a formal description of the system in an appropriate language, which can be automatically validated by tools implementing verification techniques such as model checking or equivalence checking.

IOT project

Open source Internet of Things project.
The objectives of this course/project are as follows:

  • Design the specifications of a finished product in response to a need (e.g. environmental issues)
  • Plan the realization of the finished product
  • Critique/learn from the experience
  • Present the finished product to non-specialists

Distributed systems

Study the fundamental principles used in distributed systems. Emphasis will be placed on scaling mechanisms that address some of the main challenges: scheduling, communications, deployment, fault tolerance, programming
Distributed systems will be discussed from the perspective of scaling, including workflight load balancing mechanisms; performance metrics; simple modeling such as Amdahl’s law; fault tolerance; discrete event simulation; computing and communications middleware; distributed file systems; distributed objects; distributed application deployment.

Security of information systems

Daily server management: log files, permissions, common security flaws, software updates, service management, security mailing lists (CERT), symlinks attack, race condition, buffer overflow, format string, network security
Denial of Service attacks, spoofing. Types of intrusions, firewalls.
Network segmentation (dual-host, bastion server, DMZ), NAT (isolation), VPN
Prevention: system security audit, securing services, filtering, building a bastion host of a bastion host
Viruses, worms, Trojans

Software systems testing

  • Test
  • Verification and validation
  • Testing during the life cycle.
  • Structural testing of software.
  • Testing from specifications: partitioning, combinatorics.
  • Model-based testing methods, in particular automata.
  • Analysis of the notions of coverage, mutational testing.
  • Focus on important testing domains:
    • performance testing and load testing
    • interface testing
    • security testing.

Law and computer science

The objective of this course is to give a practical overview of the legal issues raised by computer science, particularly during the creation and use of software, as well as the answers that can be given.
The goal is to allow the student to acquire certain reflexes and to adopt good practices with regard to intellectual property law and the various regulations related to the development of a computer project (protection of personal data, computer piracy, etc.).

English