dimanche 31 août 2014

Mettre à jour Grails 2.3.6

J'ai décidé de mettre à jour Grails car ma version de Grails commence à dater un peu ( Grails 2.3.6)...
Dans un premier temps,j'ai voulu tester le jdk1.8 pour voir ce que cela donner puis finalement j'ai fait un test avec Grails 2.4.3 et le jdk 1.7.
Finalement, le choix de la raison sera de passer à Grails 2.3.11 ...


Petite remarque : j'utilise le plugin Grails d'IntelliJ qui a une option "Change Grails SDK". Cela me permet de passer à une autre version de Grails très facilement et surtout de revenir en arrière facilement

Grails 2.3.6 with JDK 1.8_05

Cette mise à jour à échouer et d'après ce que j'ai lu ici et là, c'est normal.
Grails 2.3.6 ne fonctionne pas avec le jdk 1.8


J'ai eu le message d'erreur suivant au démarrage de mon site Grails : Java HotSpot(TM) Server VM warning: ignoring option PermSize=256m; support was removed in 8.0 

opt/drieu/jdk1.8.0_05/bin/java -Dgrails.home=/opt/drieu/grails-2.3.6 -Dbase.dir=/home/drieu/workspaces/toolprod -Dtools.jar=/opt/drieu/jdk1.8.0_05/lib/tools.jar -Dgroovy.starter.conf=/opt/drieu/grails-2.3.6/conf/groovy-starter.conf -Xmx768M -Xms768M -XX:MaxPermSize=256m -XX:PermSize=256m -javaagent:/opt/drieu/grails-2.3.6/lib/org.springsource.springloaded/springloaded-core/jars/springloaded-core-1.1.4.jar -noverify -Dspringloaded=profile=grails -Didea.launcher.port=7532 -Didea.launcher.bin.path=/opt/drieu/intellij/idea-IU-12.1.6/bin -Dfile.encoding=UTF-8 -classpath /opt/drieu/grails-2.3.6/lib/org.codehaus.groovy/groovy-all/jars/groovy-all-2.1.9.jar:/opt/drieu/grails-2.3.6/dist/grails-bootstrap-2.3.6.jar:/opt/drieu/intellij/idea-IU-12.1.6/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain org.codehaus.groovy.grails.cli.support.GrailsStarter --main org.codehaus.groovy.grails.cli.GrailsScriptRunner --conf /opt/drieu/grails-2.3.6/conf/groovy-starter.conf run-app
Java HotSpot(TM) Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
Java HotSpot(TM) Server VM warning: ignoring option PermSize=256m; support was removed in 8.0
| Loading Grails 2.3.6
| Configuring classpath
| Configuring classpath.
| Environment set to development
| Environment set to development.
| Environment set to development..
| Environment set to development...
| Environment set to development....
| Environment set to development.....
| Packaging Grails application
| Packaging Grails application.
| Packaging Grails application..
| Packaging Grails application...
| Packaging Grails application....
| Packaging Grails application.....
| Running Grails application
Java HotSpot(TM) Server VM warning: ignoring option MaxPermSize=256m; support was removed in 8.0
[ERROR] 2014-08-30 19:29:07,296 ScaffoldingGrailsPlugin - Error configuration scaffolding: startup failed:
script1409426946353650946897.groovy: -1: Repetitive method name/signature for method 'java.lang.Object withFormat(groovy.lang.Closure)' in class 'toolprod.ServerController'.
 @ line -1, column -1.
script1409426946353650946897.groovy: -1: Repetitive method name/signature for method 'java.lang.Object withFormat(groovy.lang.Closure)' in class 'toolprod.ServerController'.
 @ line -1, column -1.
2 errors
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
script1409426946353650946897.groovy: -1: Repetitive method name/signature for method 'java.lang.Object withFormat(groovy.lang.Closure)' in class 'toolprod.ServerController'.
 @ line -1, column -1.
script1409426946353650946897.groovy: -1: Repetitive method name/signature for method 'java.lang.Object withFormat(groovy.lang.Closure)' in class 'toolprod.ServerController'.
 @ line -1, column -1.
2 errors
    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:309)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1065)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:572)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:550)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:527)
    at ScaffoldingGrailsPlugin.createScaffoldedInstance(ScaffoldingGrailsPlugin.groovy:183)
    at ScaffoldingGrailsPlugin.configureScaffoldingController(ScaffoldingGrailsPlugin.groovy:138)
    at ScaffoldingGrailsPlugin.configureScaffolding(ScaffoldingGrailsPlugin.groovy:113)
    at ScaffoldingGrailsPlugin$_closure2.doCall(ScaffoldingGrailsPlugin.groovy:88)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
[INFO ] 2014-08-30 19:29:07,523 conf.BootStrap - ENVIRONNEMENT : DEVELOPMENT
[INFO ] 2014-08-30 19:29:07,523 conf.BootStrap - Nothing to load at startup ...
| Server running. Browse to http://localhost:8080/toolprod


Grails 2.3.6 à 2.4.3


J'ai aussi tester ce cas de figure.Avec un jdk1.7, j'ai tenté de faire une mise à jour vers Grails 2.4.3 mais sans succès.
J'ai eu une erreur de compilation :


Grails 2.4.3 with jdk7

me/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:42: error: no interface expected here
public class ScaffoldingViewResolver extends GrailsViewResolver {
                                             ^
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldedGroovyPageView.java:87: error: method createResponseWriter in class GroovyPageView cannot be applied to given types;
            out = createResponseWriter(response);
                  ^
  required: GrailsWebRequest,HttpServletResponse
  found: HttpServletResponse
  reason: actual and formal argument lists differ in length
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldedGroovyPageView.java:75: error: method does not override or implement a method from a supertype
    @Override
    ^
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:88: error: cannot find symbol
        return super.createFallbackView(viewName);
               ^
  symbol:   variable super
  location: class ScaffoldingViewResolver
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:58: error: method does not override or implement a method from a supertype
    @Override
    ^
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:97: error: cannot find symbol
        view.setApplicationContext(getApplicationContext());
                                   ^
  symbol:   method getApplicationContext()
  location: class ScaffoldingViewResolver
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:98: error: cannot find symbol
        view.setServletContext(getServletContext());
                               ^
  symbol:   method getServletContext()
  location: class ScaffoldingViewResolver
/home/drieu/workspaces/toolprod/target/work/plugins/scaffolding-2.0.1/src/java/org/codehaus/groovy/grails/scaffolding/view/ScaffoldingViewResolver.java:99: error: cannot find symbol
        view.setTemplateEngine(templateEngine);
                               ^
  symbol:   variable templateEngine
  location: class ScaffoldingViewResolver
8 errors


1 error

Process finished with exit code 1


Le meilleur choix

Ce n'est pas vraiment une surprise mais Il semble que le meilleur choix soit pour le moment de passer à Grails 2.3.11 ;-)
J'ai mis à jour sans problème et sans régression cette version de Grails.



lundi 25 août 2014

Les Web Components


Cet article est une synthèse sur ce que j'ai lu et entendu sur les Web Components.
Pour faire cet article, je me suis basé principalement sur la vidéo de Julien Vey sur le site d'InfoQ et sur le site html5rocks.

Web Components est un standard du W3C qui est encore à l'état de DRAFT. Donc, ce n'est pas encore pour tout de suite.Cependant, il est déjà possible de les utiliser car les principaux
acteurs du Web ( Mozilla, Google ... ) ont commencé à implémenter cette spécification.

Qu'est ce que c'est ?


Voici la définition que j'ai trouvé sur l'article de Julien Vey d'InfoQ et qui résume bien ce qu'est un Web Component :
Les Web Components permettent aux développeurs de créer des balises HTML personnalisées et réutilisables. À titre d'exemple, voici le squelette d'un composant web pour un tag <my-own-tag> : 
<element name="my-own-tag">
 <template>
   Les éléments HTML ici
 </template>
 <script>
   // la logique implémentée en JavaScript
 </script>
</element

Remarque : Une fois que ce sera standard, il sera possible de ré-utiliser ces balises sur tous les navigateurs !

Pourquoi s'intéresser au Web Component maintenant ?


- C'est un standard du W3C.
- Il est poussé par les principaux acteurs du Web.
- Ce standard va changer le développement web d'aujourd'hui ( il sera possible de faire des composants qui seront compatibles pour tous les navigateurs )

Les navigateurs actuels et les Web Components


Un bon résumé sur l'état d'avancement de la spécification se trouve ici : are we component yet ?
Actuellement, beaucoup de navigateurs ne supportent pas les Web Components.Cependant, il existe une manière pour contourner ce problème : les polyfills.
Les polyfills sont des composants qui émulent les Web Components.Cela permet de commencer à les utiliser
.

Voici une liste des projets :
  • x-tags : x-tags est une librairie JavaScript fait par Mozilla qui implémente les Web Component pour tous les navigateurs.
  • Polylemer fait par Google et présenté lors de la Google I/O
  • Librairie UI pour Dart : web-ui
  • toolkitchen

Quelques notions 


Les templates


Voici un exemple de template avec les Web Components :

 <template id="">
 </template>

Un template, c'est un morceau de code réutilisable.La balise template des Web Components ne s'execute pas, ne charge pas d'image en mémoire.

Shadow DOM


Shadow DOM permet de faire de l'encapsulation sans passer par des iframes. C'est une notion qui existe depuis longtemps qui permet de masquer ce qu'il y a derrière une balise.

Exemple :

Dans le source, on met la balise suivante :

<div id="mondiv"></div>


A l'affichage, on aura :

<div id="mondiv">
<h2>mon contenu</h2>
</div>

Pour instancier ce shadow DOM, plusieurs méthodes sont disponibles :


  • Utilisation de javaScript

Par exemple :

var shadow = ....
shadow.innerHtml="<h2>mon contenu</h2>"


  • Insertion point

On définit un div avec notre contenu :

<div id="host">
</div>

On affiche le contenu avec la balise content :

<content></content>


Custom element

Un Custom element regroupe toutes les notions vues précédemment :

<element name="moncomposant" extends="button" constructor="moncomposant>
     <template>
    </template>
    <scritp>....</script>
</element>

Dans ma page :

<link rel="component" href="moncomposant">
<moncomposant></moncomposant>

Autres notions


Dans ce petit article, je n'ai pas abordé les points suivants les mutation observer et le model driven view qui vous permette de faire du databinding et d'évaluer les performances ...

Plus d'infos


http://www.html5rocks.com
http://www.infoq.com/fr/presentations/web-components
http://www.infoq.com/fr/news/2013/06/webcomponents

dimanche 17 août 2014

Télécharger des MP3 à partir de Youtube


En lisant un des billets de Korben, je suis tombé sur un moyen très simple pour télécharger des mp3 à partir de YouTube.Plus besoin de plugins, d'outils de conversions ou autres ! Il vous suffit d'aller sur l'adresse http://peggo.co/ et de copier l'url Youtube.

Merci Korben

Source : http://korben.info/telecharger-mp3-partir-youtube.html