Université de Pau et des Pays de l'Adour

Département informatique

Licence informatique et Master informatique Technologies de l'Internet

Dernière mise à jour : 12 mai 2019

Tous les cours et ressources mis ici en ligne n’ont pas vocation à être utilisés à des fins de formation et/ou de conseil, dans un cadre commercial ou non, sans l’autorisation explicite de son auteur. Vous êtes donc invités à télécharger et utiliser le matériel pédagogique mis en ligne qu’à des fins personnelles. Dans le cas contraire, merci de me signaler les usages spécifiques que vous envisageriez.

Accès direct aux cours et travaux pratiques

Informations sur les configurations ici

Code accès aux salles en libre service

Quelques adresses utiles…

Licence informatique
UE Introduction aux systèmes d'exploitation (Semestre 1)

Syllabus

Cette UE s'intéresse aux bases de la manipulation des systèmes d’exploitation des ordinateurs. L’objectif est une initiation à la manipulation des systèmes d’exploitation des ordinateurs avec des notions de programmation « shell » sous le système d’exploitation UNIX principalement. Consultez l'emploi du temps de l'UE dans une nouvelle page
Cours TDs TPs Total étudiant ECTS
12h 0h 27h 39h 4

Contrôles sur table et examens des années précédentes

Cette UE est évaluée par un système de contrôle continu incluant des notes de TPs ainsi qu'un contrôle sur table à la fin du cours. Tout TP non rendu ou toute absence au contrôle donne lieu à la note zéro. Toutefois, un examen de rattrapage est organisé en fin d'année universitaire si la moyenne générale est inférieure à 10.

Cours (ici)

Travaux pratiques sous le contrôle de Mr. Jobard (ici)

Licence informatique
UE Technologie Orientée Objet (Semestre 5)

Syllabus

Cette UE donne les connaissances complètes pour la conception orientée objet des logiciels professionnels. Le premier objectif est la maîtrise complète des concepts de la programmation par objets via l'étude des langages C++ et surtout Java. Le second objectif est de fournir aux étudiants une base de connaissances large et solide pour réaliser les travaux pratiques des autres UE de la licence informatique. En outre, la connaissance de la programmation par objets et celle des langages C++ et Java sont essentielles pour aborder un master informatique. Consultez l'emploi du temps de l'UE dans une nouvelle page
Cours TDs TPs Total étudiant ECTS
27h 13.5h 18h 58.5h 6

Examens des années précédentes

Cette UE est évaluée par un examen comptant pour 70% ainsi qu'un projet et une note d'appréciation du travail en TP comptant pour 30%.

Cours

Travaux pratiques

Projet 2019-2020 (commun avec l'UE Conception des Applications Internet)

La technologie WebSockets est une technologie idéale pour faire travailler de façon collaborative un programme Java avec un programme JavaScript et vice-versa. Des archétypes de collaboration sont expliqués et disponibles ici… Un besoin de collaboration est souvent le fait que JavaScript est contraint par le browser par des obligations de sécurité, CORS par exemple.

Le projet consiste à fabriquer une application de Web scraping quant à récupérer des informations sur des produits de consommation courante trouvés chez Carrefour mais aussi Auchan, Intermarché, Amazon, LIDL, Leclerc… A titre d'illustration, l'application Carrefour_Items.Java.zip interroge l'API Web Services du groupe Carrefour sur des produits de consommation courante puis cherche à trouver des informations complémentaires comme des prix, des images des produits sur le Web soit de façon légale (par exemple, ici) ou soit de façon plus « sauvage ». Pour réaliser l'application demandée, vous devez :

  1. Trouver des sites Web capables de vous fournir des données de produits de consommation courante (via une API Web Services) en format JSON idéalement. Des sites Web généralistes peuvent aider à trouver ces APIs (programmableweb.com ou encore rapidapi.com). Ainsi, par exemple, datagram.ai semble être une de ces APIs testable ici. Si les APIs retournent des données « décevantes », il y a lieu de voir comment récupérer des données pertinentes et riches de façon plus « sauvage ».
  2. Interroger ce site Web en Java et procéder, le cas échéant, à des recherches voire des transformations sur les données capturées. Le traitement de données JSON en Java est expliqué ici ainsi que la manière de requêter des sites Web.
  3. Communiquer tout ou partie des données à JavaScript grâce à la technologie WebSockets en vue, de façon minimale, à faire des présentations de ces données dans le browser. Par exemple, on veut afficher dans le browser l'image graphique du produit ou une image montrant sa composition dans le cadre d'un produit alimentaire. Le cas échéant, dans l'application à rendre, JavaScript peut être amené à chercher des informations supplémentaires sur le Web, informations de nature plus « multimédia » pour les présentations.

Chaque binôme doit proposer et traiter des sites Web différents (un point de contrôle aura lieu avec l'enseignant assez tôt au début du projet). En d'autres termes, il faut vous concerter de sorte que les sites Web « scrappés » choisis dans les projets soient différents d'un binôme à l'autre ; c'est une garantie que chaque binôme n'est pas en mesure de copier le travail de l'autre.

Vous avez le droit d'adapter le sujet du projet en choisissant la manière de partager le travail entre Java et JavaScript mais il reste nécessaire de bien préciser « qui fait quoi ? » dans l'application (sous NetBeans) que vous avez à rendre.

Modalités de contrôle du projet

Le travail est fait en binôme (monôme toutefois accepté). Il y a un rapport à rédiger de moins de 10 pages qui donne les sites Web source et explique les (grands) choix faits dans l'application, les données que l'on peut espérer récupérer ainsi que leur pertinence et qualité en général. Il faut aussi déposer, au format ZIP uniquement, le code source de votre projet au plus tard le dernier jour de travail avant les vacances de Noël (note zéro si non reçu avant minuit). Dépôt ici : depot.univ-pau.fr. Merci de signaler par un e-mail à l'enseignant le dépôt (bien mentionner aussi les membres du binôme dans l'e-mail).
Licence informatique
UE Conception des Applications Internet (Semestre 5)

Syllabus

Cette UE s'intéresse à la programmation avancée, côté client, des interfaces homme-machine Web avec les langages JavaScript et TypeScript. La programmation côté serveur est quant à elle traitée plus succinctement avec la plateforme Node.js. L'idée est d'étudier une approche orientée objet propre (héritage, polymorphisme, encapsulation/visibilité…) de programmation de manière à créer des architectures évolutives en symbiose avec les toutes dernières technologies Web : WebRTC, WebSockets, Web Workers… La réutilisation et le packaging de bibliothèques JavaScript est un point clef abordé. L'étude de classes et d'interfaces pour des sites Web multimédia hautement interactifs est aussi abordée : HTMLCanvasElement, modèle événementiel (CustomEvent, Promise)… Consultez l'emploi du temps de l'UE dans une nouvelle page
Cours TDs TPs Total étudiant ECTS
15h 7.5h 16.5h 39h 4

Examens des années précédentes

Cette UE est évaluée par un examen comptant pour 70% ainsi qu'un projet et une note d'appréciation du travail en TP comptant pour 30%.

Cours

Travaux pratiques

Projet 2019-2020 (commun avec l'UE Technologie Orientée Objet)

Master Technologies de l'Internet
Composants et Services Logiciels (Semestre 3)

Syllabus

Cette UE est à la frontière du génie logiciel et des systèmes distribués. Elle vise à étendre la problématique de la programmation et de la modélisation orientées objet aux paradigmes de « composant » et « service ». Le programme abordé traite des notions de Component-Based Development et Service Computing (concepts, caractérisation, panorama des modèles de composants technologiques, différence/similitude composant/service…). Les technologies Enterprise JavaBeans™ (EJB) et em>Web Services servent d'illustrations. Consultez l'emploi du temps de l'UE dans une nouvelle page
Cours TDs TPs Total étudiant ECTS
18h 9h 9h 36h 4

Examens des années précédentes

Cette UE est évaluée par un examen comptant pour 70% ainsi qu'un projet et une note d'appréciation du travail en TP comptant pour 30%.

Cours

Travaux pratiques

Java annotations

Work to do #1
Ecrire un ensemble d'annotations Java permettant de documenter du code avec la date de son écriture (puis ses dates de modifications), les auteurs des modifications, la description succincte de la dernière maintenance faite, la nature de cette dernière maintenance entre deux valeurs possibles (réparation et évolution fonctionnelle), l'état de la version courante entre quatre valeurs possibles (stable, unstable, unchecked et unknown). Prévoir des valeurs par défaut pour toutes les propriétés de toutes les annotations. Voici ce que cela pourrait donner à l'usage :
@Modifications(dates = {"19/06/2008","22/09/2008"}, authors = {"FB","FB"}, description = "NullPointerException correction", nature = Nature.Reparation, state = State.Stable)
public class My_class { …
Procéder à des vérifications runtime* de ce code, comme par exemple « le nombre de dates des modifications est égal au nombre d'auteurs ayant fait ces modifications » ou encore « les dates des modifications sont bien rangées par ordre chronologique ».
*Logiquement ces vérifications n'ont pas lieu d'être au run-time ; l'exercice n'est donc qu'à titre pédagogique.

Enterprise JavaBeans™ (EJB)

Work to do #1
A simple Java EE application (further details on this case study may be found here) is based on a Stateless Session Bean named Customer_management interacting with an Entity Bean named Customer.
EJB module:
  • Java EE 6 (old J2EE 1.4 version: )
Cient application:
  • Java EE 6 (old J2EE 1.4 version: )
Java DB database:
  • SQL script
The proposed work consists in extending this simple Java EE application so that it supports CRUD (-Create, Read, Update, Delete-) functions for all existing entity beans. Only test this application for the Logical_card table in the database (please keep the database schema “as is”).
Work to do #2
Given Asterix and Obelix as two collaborative Session Beans. Asterix has a business method named strength, which itself calls a business method offered by Obelix also named strength.
  1. Implement Asterix and Obelix in the same EJB module as follows:
    • Both are Stateless Session Beans (use the following annotation value for Obelix: mappedName = "ejb/Obelix")
    • Dependency injection in Asterix to Obelix as follows: @javax.ejb.EJB(mappedName = "ejb/Obelix") Obelix o = null;
    • Call of Obelix strength in Asterix strength: o.strength();
  2. Implement Asterix and Obelix in two different EJB modules. Change the code in both Asterix and Obelix so that strength in Asterix is still able to call strength in Obelix.
Solution: Asterix , Obelix and Test_Asterix_Obelix .
Work to do #3
First, construct an EJB application from the code discussed in this document . Try several code modifications in order to answer to the raised questions in the document.
Work to do #4
First, construct an EJB application from the code discussed in this document . Try several code modifications in order to answer to the raised questions in the document.
Work to do #5
First, construct an EJB application from the code discussed in this document . Try several code modifications in order to answer to the raised questions in the document.
Work to do #6
First, construct an EJB application from the code discussed in this document . Try several code modifications in order to answer to the raised questions in the document.
Work to do #7
The New York City Penitentiary (NYCP) case study results from a long interview between the NYCP director and a software engineer. From this discussion, a UML Use Case Diagram including five concrete business services and a UML Class Diagram are provided. Beyond, several software artifacts are produced (e.g., a Java DB database script, static Web pages as requirements' illustration…). Complete the current Web application with two Web pages: Add_offense.xhtml and Offenses.xhtml. Add_offense.xhtml has to be attainable from All_prisoners.xhtml by means of a Add offense hyperlink. Add_offense.xhtml aims at adding a link to the Prisoner (participant role) - Criminal case (offense role) association. Once done, Offenses.xhtml displays all of the criminal cases in which a prisoner is involved, including, of course, the very last (just added) offense. Behavior of Add_offense.xhtml and Offenses.xhtml has to be similar to the existing Add_participant.xhtml and Participants.xhtml Web pages.
Work to do #8
Being inspired by the New York City Penitentiary (NYCP) case study that uses EJB + JavaServer Faces, implement a CRUD (-Create, Read, Update, Delete-) application for a (requirements doc. in French) Computer-Integrated Manufacturing case study (Java DB script ).
Work to do #9
The Railcar control system application is a Java EE application. At this time, the client program is a simplified Java SE program that graphically displays the status of the railcars and the terminals. For that, the client program continuously requests the Java EE (server-side) program to ask for the status of railcars and the terminals. However, two Web services offered by the server-side program are not yet used:
@javax.jws.WebService(serviceName = "Railcar_new_destination")
@javax.ejb.Stateless()
public class Railcar_new_destination {
    @javax.ejb.EJB
    private Control_center_local _control_center = null;

    @javax.jws.WebMethod(operationName = "railcar_new_destination")
    @javax.jws.Oneway
    public void railcar_new_destination(@javax.jws.WebParam(name = "railcar") String railcar, @javax.jws.WebParam(name = "terminal") String terminal) {
        assert (_control_center != null);
        _control_center.railcar_new_destination(railcar, terminal);
    }
}

@javax.jws.WebService(serviceName = "Terminal_new_destination"
@javax.ejb.Stateless()
public class Terminal_new_destination {
    @javax.ejb.EJB
    private Control_center_local _control_center = null;

    @javax.jws.WebMethod(operationName = "terminal_new_destination")
    @javax.jws.Oneway
    public void terminal_new_destination(@javax.jws.WebParam(name = "terminal") String terminal, @javax.jws.WebParam(name = "another_terminal") String another_terminal) {
        assert (_control_center != null);
        _control_center.terminal_new_destination(terminal, another_terminal);
    }
}
Railcar_new_destination means that a new destination has been requested in a given railcar to stop at a given terminal. Terminal_new_destination means that a new destination has been requested in a given terminal to stop at another given terminal.
The project consists in building an Android client program (user interface) that is able to:
  • call on demand the above two Web services with parameters entered by the Android smartphone's user. These two Web services are probably not rich enough at this time in terms of parameters and returned values. In other words, adaptations/extensions are required.
  • get at initialization time, the entrance terminals (their names especially). On purpose, an additional dedicated Web service must be developed.
  • get (in a cyclic way, through a timer for instance) the status (on the transportation infrastructure) of the Android smartphone's user ("Where am I?", e.g., "T1", "R1 between T1 and T2", etc.) and refresh the user interface accordingly.
Note: at this time, identities of Web services requesters are not managed. Other adaptations/extensions are also required so that the existing server-side program manages passengers in a consistent way. Otherwise, the exposure of the Java EE program, in terms of architecture especially, is probably unfit for calls from an Android smartphone. More precisely, it is imposed that all Web services run in a RESTful mode and carried data are based on JSON.

Java Message Service (JMS)

Work to do #1
Soit l'application JMS (ZIP) composée d'un émetteur (classe JMS_temperature_sensor). Celui-ci émet périodiquement une température à destination d’un récepteur (classe JMS_programmable_thermostat). Etudier la mise en œuvre du multithreading dans le producteur. Qu’en est-il si le mécanisme de simulation de l’évolution de la température est réarmé (supprimer /* et */ autour de implements Runnable) ? Proposez et implémentez des modifications légères s’appuyant sur le timer pour faire évoluer la température. Etudier ensuite le consommateur. En quoi le mécanisme de consommation actuel est limité ? En d’autres termes, est-on toujours sûr de lire la totalité des messages arrivés ? Proposer et implémenter un mécanisme simple qui arrête le consommateur seulement après que tous les messages soient consommés. Indication : concept de message « vide », voir méthode public Message createMessage() throws JMSException de Session.
Work to do #2
Pourquoi dans son fonctionnement actuel, l'application JMS_banking_system (ZIP) fait que le message émis n’est pas reçu ? Faire une légère modif. pour supprimer le problème et déterminer en quoi le mode diffuseur/abonné se différencie foncièrement du mode point-à-point ?
Work to do #3
L'application JMS_banking_system_plus (ZIP) bien que semblable à l'application JMS_banking_system de l'exercice précédent fait partager la même connexion JMS et la même destination (Topic en l’occurrence) au producteur et au consommateur. Pourquoi ? Faire un programme simple ou modifier l’existant de manière à remplacer la classe TopicRequestor par une création explicite de TemporaryTopic pour simuler une communication de type requête/réponse.

Web Services

Work to do #1
En s'inspirant du mécanisme d'annuaire (hyper-lien Annuaire sur la page d’accueil de l’UPPA) et du projet NetBeans Annuaire_UPPA basé sur JSP (ZIP), implanter un Web Service « avancé » de recherche d’informations sur le personnel de l’UPPA. Permettre en particulier une recherche multi-critères pour formuler des recherches du type : quelles sont les personnes dont le nom de famille contient « arbie » et qui sont « professeur des universités » ?

Projet 2019-2020

Le groupe de distribution Carrefour, face à la concurrence montante des sociétés d'e-commerce comme Amazon qui attaque le marché des produits de grande consommation (grande distribution ou retail en anglais), se doit de devenir une « entreprise digitale » en comblant son retard en informatique. Pour cela, les API Items et Store permettent à des applications tiers d'accéder, respectivement, aux produits et magasins de Carrefour, ainsi que tout un ensemble de données associées.

Tout produit commercialisé a un code barre ou GTIN (exemple 3560070478781) qui est la donnée centrale dans l'API Items. Toutefois, l'API officielle Items ne retourne pas des données intéressantes comme les images (JPG, PNG…) du produit (dont celle donnant les ingrédients entrant dans sa composition), son prix, etc. Les requêtes https://www.carrefour.fr/s?q=3560070478781 ou https://www.carrefour.fr/s?q=Nutella bien qu'elle fonctionnent dans un browser échoue a priori en mode « programme » car Carrefour détecte un bot.

Le projet proposé, dit de Web scraping, consiste à constituer une base de données (SQL ou NoSQL) dans laquelle figurent des images d'un produit « aspirées » sur le Web et, optionnellement son prix (chez Carrefour et ailleurs : Auchan, Intermarché, Leclerc, LIDL…) et des information simples à même d'intéresser tout consommateur : onéreux (ex. TV à plus de 100 euros), bio./écolo., léger (moins de 1 kg), encombrant (difficile à loger dans le coffre d'une voiture ou à l'arrière), fragile (assiettes, verres), dangeureux (bouteille d'amoniaque, acétone), salissant (sac de terreau), etc. Pour les produits alimentaires, il serait pertinent d'enregistrer dans la base de données des informations supplémenatires, ex. : goûter, petit déjeuner, déjeuner, diner, snack, bébé… Il est important d'observer que malgré l'existence de sites Web « ouverts » fournissant des images sur la base du GTIN, nombre de produits sont manquants, ce qui impose d'aller « gratter » l'information de façon plus « sauvage ». Par exemple, Open Food Facts ne dispose pas d'images pour beaucoup de produits. On peut donc imaginer aller chercher l'information sur ce site mais si elle est absente, la récupérer ailleurs : images.google.com ? carrefour.fr ? Etc.

L'idée du projet est de fabriquer des composants logiciels simples (Java, JavaScript (Node.js ou non) ou encore Python) qui sur la base du GTIN d'un produit récupèrent des informations à son sujet dont, foncièrement, son(ses) image(s) en format JPG, PNG… Le cœur du projet consiste à choisir une librairie Java idoine (e.g., Jaunt ?), JavaScript (Puppeteer ?) ou encore Python (Beautiful Soup ?). Pour creuser le sujet du Web scraping, voici quelques blogs intéressants :

Modalités de contrôle du projet

Le travail est fait en binôme (monôme toutefois accepté). Il n’y a pas de rapport à rédiger, l’évaluation se faisant (en partie) sur la base d'un oral sur machine avec présentation commentée du travail réalisé (la date de l'oral sera communiquée en temps utile par e-mail). Il faut aussi déposer, au format ZIP uniquement, le code source de votre projet au plus tard le dernier jour de travail avant les vacances de Noël (note zéro si non reçu avant minuit). Dépôt ici : depot.univ-pau.fr. Merci de signaler par un e-mail à l'enseignant le dépôt (bien mentionner aussi les membres du binôme dans l'e-mail).