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

mardi 21 juillet 2015

NFP108 : Specification et modelisation Informatique


Dans le cadre des cours du CNAM, j'ai suivi l'unité NFP108 sur la spécification et modélisation informatique ( CNAM Champagne Ardennes ). Il s'agit essentiellement une unité de mathématiques.Cet article donne un aperçu de cette unité.Si vous voulez avoir une idée plus précise, vous pouvez consulter le devoir à la maison que j'ai réalisé (cf ci-dessous ).


Les différents chapitres

Chaque chapitre fait l'objet d'une ou plusieurs visioconférence ( rythme de 1 par semaine ). La visioconférence est partagée en deux ( 1/2 heure correction des exercices et 1/2 de cours ).

Partie 1


Chapitre01 : Problèmes et langages
Chapitre02 : Automates finis
Chapitre03 : Opérations sur les automates
Chapitre04 : Les expressions régulières
Chapitre05 : Automates et expressions régulières
Chapitre06 : Application des expressions régulières
Chapitre07 : exemple

Partie 2


Chapitre08 : logique des propositions
Chapitre 09 : logique des prédicats
Chapitre10 : démonstrations
Chapitre11 : Le calcul des séquents
Chapitre12 : égalité et théorie des ensembles


Les Examens

Il y a une note pour le devoir à la maison et une note pour l'examen final.

Devoir à la maison



Le devoir à la maison est à rendre une semaine avant l'examen.Il porte sur la partie 1 et compte pour 1/3 de la note si la note est supérieur au devoir.Ce devoir à la maison est accessible et il est possible d'avoir 20.De mon point de vue, avoir une bonne à ce devoir est indispensable pour réussir l'unité.

Voici le devoir que j'ai réalisé :  Devoir_a_la_maison



Examens


L'examen porte sur les deux parties.Il est très long et quasiment impossible à faire en entier ( voir même la première partie ). Il n'y a pas beaucoup d'annales sur cette unité mais je pense que le format reste le même d'année en année.
A noter :
  •  la dernière séance est une vidéo sur un examen corrigé.

Quelques conseils

  • Il y a beaucoup de définition à savoir par chapitre.
  • Il faut s'appliquer sur le devoir à la maison.
  • Il faut éviter de prendre de retard et bien suivre les cours chaque semaine.
  • Le jour du devoir on a le droit au cours.Cela peut aider mais vu que l'examen est très long, il ne faut pas trop compter dessus.

Conclusion

C'est une unité qui peut paraître difficile au premier abord car il s'agit essentiellement d'une unité de mathématique.Cependant, si on suit les cours régulièrement, on comprend bien.Seule une petite partie est plus difficile d'accès mais pas impossible.Le format de visio rend difficile le fait de pouvoir poser des questions à cause des symboles des formules.




samedi 11 juillet 2015

UA5A12 Examen d'admission à l'école d'ingénieur


Cette unité n'est pas vraiment un examen.C'est plus une présentation de votre cursus, votre projet et de vos motivations.Il faut tout d'abord remplir un dossier écrit puis faire une présentation orale.Dans cet article, je vais vous présenter ces différents points.


Remplir un dossier


Pour chaque question, il faut écrire soit 1/2 page soit 1 page excepté pour la dernière question où il faut 5 pages.Au total, mon dossier comptait environ 15 pages. Il ne faut donc pas si prendre à la dernière minute...
Le dossier est à rendre de préférence 10 jours avant la présentation.

Voici quelques exemples de questions :

1.Décrivez votre emploi actuel
2.Décrivez l'évolution de votre fonction durant les années
3.Indiquez vos motivations à devenir ingénieur, votre vision du statut et du métier d'ingénieur
4.Indiquez si vous souhaitez vous orienter plutôt vers des fonctions d'ingénieur dans le domaine : Production, Maintenance,Suivi de projets,Gestion d'affaires,Essais,Marketing,Services,Recherche et développement
5.Pour évoluer à partir de vos fonctions actuelles quels vous semblent être vos points forts et les points à améliorer pour remplir des fonctions d'ingénieur
6.Précisez votre projet de formation
7.Dossier professionnelle


La présentation


Il faut faire une présentation de 10 à 15 mn qui se base sur le dossier écrit.Ensuite les examinateurs vous interroge et vous conseille.Cela dure environ 15 mn. Il vous donne en même temps le résultat mais il n'y a pas vraiment de surprise.


Retour d'expérience


Le dossier était un peu long à remplir.Par contre, l'oral était très enrichissant.Les examinateurs m'ont donné pleins de conseils ( choix d'UV ) et une autre vision des choses.J'ai également pu leur demander des précisions sur le mémoire et sa réalisation.