jeudi 17 décembre 2020

Mémoire du CNAM : enfin terminé !


Enfin, enfin j'ai terminé le mémoire du CNAM ! 

J'ai débuté le CNAM en 2014 et j'ai mis 6 ans pour passer toutes mes unités et enfin me présenter pour le mémoire. La dernière étape reste cependant très longue et pour pouvoir mettre toutes ses chances de son côté et réussir son mémoire, voici quelques conseils.

Le choix du maître de stage et des personnes associées au projet

Pour ce mémoire, vous allez produire un écrit d'une centaine de pages et réalisé une présentation d'une trentaine de minutes. Pour la rédaction, vous allez devoir respecter un format précis. De plus, vous devez vous assurer que les explications soient correctes. C'est pour cela, qu'il faut des personnes disponibles pour la relecture. Cette étape est vraiment longue et pas évidente. Il est préférable d'avoir à des côtés une personne techniquement compétente pour vous aider dans vos explications aussi bien à l'écrit qu'à l'oral !

Le choix du sujet 

Choisir un bon sujet va faciliter la réussite du mémoire. Pour cela, le plus simple est de proposer un sujet à son maître de stage. Ainsi, il vous conseillera et vous aiguillera sur le choix et sur sa faisabilité. Pour vous donner une idée, nous avons proposé 4 sujets à mon maître de stage avant de trouver le bon.

Il faut choisir un sujet technique intéressant et faisable dans des délais raisonnable. Il faut compter 6 mois à temps plein minimum.

Une fois validé par le maître de stage, le sujet doit être envoyer au CNAM Paris pour validation en remplissant un formulaire décrivant le projet (description, délais…)

Réalisé son mémoire en entreprise

J'ai débuté mon mémoire du CNAM début 2018 et il se termine le 26 novembre 2020 !

Pourquoi un temps si long ?  Le projet se fait en même temps que d'autres projets qui ont des impératifs, des urgences et par conséquent impactent votre mémoire. Faire son mémoire en entreprise est donc à mon avis indispensable. Je ne pense pas que ce soit possible de faire autrement. Le projet nécessite un temps de réalisation mais également un temps de rédaction considérable. Un projet CNAM, n'est pas un simple projet technique informatique, il nécessite également des notions de gestion de projet.





samedi 26 août 2017

NFE211 et NFE212


Ce cours présente l'ingénierie des systèmes décisionnelles.Il se fait sur deux semestres.Le premier semestre aborde l'interrogation et l'extraction des données tandis que le second semestre se concentre sur la partie exploitation des données.

Semestre 1 : NFE211


Le cours est assez dense mais le fait d'avoir la FOAD vous donne tous les cours directement accessible.Par conséquent, vous pouvez avancer à votre rythme.

Examen écrit :


L'examen écrit de NFE211; à condition d'avoir bien appris le cours; n'est pas très difficile car il s'agit essentiellement de question de cours.Attention, le jour de l'examen, les documents ne sont pas autorisés (c'est compréhensible ).

Le projet


Le projet peut porter sur un outil ou sur une chaîne décisionnelle complète sur les deux semestres.
Pour ma part, j'ai choisi une chaîne décisionnelle complète car cela permet d'aborder tous les points du cours et de mieux intégrer les notions.Vous devez rendre un rapport écrit et faire une présentation orale.(enregistré pour les personnes en FOAD)

Semestre 2 : NFE212


La partie 2 est plus dense que le premier semestre.Vous verrez le langage MDX, le data Mining et les systèmes expert.Les deux dernières parties sont plus orientées mathématiques.


Examen écrit

L'examen écrit est un peu plus difficile qu'au premier semestre.

Le projet

Les modalités sont les mêmes que pour le premier semestre.


Conclusion 


Pour obtenir l'UE, les règles sont les suivantes : Notes de l'UE = (Notes examen écrit + Notes du projet )/ 2.Il est facile d'obtenir une très bonne note pour le projet si on travaille bien dessus.La note du projet aide donc fortement à l'obtention de l'UE et la plus part du temps elle permet d'avoir une bonne note pour l'UE.Par contre, attention, il est très long de faire le projet en dehors du temps de travail.
Pour ma part, j'ai beaucoup apprécié le projet et je trouve que le choix de projet d'une chaîne décisionnelle complète permet de mieux cerner le cours.


mardi 4 avril 2017

ENG210 Exercer le métier d'ingénieur


Vous devez pour cette unité suivre des conférences mis à disposition par le responsable de l'unité ( environ 10 ). Chaque conférence dure environ 3 heures.Pour chaque conférence, il faut prendre des notes et faire un plan de la conférence pour pouvoir être capable d'effectuer un résumé ainsi qu'une synthèse le jour du devoir.A cela, il faut ajouter en fin de semestre 3 cours sur la partie gestion de projet.


Le Devoir ( 3h )


Il se décompose en 3 parties :


1.Question sur la partie de gestion de projet
2.Un Résumé sur les conférences suivies
3.Synthèse sur plusieurs conférences

Pour ma part, j'ai terminé juste dans les temps.J'ai fait la partie synthèse rapidement !

Conseils

  • Bien suivre les consignes sur la forme pour le résumé (introduction, développement, conclusion, nombre de mots, mots clés) car cela enlève beaucoup de points.
  • La prise de note est autorisée donc il faut en profiter mais cela demande beaucoup de temps.
  • J'ai fait l'impasse sur une conférence très technique faute de temps.Par contre, il faut absolument avoir un plan sur les autres conférences sinon il sera très difficile de faire un résumé.

Conclusion


Cette unité demande vraiment beaucoup de temps.Il s'agit d'une des unités les plus longues en terme de temps de travail.Par contre, c'est une unité très intéressante qui apporte de la culture et utile pour toute carrière professionnelle.

samedi 9 juillet 2016

DSY101 : Modèles et représentations de l'organisation - conception classique


Ce semestre, j'ai suivi l'unité DSY101 : Modèle et représentations de l'organisation classique.
Cette unité présente les différents modèles d'organisation ainsi que les différents auteurs et concepts associés.


Chapitres du cours


Voici les différents chapitres de l'unité.
  • Introduction et définition d'une organisation
  • Le taylorisme
  • Modèle psychosociologiques
  • L'approche managériale
  • Economie/Organisation et Société
  • La nouvelle économie
  • Web Conférence / ESS / Théorie de la contingence
  • Analyse stratégique
  • Compléments
  • Web Conférence / bilan /conseils

Chaque chapitre contient un power-point de quelques pages ( 3 ou 4 pages ) ou un article.


 Examen / notation

devoir à la maison :
Il faut tout d'abord rendre un devoir à la maison qui compte pour 1/4 de la note.
Attention, il faut le rendre dans les temps ( certains se sont fait avoir ...).Il s'agit d'un texte avec des questions.Il faut répondre en se basant sur le cours, son expérience personnelle et ses lectures.

examen :
L'examen ressemble au devoir à la maison avec plus de questions.Il faut pouvoir ressortir le jour de l'examen les idées que l'on a extrait des textes lus ( pas de notes autorisées le jour J ! ).

 Retours d'expériences

J'ai réussi cette unité mais ce ne fut pas facile.En effet, cette unité se base sur un grand travail en autonomie.C'est à nous à lire des articles et à faire les recherches en rapport du cours.
Les difficultés que j'ai rencontré sont les suivantes :
  • Les articles en relation avec le cours sur internet sont souvent payantes.
  • La bibliothèque de la ville la plus grande ne possédait pas la plus part des ouvrages cités.
  • La BO universitaire n'est pas accessible aux personnes du CNAM dans ma région.
Le fait d'avoir fait l'unité TET102 sur le management social m'a un peu aidé pour réussir cet unité.Pour conclure, ce ne fut pas une unité simple !






jeudi 2 juin 2016

samedi 12 mars 2016

Grails 3 : ORM Mapping Invalid: Specified config option


J'avais l'erreur suivante au démarrage de mon application GRAILS 3.1.1 :

ERROR org.grails.orm.hibernate.cfg.HibernateMappingBuilder - ORM Mapping Invalid: Specified config option [name] does not exist for class [toolprod.Machine]!

A cause de cette erreur, il n'y avait pas de création de table

Voici la classe domaine qui posait problème :

 class Machine {  
   /**  
    * Name of the web server.  
    */  
   String name  
   /**  
    * IP address.  
    */  
   String ipAddress  
   /**  
    * Application list in this machine.  
    */  
   Set<App> apps = []  
   /**  
    * Servers list.  
    */  
   Set<Server> servers = []  
   static hasMany = [apps : App, servers : Server]  
   static mapping = {  
     sort "name"  
   }  
   static constraints = {  
     name()  
     ipAddress(nullable: true)  
   }  


   
Pour résoudre ce problème, j'ai ajouté un attribut par défaut à name   :

   static constraints = {  
     name(nullable: false)  
     ipAddress(nullable: true)  
   }  

samedi 5 mars 2016

Netbeans changement du répertoire .gradle

Pour résoudre ce problème, j'ai initialisé la variable système GRADLE_USER_HOME avec le nouveau répertoire ( paramètre puis paneau de configuration ... ) :

    variable name : GRADLE_USER_HOME
    value of variable : E:\repos\gradle

Cela a ensuite fonctionné dans Netbeans  ( il vous faudra probablement faire quelques refresh, ouverture/fermeture de projets ...)

Hope this help !

samedi 3 octobre 2015

Grails 3 : ajouter le plugin bootstrap


Voici un petit tutoriel pour ajouter le plugin bootstrap à un projet  Grails 3.Il y a quelques différences avec Grails 2.x mais pas tant que cela.
La première chose à faire est de chercher son plugin.Ils sont maintenant localisés sur  Bintray.
J'ai récupéré le plugin Bootstrap sur le lien suivant : https://bintray.com/kensiprell/gradle-plugins/bootstrap-framework/view#read


Ajout des dépendances : build.gradle


Les dépendances sont maintenant gérées dans le fichier build.gradle :

buildscript {
    ext {
         //bootstrapFramework = [
         //    version             : "3.3.5",
         //    cssPath             : "grails-app/assets/stylesheets",
         //    jsPath              : "grails-app/assets/javascripts",
         //    useIndividualJs     : false,
         //    useLess             : false,
         //    invalidVersionFails : false,
         //    fontAwesome : [
         //       install             : false
         //       version             : "4.3.0",
         //       useLess             : false
         //       invalidVersionFails : false
         //    ]
         //]
    }
    repositories {
        jcenter()
    }
    dependencies {
        classpath "com.siprell.plugins:bootstrap-framework:1.0.3"
    }
}


apply plugin: "com.siprell.plugins.bootstrap-framework"


Utilisation dans une page GSP


Ensuite, une fois la configuration du build.gradle effectuée, il suffit de faire une GSP et d'inclure les dépendances jquery, bootstrap dans votre GSP.
Voici un exemple classique de navbar :


<html lang="en" class="no-js">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title><g:layoutTitle default="Grails"/></title>
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <asset:javascript src="jquery-2.1.3.js"/>
        <asset:javascript src="bootstrap-all.js"/>
        <asset:stylesheet src="bootstrap-all.css"/>
        <asset:stylesheet src="font-awesome-all.css"/>
        <g:layoutHead/>
    </head>
    <body>
    <nav class="navbar navbar-default">
                <div class="container-fluid">
                  <!-- Brand and toggle get grouped for better mobile display -->
                  <div class="navbar-header">
                    <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                      <span class="sr-only">Toggle navigation</span>
                      <span class="icon-bar"></span>
                      <span class="icon-bar"></span>
                      <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" href="#">Brand</a>
                  </div>

                  <!-- Collect the nav links, forms, and other content for toggling -->
                  <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
                    <ul class="nav navbar-nav">
                      <li class="active"><a href="#">Link <span class="sr-only">(current)</span></a></li>
                      <li><a href="#">Link</a></li>
                      <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
                        <ul class="dropdown-menu">
                          <li><a href="#">Action</a></li>
                          <li><a href="#">Another action</a></li>
                          <li><a href="#">Something else here</a></li>
                          <li role="separator" class="divider"></li>
                          <li><a href="#">Separated link</a></li>
                          <li role="separator" class="divider"></li>
                          <li><a href="#">One more separated link</a></li>
                        </ul>
                      </li>
                    </ul>
                    <form class="navbar-form navbar-left" role="search">
                      <div class="form-group">
                        <input type="text" class="form-control" placeholder="Search">
                      </div>
                      <button type="submit" class="btn btn-default">Submit</button>
                    </form>
                    <ul class="nav navbar-nav navbar-right">
                      <li><a href="#">Link</a></li>
                      <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Dropdown <span class="caret"></span></a>
                        <ul class="dropdown-menu">
                          <li><a href="#">Action</a></li>
                          <li><a href="#">Another action</a></li>
                          <li><a href="#">Something else here</a></li>
                          <li role="separator" class="divider"></li>
                          <li><a href="#">Separated link</a></li>
                        </ul>
                      </li>
                    </ul>
                  </div><!-- /.navbar-collapse -->
                </div><!-- /.container-fluid -->
            </nav>
        <g:layoutBody/>
    </body>

   

Running Gradle task

Pour télécharger et installer le plugin, j'ai exécuté les task Gradle suivante : clean et assemble.
Pour cela, dans Netbeans, il faut faire clic droit sur le projet et sélectionner Task puis clean ou Assemble.Ensuite, il faut redémarrer votre application.


   
   
   
   

Grails 3 and Netbeans 8.0.2 : warning sur la compatibilité avec Gradle 2.3

J'avais un warning qui apparaissait dans Netbeans IDE 8.0.2 à propos de la compatibilité Gradle 2.3.
Pour résoudre ce petit problème, j'ai juste suivi les étapes suivantes.Dans l'onglet files, j'ai fait un click droit sur mon projet.J'ai sélectionné properties et Gradle project dans les Categories.
Puis j'ai changé  la Gradle home à un répertoire Gradle sur mon poste de travail ( Gradle 2.7 ) :






Et le warning a disparu !

mercredi 30 septembre 2015

windows 10

Quelques trucs un peu pénible sur Windows 10 :

  • La barre de tâche plante souvent.Du coup, pour l'utiliser, il faut redémarrer le PC
  • Avant il y avait un petit outil pas mal pour les captures écran.Maintenant, il faut faire ALT + Imp Ecran puis coller dans Gimp ou autre

samedi 26 septembre 2015

Eclipse plugin : pas de menu dans l'onglet Extension


En ce moment, je regarde un peu le développement de plugin Eclipse et j'ai rencontré le soucis suivant : le menu n'apparaissait pas lorsque je faisais clic droit sur une extension.

J'avais aussi le warning suivant dans la vue  Extensions  : No schema found for the “org.eclipse.ui.menus” extension point

Pour résoudre le problème, j'ai ajouté  RCP Target Components ( voir http://stackoverflow.com/questions/8366303/no-schema-found-for-the-org-eclipse-ui-menus-extension-point )

  1. Dans Eclipse,  Help > Install New Software... 
  2. Initialisez l'update site: http://download.eclipse.org/eclipse/updates/4.5
  3. Choisir"Eclipse RCP Target Components" pusi Next our l'installer
Maintenant le menu apparait :




Eclipse IDE for Java Developers
Version: Mars Release (4.5.0)














dimanche 20 septembre 2015

Grails 3 et les IDE


Cela fait quelques temps que je cherche un IDE qui offre le support de Grails 3.
Pour le moment, voici l'état des lieux :
  • Eclipse : aucun support, le plugin n'est plus disponible sous STS.
  • Intellij : apparemment c'est supporté mais il faut payer la licence ...
  • Netbeans : début de support
Le point posistif, c'est que Netebans 8.0.2 reconnait les projets Grails 3.Ainsi, j'ai pu créer et importer un projet Grails 3.Vous pourrez également démarrer votre projet et il y a une coloration syntaxique pour les GSP.il faut avouer cependant que ce n'est pas encore complet mais au moins on peut commencer à se faire un peu la main dessus.

https://stackoverflow.com/questions/29441503/grails-3-0-support-in-netbeans/32425071#32425071

Une dernière chose, sous Eclipse, vous pouvez importer un projet Grails 3 en tant que projet Gradle comme l'indique la documentation mais ce n'est pas terrible.Je n'ai pas réussi à avoir la coloration syntaxique.A suivre donc ...

vendredi 18 septembre 2015

Mise à jour de Grails 2.5.0 vers 2.5.1

J'ai fait cette mise à jour sans problème.Il suffit juste de mettre à jour les plugins qui sont listés dans la ReleaseNote.

Le seul petit détail qui est un peu perturbant, c'est que vous avez un warning : Script 'Upgrade' not found.
Pour résoudre ce problème, vous devez sélectionner 3 (SetGrailsVersion) dans le menu ci-dessous :

|Running pre-compiled script
|Script 'Upgrade' not found, did you mean:
   1) MigrateDocs
   2) IntegrateWith
   3) SetGrailsVersion
   4) InstallDependency
   5) DependencyReport
Please make a selection or enter Q to quit: 3


A noter également, j'ai résolu le problème suivant en upgradant ma version de Grails : http://stackoverflow.com/questions/32562678/grails-plugin-error-class-path-resource-cannot-be-resolved

mercredi 16 septembre 2015

Comment importer des fichiers avec GRAILS ?

Dans les sites métiers, nous avons souvent besoin d'importer des fichiers de configuration.
Il y a plusieurs méthodes pour le faire.Je vais vous en présenter deux : avec un  formulaire ou avec une url.Dans cet article, je n'aborderai pas la question sur les batchs car ,dans mon cas, cela ne fonctionne pas avec la version GRAILS 2.5.



Une IHM pour importer des fichiers


Si vous avez seulement quelques fichiers à importer manuellement, le plus simple est de réaliser un formulaire.

Exemple de formulaire form.gsp


Dans ce formulaire, on appelle l'action init du controlleur admin.La balise input file avec le paramêtre multiple va permettre d'uploader plusieurs fichiers.


<g:uploadForm action="init" controller="admin">
    <form role="form">
        <div class="form-group">
            <label for="files">Choix du fichier à parser</label>
            <input type="file" id="files" name="files[]" multiple>
            <p class="help-block">Vous devez choisir un fichier httpd.conf</p>
        </div>
        <div class="form-group">
            <label for="machinename">Nom de la machine</label>
            <input type="text" class="form-control" id="machinename" name="machinename" placeholder="....ac-limoges.fr" value="">
        </div>
        <button type="submit" class="btn btn-info">Submit</button>
    </form>
</g:uploadForm>


Controller


Le tableau files[] va contenir tous les fichiers à Importer.Attention au type de file, il s'agit de org.springframework.web.multipart.MultiPartFile et non de java.io.File.Donc par exemple, vous pouvez traiter les fichiers de la manière suivante :
      
class AdminController {
  
   def init() {
        if (request instanceof MultipartHttpServletRequest) {
            ...
            request.getFiles("files[]").each { file ->
                log.info("init() file to parse:" + file.originalFilename)
                       InputStream inputStream = file.inpustream
                       BufferedReader = new BufferedReader(new InputStreamReader(inputStream))

                        try {
                            String ldapUser = EMPTY
                            String ldapPwd = EMPTY
                            String ldapHost = EMPTY
                            String ldapPort = EMPTY

                            while ((line = br.readLine()) != null) {
                            ...
                            }
                        }
            }
            ...
        }
    }
...


Import de fichier de manière automatique


Une autre façon de faire est d'utiliser une méthode du controlleur.Cela permet d'importer des fichiers automatiquement :

class AdminController {
    def reloadData() {
        def path = "E:\\projet\\toolprod\\import\\"

        log.info("reloadData() Initializing application from httpd.conf files in machine directory ...")
        new File(path).listFiles().findAll{
            if (it.isDirectory()) {
                log.info("reloadData() Machine name ( Directory name ) :" + it.name)
                String machineName = it.name
                log.debug("reloadData() files list:" + it.listFiles())
                for (File f : it.listFiles()) {
                ...

            }

        }
...



Ensuite, il vous suffit d'accéder à l'url : http://localhost:8080/appli/admin/reloadData
Après cela, il est facile de faire un curl et de le mettre dans une crontab.


lundi 14 septembre 2015

Passage à Windows 10

Hier je suis passé à Windows 10.La mise à jour est passée sans problème.
Mes premières impressions sont bonnes.Je le trouve mieux que Windows 8.1 ( Par exemple, je ne suis plus embêter avec les mouvements de la souris qui ouvre des fenêtres non désirée ).
A noter,  petit truc pénible, il faut faire CTRL + ALT + AROBASE pour faire un @. Mais bon, on ne change pas Windows ;-)
Bon bien sûr cela ne vaut pas une bonne Gentoo mais Windows reste obligatoire dans beaucoup d'entreprise ...
De plus, il faut je pense faire un peu de ménages.Pour cela, voici un lien intéressant : http://korben.info/windows-10-est-il-un-systeme-dexploitation-diabolique.html

vendredi 11 septembre 2015

Podcast en fançais

Sur le forum de HumanCoders, je suis tombé sur une discussion intéressante : https://forum.humancoders.com/t/connaissez-vous-des-podcasts-en-francais/1752

J'ai appris l'existence de podcasts sur le développement que je ne connaissais pas :
Apparemment les podcast ci-dessus sont plutôt orientés développement web.Je vais tester pour voir ...
Et bien entendu, il y a aussi l'incontournable https://lescastcodeurs.com/
  

jeudi 10 septembre 2015

Amazon introduit un nouveau modèle de monétisation pour les Apps Android

Voici une petite news qui interessera les développeurs d'application sous Android.



Avec ce système, c'est le temps passé sur l'application qui est pris en compte !



Plus d'infos sur ce lien :



Amazon introduit un nouveau modèle de monétisation pour les Apps Android

dimanche 30 août 2015