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
Un petit blog principalement sur l'univers du développement pour partager aussi bien des astuces pratiques utiles au quotidien mais également réfléchir sur les évolutions et perspectives de l'informatique.
jeudi 10 septembre 2015
dimanche 30 août 2015
Présentation OpenIdConnect
Voici une petite vidéo qui présente OpenIdConnect, un standard qui est utilisé par Google, Microsoft ...: http://news.humancoders.com/t/api/items/12570-openidconnect-le-nouveau-standard-d-identification
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.
samedi 4 juillet 2015
TET102 : cours du CNAM sur le management social
Voici un billet qui sort un peu de l'ordinaire.Dans le cadre des cours du CNAM, j'ai suivi le cours TET102 sur le management social en entreprise.L'objectif de cet article est de vous présenter ce cours pour vous aider à faire votre choix et vous donnez quelques conseils pour réussir l'examen.
Résumé
Durant ce cours, vous allez apprendre à connaître les différentes instances sociales ( CHSCT, Comité d'Entreprise ...) et leurs fonctionnements.Vous verrez comment le rôle du manager et comment il interagit avec celles-ci.Déroulement du cours
Ce cours est composé de 8 chapitres.A la fin de chaque chapitre, les élèves doivent effectuer des exercices par écrit et les rendre au professeur.Le professeur ouvre alors le chapitre suivant.
Pour suivre ce cours, vous devez également assister à 4 cours en présentielle.Pour ma part, c'était le soir de 18h à 21h au Lycée benjamin Franklin d' Orleans. Durant ces séances, vous effectuerez des exercices pratiques en groupe ( gestion de conflits, conduite de réunion ... ) .
Les différents chapitres
Chap I L'entreprise et son organisation
Chap II L'ingénieur et le management humain
Chap III Les conditions du travail humain
Chap IV La fonction "Ressources Humaines"
Chap V Hygiène et sécurité dans le travail
Chap VI Les relations de travail
Chap VII Évaluation des compétences et besoin en formation
Chap VIII Conduite d'équipes et résolution de conflit
A noter :
- Les 4 derniers chapitres sont les plus importants en terme de contenus ( 300 à 500 pages )
- Il y a beaucoup de choses à apprendre.
Les points forts
- Ce cours présente les différentes instances sociales, leur rôle.Cela donne une bonne vision du fonctionnement social de l'entreprise.J'aurais aimé avoir ce cours avant de commencer en entreprise.
- Les ateliers lors des point de regroupement permettent de prendre conscience du rôle de manager et apportent des conseils utiles pour son application en entreprise.
L'examen
Voici quelques remarques :- Ne négligez pas le dernier chapitre.
- Des notes manuscrites étaient autorisées.
- Vers la fin de la session, le professeur ouvre les annales.
En résumé, ce cours exige pas mal de travail. Il apporte des connaissances essentielles sur le fonctionnement des instances sociales en entreprises.Les regroupements en présentielles sont intéressant et vivant ( c'est important le soir après le travail ! ) .
vendredi 24 avril 2015
Grails et la création de pdf
Je réalise actuellement une application métier et dans ce cadre, j'ai eu besoin d'afficher des rapports au format pdf. Avant la version de Grails 2.5.0, j'utilisais le plugin export et il fonctionnait très bien.Par contre, avec la version Grails 2.5.0, j'ai eu des erreurs de compilation.J'ai aussi essayé le plugin rendering mais sans succès ( cf http://stackoverflow.com/questions/29694796/null-pointer-exception-with-grails-rendering-plugin ).
Par conséquent, j'ai décidé de le faire moi même avec une librairie :
Dans le fichier BuildConfig.groovy, j'ai ajouté la dépendance :
Voici le code dans mon controlleur :
En conclusion, on peut dire que ce n'est pas la meilleur solution car il faut tout faire à la main et à mon avis il vaut mieux regarder des solutions telles que le plugin rendering.Par contre, ça fait le job et lorsque vous êtes pressé par le temps, cela fonctionne.
Un grand merci à ce blog pour l'utilisation de la librairie : http://fahdshariff.blogspot.fr/2010/10/creating-tables-with-pdfbox.html
Hope this help,
Voir aussi : http://grails.github.io/grails-doc/2.5.x/ref/Controllers/render.html
Par conséquent, j'ai décidé de le faire moi même avec une librairie :
org.apache.pdfbox
Dans le fichier BuildConfig.groovy, j'ai ajouté la dépendance :
dependency {
...
compile "org.apache.pdfbox:pdfbox:1.8.9"
...
}
Voici le code dans mon controlleur :
class AppRetailController {
...
def renderFormPDF(){
List<App> apps = new ArrayList<>()
String title = ""
String param = params.get("serverSelect")
...
Fill the list apps
...
title= "Liste de toutes les applications sur " + param
title += " (" + apps.size() + ")"
// Create all needed for Pdf document
PDDocument document = new PDDocument();
PDPage page = new PDPage();
PDPageContentStream contentStream;
// Here I want 30 rows by page
int pageNumber = apps.size()/30 + 1
log.info("Page number :" + pageNumber)
int countApp = 0
// for each page I draw table with datas
for (int i=1; i<=pageNumber; i++) {
log.info("countApp :" + countApp)
page = new PDPage();
contentStream = new PDPageContentStream(document, page);
int max = countApp + 30
if (max > apps.size()) {
max = apps.size() - 1
}
drawTable(page, contentStream, 700, 100, apps[countApp..max], title);
countApp = countApp + 30 + 1
contentStream.close();
document.addPage(page);
}
document.save("report.pdf");
document.close();
render( file:new File("report.pdf"), fileName: "report.pdf")
}
/**
* @param page
* @param contentStream
* @param y the y-coordinate of the first row
* @param margin the padding on left and right of table
* @param content a 2d array containing the table data
* @throws IOException
*/
def drawTable(PDPage page, PDPageContentStream contentStream,
float y, float margin,
List<App> apps, String title) throws IOException {
final int rows = apps.size() + 1;
final int cols = 3;
final float rowHeight = 20f;
final float tableWidth = page.findMediaBox().getWidth()-(2*margin);
final float tableHeight = rowHeight * rows;
final float colWidth = tableWidth/(float)cols;
final float cellMargin=5f;
//draw the rows
float nexty = y ;
for (int i = 0; i <= rows; i++) {
contentStream.drawLine(margin,nexty,(float)(margin+tableWidth),nexty);
nexty-= rowHeight;
}
//draw the columns
float nextx = margin;
for (int i = 0; i <= cols; i++) {
contentStream.drawLine(nextx,y,nextx,(float)(y-tableHeight));
nextx += colWidth;
}
//now add the text
contentStream.setFont(PDType1Font.HELVETICA_BOLD,14);
contentStream.beginText();
contentStream.moveTextPositionByAmount((float)margin+cellMargin+10,(float)(y+20));
contentStream.drawString(title);
contentStream.endText();
contentStream.setFont(PDType1Font.HELVETICA_BOLD,12);
float textx = margin+cellMargin;
float texty = y-15;
//Define colunm title
contentStream.beginText();
contentStream.moveTextPositionByAmount(textx,texty);
contentStream.drawString("Nom");
contentStream.endText();
textx += colWidth;
contentStream.beginText();
contentStream.moveTextPositionByAmount(textx,texty);
contentStream.drawString("Description");
contentStream.endText();
textx += colWidth;
contentStream.beginText();
contentStream.moveTextPositionByAmount(textx,texty);
contentStream.drawString("Chemin dans ARENA");
contentStream.endText();
textx += colWidth;
texty-=rowHeight;
textx = margin+cellMargin;
contentStream.setFont(PDType1Font.HELVETICA,11);
apps.each {
contentStream.beginText();
contentStream.moveTextPositionByAmount(textx,texty);
contentStream.drawString(it.name);
contentStream.endText();
textx += colWidth;
contentStream.beginText();
contentStream.moveTextPositionByAmount(textx,texty);
String desc = it.description
if (desc.equals("EMPTY")) {
desc = ""
}
contentStream.drawString(desc);
contentStream.endText();
textx += colWidth;
contentStream.beginText();
contentStream.moveTextPositionByAmount(textx,texty);
String path = it.arenaPath
if (path == null) {
path = ""
}
contentStream.drawString(path);
contentStream.endText();
textx += colWidth;
texty-=rowHeight;
textx = margin+cellMargin;
}
}
}
En conclusion, on peut dire que ce n'est pas la meilleur solution car il faut tout faire à la main et à mon avis il vaut mieux regarder des solutions telles que le plugin rendering.Par contre, ça fait le job et lorsque vous êtes pressé par le temps, cela fonctionne.
Un grand merci à ce blog pour l'utilisation de la librairie : http://fahdshariff.blogspot.fr/2010/10/creating-tables-with-pdfbox.html
Hope this help,
Voir aussi : http://grails.github.io/grails-doc/2.5.x/ref/Controllers/render.html
mardi 31 mars 2015
Upgrade de Grails 2.4.4 vers la version 2.5.0
Voici un petit retour d'expérience pour ceux qui souhaiteraient mettre à jour leur version de Grails.
Cette mise à jour ne m'a posé aucun problème.Il suffit de bien suivre la Release Version ( https://github.com/grails/grails-core/releases/tag/v2.5.0 )
Pour résumé, j'ai seulement mis à jour les plugins suivants dans le fichier BuildConfig.groovy :
- build ':tomcat:7.0.55.2'
- compile ':cache:1.1.8'
- compile ':scaffolding:2.1.2'
- compile ':asset-pipeline:2.1.5'
J'ai eu une exception au démarrage de Grails car j'avais oublié de changer la valeur de region.factory_class dans le fichier Datasource.groovy ( cf Release Version ).
Voici l'exception que j'ai eu :
2015-03-31 16:28:39,590 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener - Error initializing the application: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'transactionManager_lookup' while setting constructor argument with key [1]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager_lookup': Cannot resolve reference to bean 'sessionFactory_lookup' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory_lookup': Invocation of init method failed; nested exception is org.hibernate.cache.CacheException: net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the same VM. Please provide unique names for each CacheManager in the config or do one of following:Et la solution pour résoudre ce problème :
1. Use one of the CacheManager.create() static factory methods to reuse same CacheManager with same name or create one if necessary
2. Shutdown the earlier cacheManager before creating new one with same name.
The source of the existing CacheManager is: DefaultConfigurationSource [ ehcache.xml or ehcache-failsafe.xml ]
...
hibernate {
...
cache.region.factory_class = 'org.hibernate.cache.SingletonEhCacheRegionFactory'
}
Inscription à :
Articles (Atom)