<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Æon Création</title><link href="https://www.aeon-creation.com/" rel="alternate"></link><link href="https://www.aeon-creation.com/feeds/all.xml" rel="self"></link><id>https://www.aeon-creation.com/</id><updated>2018-03-23T00:00:00+01:00</updated><entry><title>FIT Angers</title><link href="https://www.aeon-creation.com/blog/fit-angers/" rel="alternate"></link><published>2018-03-23T00:00:00+01:00</published><updated>2018-03-23T00:00:00+01:00</updated><author><name>Philippe</name></author><id>tag:www.aeon-creation.com,2018-03-23:/blog/fit-angers/</id><summary type="html">&lt;p&gt;ÆON Création présent au FIT pour présenter le Selfin&lt;/p&gt;</summary><content type="html">&lt;h2 id="fit-presentation-du-selfin"&gt;FIT, pr&amp;eacute;sentation du Selfin'&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Du 22 au 25 mars 2018&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Deuxi&amp;egrave;me &amp;eacute;dition du FIT, Festival International du Tourisme &amp;agrave; Angers avec comme invit&amp;eacute; le Qu&amp;eacute;bec. &lt;/p&gt;
&lt;p&gt;&lt;br/&gt;
Conf&amp;eacute;rences, pr&amp;eacute;sentations, rencontres, &amp;eacute;changes, une bonne journ&amp;eacute;e pendant laquelle nous avons pr&amp;eacute;sent&amp;eacute; notre r&amp;eacute;alisation Selfin&amp;rsquo;Angers et discut&amp;eacute; autour des kiosques et des applications professionnelles Camino.
&lt;div style="width: 100%;"&gt;
&lt;figure&gt;
&lt;video controls="controls" width="100%"&gt;
&lt;source src="/images/fit_angers_2018.mp4" type="video/mp4"/&gt;
&lt;/video&gt;
&lt;figcaption&gt;&lt;i&gt;Quelques secondes aux Salons Curnonsky&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enjoy and share ...&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;
&lt;strong&gt;Le site d&amp;eacute;di&amp;eacute; du Selfin'&lt;/strong&gt;
&lt;br/&gt;&lt;a href="https://selfin.world/" target="_BLANK"&gt;Selfin.world &lt;/a&gt;
&lt;br/&gt;
&lt;strong&gt;Le site d&amp;eacute;di&amp;eacute; de Camino&lt;/strong&gt;
&lt;br/&gt;&lt;a href="https://www.camino.pro" target="_BLANK"&gt;Camino.pro&lt;/a&gt;
&lt;br/&gt;&lt;/p&gt;</content><category term="entreprise"></category><category term="innovation"></category><category term="salon"></category><category term="selfin"></category><category term="Camino"></category></entry><entry><title>Blender, Three.js &amp; AR.js</title><link href="https://www.aeon-creation.com/blog/blender-threejs-arjs/" rel="alternate"></link><published>2018-03-09T00:00:00+01:00</published><updated>2018-03-09T00:00:00+01:00</updated><author><name>Benoit</name></author><id>tag:www.aeon-creation.com,2018-03-09:/blog/blender-threejs-arjs/</id><summary type="html">&lt;p&gt;AR.js, blender, gltf tous pour réussir votre application Réalité augmentée&lt;/p&gt;</summary><content type="html">&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Cela fait quelques temps que je souhaite tester les possibilit&amp;eacute;s AR (augmented reality) en web pur.
Je vous fais donc part de mon exp&amp;eacute;rience.&lt;/p&gt;
&lt;h2 id="les-outils"&gt;Les outils&lt;/h2&gt;
&lt;h3 id="blender"&gt;Blender&lt;/h3&gt;
&lt;p&gt;Pour les mod&amp;eacute;lisations 3D j'ai l'habitude d'utiliser &lt;strong&gt;blender&lt;/strong&gt; (&lt;a href="https://www.blender.org/"&gt;https://www.blender.org/&lt;/a&gt;), c'est un outil tr&amp;egrave;s puissant m&amp;ecirc;me si sa learning curve est un peu raide au d&amp;eacute;marrage.
En effet, la mod&amp;eacute;lisation pure, le texturing, en passant par le rendu photo r&amp;eacute;aliste et m&amp;ecirc;me l'animation, exigent de blender un tr&amp;egrave;s large &amp;eacute;ventail de fonctionnalit&amp;eacute;s.&lt;/p&gt;
&lt;h3 id="arjs"&gt;AR.js&lt;/h3&gt;
&lt;p&gt;Pour le rendu web j'ai choisi AR.js (&lt;a href="https://github.com/jeromeetienne/AR.js"&gt;https://github.com/jeromeetienne/AR.js&lt;/a&gt;). Cette librairie javascript est au dessus de three.js (&lt;a href="https://threejs.org/"&gt;https://threejs.org/&lt;/a&gt;). Elle comporte de bonnes optimisations pour les plates-formes &amp;agrave; ressources limit&amp;eacute;es telles que les smart-phone.&lt;/p&gt;
&lt;h3 id="a-frame"&gt;A-FRAME&lt;/h3&gt;
&lt;p&gt;Il existe une librairie au dessus de three.js nomm&amp;eacute;e a-frame &lt;a href="https://aframe.io/"&gt;https://aframe.io/&lt;/a&gt;. Elle permet de construire une sc&amp;egrave;ne en pseudo-html. 
Exemple:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a-scene&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a-box&lt;/span&gt; &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"-1 0.5 -3"&lt;/span&gt; &lt;span class="na"&gt;rotation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"0 45 0"&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#4CC3D9"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a-box&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a-sphere&lt;/span&gt; &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"0 1.25 -5"&lt;/span&gt; &lt;span class="na"&gt;radius&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"1.25"&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#EF2D5E"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a-sphere&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a-cylinder&lt;/span&gt; &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"1 0.75 -3"&lt;/span&gt; &lt;span class="na"&gt;radius&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"0.5"&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"1.5"&lt;/span&gt; 
                &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#FFC65D"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a-cylinder&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a-plane&lt;/span&gt; &lt;span class="na"&gt;position&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"0 0 -4"&lt;/span&gt; &lt;span class="na"&gt;rotation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"-90 0 0"&lt;/span&gt; &lt;span class="na"&gt;width&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt; &lt;span class="na"&gt;height&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"4"&lt;/span&gt; 
             &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#7BC8A4"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a-plane&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;a-sky&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"#ECECEC"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a-sky&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;a-scene&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Il est m&amp;ecirc;me possible de cr&amp;eacute;er son propre tag, pour charger des &amp;eacute;l&amp;eacute;ments dans la sc&amp;egrave;ne. Mes essais avec cette librairie ne m'ont pas satisfait. Le FPS &amp;eacute;tait trop bas sur la plate-forme de test (galaxy tab 4). J'ai donc supprim&amp;eacute; cette couche pour utiliser directement &lt;strong&gt;ArToolkitSource&lt;/strong&gt; de AR.js.&lt;/p&gt;
&lt;h3 id="gltf-blender-exporter"&gt;glTF-Blender-Exporter&lt;/h3&gt;
&lt;p&gt;Enfin pour charger le mod&amp;egrave;le 3D avec les animations, j'ai choisi de passer par le format GLTF2 (&lt;a href="https://github.com/KhronosGroup/glTF"&gt;https://github.com/KhronosGroup/glTF&lt;/a&gt;) un format libre pour les sc&amp;egrave;nes 3D. Il faut savoir qu'il existe un add-on blender dans le d&amp;eacute;p&amp;ocirc;t three.js utilisant le format json. Mais celui-ci n'est plus activement maintenu, d'ailleurs les d&amp;eacute;veloppeurs de three.js se demandent si cet addon doit rester dans le d&amp;eacute;p&amp;ocirc;t GIT de three.js (&lt;a href="https://github.com/mrdoob/three.js/issues/12903"&gt;issue github&lt;/a&gt;). De mon cot&amp;eacute; j'ai choisi l'addon: &lt;a href="https://github.com/KhronosGroup/glTF-Blender-Exporter"&gt;glTF-Blender-Exporter&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="du-code_1"&gt;Du code&lt;/h2&gt;
&lt;p&gt;Voici un essai fonctionnant avec le marker HIRO&lt;/p&gt;
&lt;p&gt;&lt;img alt="hiro marker" src="/images/hiro.png" style="width:100px;"/&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;controls&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;clock&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;mixer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;arToolkitContext&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;smoothedControls&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;clock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Clock&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;onRenderFcts&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;SHADOW&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;initAR&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;

    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;arToolkitSource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREEx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ArToolkitSource&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="nx"&gt;sourceType&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'webcam'&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="nx"&gt;arToolkitSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onReady&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;onResize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'resize'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;onResize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onResize&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="nx"&gt;arToolkitSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;onResize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;      
        &lt;span class="nx"&gt;arToolkitSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;copySizeTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;domElement&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;arToolkitContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arController&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="nx"&gt;arToolkitSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;copySizeTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arToolkitContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;arController&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;canvas&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;    
        &lt;span class="p"&gt;}&lt;/span&gt;       
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="c1"&gt;// create atToolkitContext&lt;/span&gt;
    &lt;span class="nx"&gt;arToolkitContext&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREEx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ArToolkitContext&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="nx"&gt;cameraParametersUrl&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;THREEx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ArToolkitContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseURL&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; 
            &lt;span class="s1"&gt;'../data/data/camera_para.dat'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;detectionMode&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'mono'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;maxDetectionRate&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;canvasWidth&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;canvasHeight&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="c1"&gt;// initialize it&lt;/span&gt;
    &lt;span class="nx"&gt;arToolkitContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onCompleted&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="c1"&gt;// copy projection matrix to camera&lt;/span&gt;
        &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;projectionMatrix&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;copy&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;arToolkitContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getProjectionMatrix&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="c1"&gt;// update artoolkit on every frame&lt;/span&gt;
    &lt;span class="nx"&gt;onRenderFcts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(){&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;arToolkitSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ready&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="k"&gt;return&lt;/span&gt;

        &lt;span class="nx"&gt;arToolkitContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;arToolkitSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;domElement&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;markerRoot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Group&lt;/span&gt;
    &lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;markerRoot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;artoolkitMarker&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREEx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ArMarkerControls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arToolkitContext&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;markerRoot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'pattern'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;patternUrl&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;THREEx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ArToolkitContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;baseURL&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;'../data/data/patt.hiro'&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="c1"&gt;// build a smoothedControls&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;smoothedRoot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Group&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;smoothedRoot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;smoothedControls&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREEx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ArSmoothedControls&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;smoothedRoot&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;lerpPosition&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;lerpQuaternion&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;lerpScale&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="nx"&gt;onRenderFcts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;delta&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;smoothedControls&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;markerRoot&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;arWorldRoot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;smoothedRoot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;arWorldRoot&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createElement&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'div'&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;body&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;container&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;scene&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Scene&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;light&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DirectionalLight&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="mh"&gt;0xffffff&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;  &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SHADOW&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;castShadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;      
        &lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mapSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;width&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c1"&gt;// default&lt;/span&gt;
        &lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mapSize&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;height&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;512&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// default&lt;/span&gt;
        &lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;near&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;       &lt;span class="c1"&gt;// default&lt;/span&gt;
        &lt;span class="nx"&gt;light&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;far&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;      &lt;span class="c1"&gt;// default&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;camera&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PerspectiveCamera&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;loader&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;GLTF2Loader&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;loader&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;load&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'tram2.gltf'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;gltf&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;gltf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
            &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;obj&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gltf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;children&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
            &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SHADOW&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;"Plane"&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
                    &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;castShadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;receiveShadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;castShadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                    &lt;span class="nx"&gt;obj&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;receiveShadow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"camera"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gltf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cameras&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"camera"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"gltf"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;gltf&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;debug&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"scene"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nx"&gt;root&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;initAR&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;geometry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;CubeGeometry&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;material&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;MeshNormalMaterial&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
            &lt;span class="nx"&gt;transparent&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nx"&gt;opacity&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nx"&gt;side&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;DoubleSide&lt;/span&gt;
        &lt;span class="p"&gt;});&lt;/span&gt; 
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;mesh&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;Mesh&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;geometry&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;material&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;light&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;gltf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;scene&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;animationClip&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gltf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;animations&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;];&lt;/span&gt;
        &lt;span class="nx"&gt;mixer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;AnimationMixer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;scene&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nx"&gt;mixer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clipAction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;animationClip&lt;/span&gt; &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;play&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

        &lt;span class="nx"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="nx"&gt;renderer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;WebGLRenderer&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
        &lt;span class="nx"&gt;antialias&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nx"&gt;alpha&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="p"&gt;});&lt;/span&gt;

    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setPixelRatio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;devicePixelRatio&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerWidth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHeight&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;gammaOutput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;SHADOW&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadowMap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;shadowMap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;THREE&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PCFSoftShadowMap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;domElement&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="s1"&gt;'resize'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;onWindowResize&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;stats&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Stats&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;container&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dom&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;onWindowResize&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;aspect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerWidth&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHeight&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;camera&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;updateProjectionMatrix&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;setSize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerWidth&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nb"&gt;window&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;innerHeight&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;lastTimeMsec&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;animate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;nowMsec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;requestAnimationFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;animate&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="nx"&gt;lastTimeMsec&lt;/span&gt;        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;lastTimeMsec&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;nowMsec&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;deltaMsec&lt;/span&gt;       &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;min&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;nowMsec&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;lastTimeMsec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;lastTimeMsec&lt;/span&gt;        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;nowMsec&lt;/span&gt;

    &lt;span class="nx"&gt;onRenderFcts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;onRenderFct&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;
        &lt;span class="nx"&gt;onRenderFct&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;deltaMsec&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;nowMsec&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;})&lt;/span&gt;

    &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;delta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.75&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;clock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getDelta&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="nx"&gt;mixer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;delta&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;renderer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;scene&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;camera&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</content><category term="entreprise"></category><category term="blender"></category><category term="android"></category><category term="three.js"></category><category term="3D"></category></entry><entry><title>Biolait</title><link href="https://www.aeon-creation.com/blog/biolait/" rel="alternate"></link><published>2017-11-16T00:00:00+01:00</published><updated>2017-11-16T00:00:00+01:00</updated><author><name>Philippe</name></author><id>tag:www.aeon-creation.com,2017-11-16:/blog/biolait/</id><summary type="html">&lt;p&gt;La bio partout et pour tous&lt;/p&gt;</summary><content type="html">&lt;h2 id="biolait-la-bio-partout-et-pour-tous"&gt;Biolait - La bio partout et pour tous&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Un peu de l&amp;eacute;gende&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Biolait&lt;/strong&gt; nous a fait confiance d&amp;egrave;s 2014 avec la cr&amp;eacute;ation de son site web. L'histoire s'est pass&amp;eacute; dans une &amp;eacute;curie pendant la traite des vaches&amp;nbsp;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tiens, dis donc tu connais pas quelqu'un qui pourrait nous refaire notre site, il serait temps qu'on s'en occupe&amp;nbsp;? On en a un mais il a besoin de grandir.&lt;/li&gt;
&lt;li&gt;Ben nous, on peut le faire.&lt;/li&gt;
&lt;li&gt;?&lt;/li&gt;
&lt;li&gt;Tu sais, c'est historiquement mon travail m&amp;ecirc;me si depuis quelques ann&amp;eacute;es j'ai lev&amp;eacute; le pied autour de la programmation. Et puis d&amp;eacute;but d'ann&amp;eacute;e prochaine je travaille avec deux d&amp;eacute;veloppeurs supers.&lt;/li&gt;
&lt;li&gt;D'accord, on demande une offre &amp;agrave; plusieurs soci&amp;eacute;t&amp;eacute;s, tu peux en remettre une, pas de probl&amp;egrave;me&amp;nbsp;! &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;C'&amp;eacute;tait fin 2013, &amp;AElig;ON Cr&amp;eacute;ation n'&amp;eacute;tait pas n&amp;eacute;e et pourtant une belle histoire commen&amp;ccedil;ait. Depuis nous avons d&amp;eacute;velopp&amp;eacute; le backoffice qui permet &lt;strong&gt;d'interroger dynamiquement la base de donn&amp;eacute;es et 
de g&amp;eacute;n&amp;eacute;rer des documents&lt;/strong&gt;, de &lt;strong&gt;partager de l'information&lt;/strong&gt; par niveau d'acc&amp;egrave;s, de &lt;strong&gt;renseigner la base&lt;/strong&gt;, &lt;strong&gt;d'analyser&lt;/strong&gt;, etc. tout un panel souple et modulable d'outils m&amp;eacute;tier.&lt;/p&gt;
&lt;p&gt;Nous avons &amp;eacute;galement accompagn&amp;eacute; Biolait lors d'&amp;eacute;v&amp;eacute;nements&amp;nbsp;: les &lt;strong&gt;assembl&amp;eacute;es g&amp;eacute;n&amp;eacute;rales&lt;/strong&gt;, haut lieu de rencontre entre les paysans, les &lt;strong&gt;25 ans du groupement&lt;/strong&gt; n&amp;eacute; en 1994 autour d'une poign&amp;eacute;e 
d'irr&amp;eacute;ductibles voulant valoriser leur lait bio. Nous avons v&amp;eacute;cu de l'int&amp;eacute;rieur cette punchline &lt;strong&gt;&amp;laquo;&amp;nbsp;Un groupement de producteurs engag&amp;eacute;s&amp;nbsp;&amp;raquo;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;br/&gt;
&lt;div style="width: 100%;"&gt;
&lt;figure&gt;
&lt;video controls="controls" width="100%"&gt;
&lt;source src="/images/biolait_interview.mp4" type="video/mp4"/&gt;
&lt;/video&gt;
&lt;figcaption&gt;&lt;i&gt;Dans le film &amp;laquo;&amp;nbsp;T&amp;eacute;moignages clients&amp;nbsp;&amp;raquo; dont voici un extrait: Olivier buiche, Emmanuel Vasseneix, Serge Papin et Claude Gruffat..&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;&lt;/p&gt;</content><category term="entreprise"></category><category term="audiovisuelle"></category><category term="developpement"></category><category term="equipe"></category><category term="programmation"></category></entry><entry><title>Self'in Angers</title><link href="https://www.aeon-creation.com/blog/selfin-angers/" rel="alternate"></link><published>2017-10-25T00:00:00+02:00</published><updated>2017-10-25T00:00:00+02:00</updated><author><name>Philippe</name></author><id>tag:www.aeon-creation.com,2017-10-25:/blog/selfin-angers/</id><summary type="html">&lt;p&gt;Découvrez le self'in Angers&lt;/p&gt;</summary><content type="html">&lt;h2 id="selfin-angers-le-selfie-panoramique-geant"&gt;Self'in Angers, le selfie panoramique g&amp;eacute;ant&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;[/sɛlfiː/], selon &lt;strong&gt;wikipedia&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;i&gt;Un selfie, autoportrait, ou encore &amp;eacute;goportrait en fran&amp;ccedil;ais canadien, est un autoportrait photographique pris dans un contexte social (en couple ou au sein d'un groupe), 
festif ou touristique (avec un arri&amp;egrave;re-plan c&amp;eacute;l&amp;egrave;bre) avec un smartphone, soit tenu &amp;agrave; bout de bras, soit fix&amp;eacute; au bout d'une perche &amp;agrave; selfie.&lt;/i&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Selon la &lt;strong&gt;ville d'Angers&lt;/strong&gt; et mis en &amp;oelig;uvre par &lt;strong&gt;&amp;AElig;ON Cr&amp;eacute;ation&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;la perche &amp;agrave; selfie mesure 350 m&amp;egrave;tres&lt;/strong&gt;. Le selfie panoramique est install&amp;eacute; &lt;strong&gt;promenade du bout du monde&lt;/strong&gt;, pr&amp;egrave;s du ch&amp;acirc;teau, mat&amp;eacute;rialis&amp;eacute; au sol par un cercle m&amp;eacute;tallique. 
L&amp;agrave; vous pouvez vous connecter gr&amp;acirc;ce &amp;agrave; votre smartphone au site &amp;laquo;&amp;nbsp;&lt;a href="https://www.selfin.world" target="_BLANK"&gt;www.selfin.world&lt;/a&gt;&amp;nbsp;&amp;raquo;. Une fois connect&amp;eacute;, vous d&amp;eacute;clenchez les appareils photo de l'autre cot&amp;eacute; de la Maine, 
en une minute vous recevez une mini vid&amp;eacute;o avec un plan large allant du ch&amp;acirc;teau &amp;agrave; la cath&amp;eacute;drale et vous montrant dans ce &lt;strong&gt;fabuleux paysage en un zoom saisissant&lt;/strong&gt;.
&lt;br/&gt;&lt;/p&gt;
&lt;div style="width: 100%;"&gt;
&lt;figure&gt;
&lt;video controls="controls" width="100%"&gt;
&lt;source src="/images/selfin_angers_720.mp4" type="video/mp4"/&gt;
&lt;/video&gt;
&lt;figcaption&gt;&lt;i&gt;Self'in Angers le film&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enjoy and share ...&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;
&lt;strong&gt;Le site d&amp;eacute;di&amp;eacute;&lt;/strong&gt;
&lt;br/&gt;&lt;a href="https://selfin.world/" target="_BLANK"&gt;Selfin.world &lt;/a&gt;
&lt;br/&gt;
&lt;strong&gt;On en parle&lt;/strong&gt;
&lt;br/&gt;&lt;a href="http://www.villeintelligente-mag.fr/Osez-un-selfie-geant-au-Bout-du-Monde_a338.html" target="_BLANK"&gt;Mag ville intelligente &lt;/a&gt;
&lt;br/&gt;&lt;a href="http://www.club-innovation-culture.fr/dossier-france-2017-nouveaux-dispositifs-numeriques-2017/" target="_BLANK"&gt; Club Innovation et Culture France  &lt;/a&gt;
&lt;br/&gt;
Cr&amp;eacute;&amp;eacute; en octobre 2008, le Club Innovation &amp;amp; Culture, CLIC France r&amp;eacute;unit les mus&amp;eacute;es, lieux de patrimoine et lieux de culture scientifique fran&amp;ccedil;ais sensibilis&amp;eacute;s aux probl&amp;eacute;matiques des nouvelles technologies num&amp;eacute;riques et de leurs usages.
&lt;br/&gt;&lt;a href="http://www.courrierdelouest.fr/actualite/angers-un-appareil-a-selfies-geants-pres-du-chateau-20-04-2018-356844" target="_BLANK"&gt; Courrier de l'Ouest du 19/04/2018  &lt;/a&gt;
&lt;br/&gt;&lt;/p&gt;</content><category term="entreprise"></category><category term="innovation"></category></entry><entry><title>Tramway d'Angers</title><link href="https://www.aeon-creation.com/blog/tramway-dangers/" rel="alternate"></link><published>2017-10-23T00:00:00+02:00</published><updated>2017-10-23T00:00:00+02:00</updated><author><name>Philippe</name></author><id>tag:www.aeon-creation.com,2017-10-23:/blog/tramway-dangers/</id><summary type="html">&lt;p&gt;Timeline-Découvrez Angers&lt;/p&gt;</summary><content type="html">&lt;h2 id="timeline-decouvrez-angers"&gt;Timeline - D&amp;eacute;couvrez Angers&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Un tramway pour la connected week&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aujourd'hui nous suivons &lt;strong&gt;Arthur&lt;/strong&gt; dans son trajet quotidien. Il rentre du lyc&amp;eacute;e ou il commence son ann&amp;eacute;e de terminale. Oreillettes viss&amp;eacute;es sur les oreilles, 
son dernier morceau pr&amp;eacute;f&amp;eacute;r&amp;eacute;&amp;nbsp;:&amp;nbsp;&amp;laquo;&amp;nbsp;&lt;i&gt;Green Summer&lt;/i&gt; &amp;raquo;&amp;nbsp;. &lt;strong&gt;Station &amp;laquo;&amp;nbsp;Saint Serge&amp;raquo;&lt;/strong&gt;&amp;nbsp;, le tram arc-en-ciel s'&amp;eacute;broue laissant s'&amp;eacute;chapper ceux du quartier. Arthur monte. 
Il aime bien le tramway, c'est un moment &amp;agrave; lui. Il pense &amp;agrave; son dernier devoir de philo&amp;nbsp;: r&amp;eacute;pondre &amp;agrave; &lt;strong&gt;" la question : qui suis-je ", admet-elle une r&amp;eacute;ponse exacte?&lt;/strong&gt;&amp;nbsp;&amp;raquo;, il lui reste l'introduction et la conclusion &amp;agrave; &amp;eacute;crire, 
ce soir c'est bon, la nuit sera un peu plus courte mais il devrait pouvoir rendre sa copie demain. 
&lt;br/&gt;
Arriv&amp;eacute; &lt;strong&gt;pr&amp;egrave;s du Ralliement&lt;/strong&gt;, une image semble flotter sur la fen&amp;ecirc;tre, 
une carte postale ancienne vers 1900 se superpose &amp;agrave; sa vision de la place. Il reconna&amp;icirc;t les immeubles, voit des voitures avec chevaux et cochers. L'ancienne poste est 
devenue un restaurant mais les &lt;strong&gt;Caves du Ralliement&lt;/strong&gt; et &lt;strong&gt;l'h&amp;ocirc;tel St Julien&lt;/strong&gt; sont d&amp;eacute;j&amp;agrave; l&amp;agrave;. &lt;strong&gt;Voyage.&lt;/strong&gt;
&lt;br/&gt;
&lt;div style="width: 100%;"&gt;
&lt;figure&gt;
&lt;video controls="controls" width="100%"&gt;
&lt;source src="/images/augmented_tramway_720.mp4" type="video/mp4"/&gt;
&lt;/video&gt;
&lt;figcaption&gt;&lt;i&gt;Connected week Angers&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Pour la &lt;strong&gt;Connected Week&lt;/strong&gt;, vous aurez l'occasion de voir des vid&amp;eacute;os entre les diff&amp;eacute;rentes stations du parcours. Elles sont contextualis&amp;eacute;es, 
c'est une position GPS qui en d&amp;eacute;clenche la lecture. D&amp;eacute;velopp&amp;eacute; et r&amp;eacute;alis&amp;eacute; par &lt;strong&gt;&amp;AElig;ON Cr&amp;eacute;ation&lt;/strong&gt;, pilot&amp;eacute; par &lt;strong&gt;Angers Loire M&amp;eacute;tropole et Keolis&lt;/strong&gt; ce 
projet devrait se poursuivre au-del&amp;agrave; du WEF et pourrait &amp;eacute;voluer vers une version 2 permettant des annonces culturelles, spectacles &amp;agrave; venir, etc. 
La transparence de la projection sur la fen&amp;ecirc;tre permettra une &lt;strong&gt;vue augment&amp;eacute;e&lt;/strong&gt; en superposant une image ancienne du lieu, la vid&amp;eacute;o d'un &amp;eacute;v&amp;eacute;nement qui s'est pass&amp;eacute; l&amp;agrave;, 
une 3D de projet urbain. 
&lt;br/&gt;
&lt;strong&gt;A suivre&amp;hellip;&lt;/strong&gt;
&lt;br/&gt;
&lt;div style="width: 100%;"&gt;
&lt;figure&gt;
&lt;img alt="Image de l'inauguration" src="/images/inauguration_keolis_01.jpg"/&gt;
&lt;figcaption&gt;&lt;i&gt;Laurent Minier, directeur technique de Keolis et Bernard Dupr&amp;eacute;, vice-pr&amp;eacute;sident de l'agglo en charge des infrastructures de transport&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;div style="width: 100%;"&gt;
&lt;figure&gt;
&lt;img alt="Connected week" src="/images/inauguration_keolis_02.jpg"/&gt;
&lt;figcaption&gt;&lt;i&gt;Connected week&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On en parle&amp;nbsp;:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;
&lt;a href="http://www.my-angers.info/10/23/a-loccasion-de-la-connected-week-keolis-angers-testera-le-tramway-connecte/67451" target="_BLANK"&gt;My Angers info 23/10/2017&lt;/a&gt;
&lt;br/&gt;&lt;a href="https://www.ouest-france.fr/pays-de-la-loire/angers-49000/angers-quand-les-vitres-de-certains-tramways-s-animent-et-informent-5333599" target="_BLANK"&gt;Ouest France 23/10/2017&lt;/a&gt;
&lt;br/&gt;&lt;a href="http://angers-tele.fr/le-journal/?video=6912" target="_BLANK"&gt;Angers t&amp;eacute;l&amp;eacute; journal du 23/10/2017 avec Dominique Rocha, directeur g&amp;eacute;n&amp;eacute;ral de Keolis&lt;/a&gt;
&lt;br/&gt;&lt;a href="http://www.villeintelligente-mag.fr/Innovation-De-la-realite-augmentee-et-contextualisee-dans-le-tram-d-Angers_a335.html" target="_BLANK"&gt;Ville intelligente Mag du 23/10/2017&lt;/a&gt;
&lt;br/&gt;&lt;a href="http://www.courrierdelouest.fr/actualite/angers-des-videos-sur-les-vitres-du-tramway-24-10-2017-337218" target="_BLANK"&gt;Courrier de l'Ouest Angers du 24/10/2017&lt;/a&gt;
&lt;br/&gt;&lt;a href="http://france3-regions.francetvinfo.fr/pays-de-la-loire/emissions/jt-1213-pays-de-la-loire" target="_BLANK"&gt;JT 13h France3 du 24/10/2017 &lt;/a&gt;(d&amp;eacute;but &amp;agrave; 2'36")
&lt;br/&gt;&lt;a href="http://www.busetcar.com/angers-videos-projetees-vitres-tram/" target="_BLANK"&gt;La revue Bus et Car Connexion&lt;/a&gt;&lt;/p&gt;</content><category term="entreprise"></category><category term="audiovisuelle"></category><category term="mapping"></category><category term="innovation"></category></entry><entry><title>Caves Duhard à Amboise - 37 -</title><link href="https://www.aeon-creation.com/blog/caves-duhard-a-amboise-37-/" rel="alternate"></link><published>2017-09-30T00:00:00+02:00</published><updated>2017-09-30T00:00:00+02:00</updated><author><name>Philippe</name></author><id>tag:www.aeon-creation.com,2017-09-30:/blog/caves-duhard-a-amboise-37-/</id><summary type="html">&lt;p&gt;Scénographie audiovisuelle aux Caves Duhard&lt;/p&gt;</summary><content type="html">&lt;h2 id="caves-duhard-a-amboise"&gt;Caves Duhard &amp;agrave; Amboise&lt;/h2&gt;
&lt;p&gt;Depuis cet &amp;eacute;t&amp;eacute; les &lt;strong&gt;&amp;laquo;&amp;nbsp;Caves Duhard&amp;nbsp;&amp;raquo;&lt;/strong&gt; &amp;agrave; Amboise invite les visiteurs dans un &lt;strong&gt;parcours sc&amp;eacute;nographi&amp;eacute;&lt;/strong&gt;. Ponctu&amp;eacute; d'appels &amp;agrave; nos sens, 
ce parcours nous emm&amp;egrave;ne en voyage au pays de la &lt;strong&gt;vigne et du vin&lt;/strong&gt; en d&amp;eacute;couvrant une v&amp;eacute;ritable vinosc&amp;eacute;nie. 
&lt;br/&gt;
Sp&amp;eacute;cialis&amp;eacute;es depuis de nombreuses ann&amp;eacute;es dans l'assemblage et la vente de vins, essentiellement de Vouvray, les &amp;laquo;&amp;nbsp;Caves Duhard&amp;nbsp;&amp;raquo; 
poss&amp;egrave;dent une collection extraordinaire de vins mill&amp;eacute;sim&amp;eacute;s, des crus les plus anciens datant de 1872, ann&amp;eacute;e de la cr&amp;eacute;ation des caves et de l'atelier de tonnelerie, aux crus d'aujourd'hui.
&lt;br/&gt;
Dans ce parcours troglodyte sensoriel, &lt;strong&gt;&amp;AElig;ON Cr&amp;eacute;ation&lt;/strong&gt; a r&amp;eacute;alis&amp;eacute; les audiovisuels diffus&amp;eacute;s lors de la visite&amp;nbsp;: depuis les &lt;strong&gt;&amp;laquo;&amp;nbsp;Couleurs des vins&amp;nbsp;&amp;raquo;&lt;/strong&gt; de Loire jusqu'&amp;agrave; une rencontre 
entre L&amp;eacute;onard de Vinci et Fran&amp;ccedil;ois 1er  qui a marqu&amp;eacute; &amp;agrave; jamais les paysages du Val de Loire. &lt;/p&gt;
&lt;div style="width: 100%;"&gt;
&lt;figure&gt;
&lt;img alt="Les caves Duhard" src="/images/caves_duhard_mapping01.jpg"/&gt;
&lt;figcaption&gt;&lt;i&gt;La texture du tuffeau. Les murs et plafonds sont rest&amp;eacute;s bruts des m&amp;eacute;thodes d'extraction au pic des perreyeux. &lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;D&amp;egrave;s les premiers pas, la cave nous plonge dans les entrailles de la terre, sa texture, ses saveurs, sa p&amp;eacute;nombre, son intimit&amp;eacute;, 
sa parent&amp;eacute; r&amp;eacute;ticulaire avec notre r&amp;eacute;seau d'usage quotidien r&amp;eacute;veillant la curiosit&amp;eacute; et invitant &amp;agrave; la d&amp;eacute;couverte, un peu, beaucoup, passionn&amp;eacute;ment.
&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;Vous d&amp;eacute;couvrirez ainsi des mill&amp;eacute;simes dans leurs contextes historiques, tous ces &lt;strong&gt;&amp;eacute;v&amp;eacute;nements qui ont laiss&amp;eacute; leurs marques dans nos m&amp;eacute;moires&lt;/strong&gt; et 
que nous retrouvons dans une d&amp;eacute;gustation, comme si ces m&amp;eacute;moires &amp;eacute;taient toujours aussi pr&amp;eacute;sentes, ais&amp;eacute;es &amp;agrave; r&amp;eacute;veiller et toujours pr&amp;ecirc;tes &amp;agrave; se rappeler 
&amp;agrave; nos sens&amp;nbsp;: &lt;strong&gt;1969, les premiers pas de l'homme sur la lune&lt;/strong&gt;, &lt;strong&gt;1989 et le bicentenaire, la r&amp;eacute;volution chinoise&lt;/strong&gt;, &lt;strong&gt;1945, la fin de la guerre, 
la reconstruction et la cr&amp;eacute;ation de l'ONU,&lt;/strong&gt; etc.
&lt;br/&gt;
&lt;div style="width: 100%;"&gt;
&lt;figure&gt;
&lt;img alt="Les caves Duhard" src="/images/caves_duhard_mapping02.jpg"/&gt;
&lt;figcaption&gt;&lt;i&gt;Le ch&amp;acirc;teau mod&amp;eacute;lis&amp;eacute; et adapt&amp;eacute; &amp;agrave; la cave. &lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;br/&gt;
La derni&amp;egrave;re &amp;eacute;tape du parcours consiste en un &lt;strong&gt;mapping&lt;/strong&gt;. Mod&amp;eacute;lis&amp;eacute;e en 3D, &lt;strong&gt;la cave est mise en image ajust&amp;eacute;e au plus pr&amp;egrave;s de sa forme&lt;/strong&gt;. 
Apr&amp;egrave;s r&amp;eacute;alisation des animations 3D avec Blender, logiciel open-source, le film est assembl&amp;eacute; et projet&amp;eacute;. Il est compos&amp;eacute; de s&amp;eacute;quences vid&amp;eacute;o et de
mod&amp;egrave;les adapt&amp;eacute;s au lieu. D'une dur&amp;eacute;e de quelques minutes et diffus&amp;eacute; par 8 projecteurs vid&amp;eacute;o, il &lt;strong&gt;raconte une histoire&lt;/strong&gt;, celle de la vigne ramen&amp;eacute;e par St Martin,
des paysages fa&amp;ccedil;onn&amp;eacute;s par sa culture, du vin partag&amp;eacute; par les hommes.
&lt;br/&gt;&lt;/p&gt;
&lt;div style="width: 100%;"&gt;
&lt;figure&gt;
&lt;img alt="Les caves Duhard" src="/images/caves_duhard_mapping03.jpg"/&gt;
&lt;figcaption&gt;&lt;i&gt;Le soir tomb&amp;eacute;, les habitants et leurs amis partagent un verre.&lt;/i&gt;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/div&gt;
&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pour tout voir, je vous laisse le plaisir de d&amp;eacute;couvrir lors de votre visite &amp;agrave; Amboise.&lt;/strong&gt;&lt;/p&gt;</content><category term="entreprise"></category><category term="audiovisuelle"></category><category term="mapping"></category></entry><entry><title>VueJS &amp; RxJS</title><link href="https://www.aeon-creation.com/blog/vuejs-rxjs/" rel="alternate"></link><published>2017-09-21T00:00:00+02:00</published><updated>2017-09-21T00:00:00+02:00</updated><author><name>Isabelle</name></author><id>tag:www.aeon-creation.com,2017-09-21:/blog/vuejs-rxjs/</id><summary type="html">&lt;p&gt;Découverte du js "moderne"&lt;/p&gt;</summary><content type="html">&lt;p&gt;Cela fait plus de deux mois d&amp;eacute;j&amp;agrave; que je suis en stage chez Aeon cr&amp;eacute;ation. Le temps passe vite &amp;agrave; coder !&lt;/p&gt;
&lt;p&gt;Le projet sur lequel je travaille est vraiment tr&amp;egrave;s int&amp;eacute;ressant, mais je ne peux pas vous donner beaucoup de d&amp;eacute;tails car c&amp;rsquo;est top secret ;) !&lt;/p&gt;
&lt;p&gt;Dans les grandes lignes : je programme une application web qui sera &amp;agrave; destination des professionnels du tourisme. &lt;/p&gt;
&lt;p&gt;Dans les petites lignes, voici quelques outils que j&amp;rsquo;utilise pour cela : les librairies Vue.JS et Rx.JS et les langages coffeeScript et pug. 
Pour &amp;ecirc;tre honn&amp;ecirc;te, je ne connaissais aucune de ces technos, mis &amp;agrave; part le html qui est bien plus facile &amp;agrave; &amp;eacute;crire avec le pug ! &lt;/p&gt;
&lt;p&gt;J&amp;rsquo;ai ainsi d&amp;eacute;couvert le coffeeScript qui &amp;eacute;crit bien plus simplement le javaScript mais qui m&amp;rsquo;a fait m&amp;rsquo;arracher les cheveux au d&amp;eacute;but,
notamment une fois o&amp;ugrave; il manquait juste un espace pour que mon code fonctionne&amp;hellip; 
En effet, dans le coffeeScript l&amp;rsquo;indentation et certains espaces sont significatifs. Du c&amp;ocirc;t&amp;eacute; des librairies, Vue.JS me permet de cr&amp;eacute;er des composants r&amp;eacute;utilisables n&amp;rsquo;importe o&amp;ugrave; dans mes pages. 
C&amp;rsquo;est assez pratique. Mais surtout, cette librairie est vraiment bien car elle permet de rendre tr&amp;egrave;s r&amp;eacute;actif 
le rendu visuel des pages lors de changement dans les donn&amp;eacute;es sous-jacentes puisqu&amp;rsquo;elle se charge elle-m&amp;ecirc;me de la modification du DOM. &lt;/p&gt;
&lt;p&gt;Et enfin, la librairie Rx.JS me permet de rester &amp;agrave; l&amp;rsquo;&amp;eacute;coute des changements ayant lieu dans la base de donn&amp;eacute;es dans laquelle le programme puise. 
Ainsi si une nouvelle donn&amp;eacute;e arrive dans la base, l&amp;rsquo;appli sera mise &amp;agrave; jour ! &lt;/p&gt;
&lt;p&gt;Rendez-vous dans quelques semaines pour la suite de l&amp;rsquo;aventure&amp;hellip;&lt;/p&gt;</content><category term="stage"></category><category term="application"></category><category term="code"></category></entry><entry><title>Gitlab Pages, intégration continue &amp; python 3</title><link href="https://www.aeon-creation.com/blog/gitlab-pages-integration-continue-python-3/" rel="alternate"></link><published>2017-07-21T00:00:00+02:00</published><updated>2017-07-21T00:00:00+02:00</updated><author><name>Jean-Baptiste</name></author><id>tag:www.aeon-creation.com,2017-07-21:/blog/gitlab-pages-integration-continue-python-3/</id><summary type="html">&lt;p&gt;Déploiement de notre site via l'outil CI intégré de gitlab&lt;/p&gt;</summary><content type="html">&lt;h2 id="introduction"&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Voici les &amp;eacute;tapes pour le d&amp;eacute;ploiement de notre site via l'outil CI int&amp;eacute;gr&amp;eacute; de
gitlab, j'ai nomm&amp;eacute; Gitlab Pages.&lt;/p&gt;
&lt;h2 id="activer-lintegration-continue"&gt;Activer l'int&amp;eacute;gration continue&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Configurer Gitlab avec un domaine commun pour servir les projets "statiques".&lt;/li&gt;
&lt;li&gt;Ajouter un "Shared Runner" dans l'administration de Gitlab.&lt;/li&gt;
&lt;li&gt;Activer les pipelines dans les settings du projet (bien cach&amp;eacute; dans la liste
des options).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="configurer-votre-projet-pour-utiliser-lintegration-continue"&gt;Configurer votre projet pour utiliser l'int&amp;eacute;gration continue&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Ajouter un fichier &lt;code&gt;.gitlab-ci.yml&lt;/code&gt;.&lt;/strong&gt; 
Vous pouvez en g&amp;eacute;n&amp;eacute;rer un depuis un mod&amp;egrave;le directement depuis l'interface.&lt;/p&gt;
&lt;p&gt;Attention celui g&amp;eacute;n&amp;eacute;r&amp;eacute; pour pelican contient un "image: python2.7-alpine".
Cette option n'est utile que si votre instance de Gitlab est &lt;a href="https://docs.gitlab.com/ce/ci/docker/using_docker_images.html"&gt;configur&amp;eacute;e
pour utiliser Docker&lt;/a&gt;.
Ce qui n'est pas le cas chez nous pour le moment. Mais &amp;ccedil;a va venir rapidement.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Si vous n'utilisez pas Docker sur votre instance de Gitlab&lt;/strong&gt; comme nous,
vous devez installer python 3 "en dur" si votre pelican utilise python 3.&lt;/p&gt;
&lt;p&gt;Vous devez aussi installer sur le serveur toutes les d&amp;eacute;pendances de votre 
projet, le "runner" de gitlab n'ayant pas les droits pour installer les 
d&amp;eacute;pendances python sur la machine.&lt;/p&gt;
&lt;h2 id="push"&gt;Push&lt;/h2&gt;
&lt;p&gt;Nous h&amp;eacute;bergeons notre site sur un autre serveur que celui de notre instance
Gitlab. Nous utilisons donc la commande pelican: &lt;code&gt;make rsync_upload&lt;/code&gt; pour construire
le site et l'envoyer via rsync &amp;amp; ssh sur l'autre serveur.&lt;/p&gt;
&lt;p&gt;Nous avons donc g&amp;eacute;n&amp;eacute;r&amp;eacute; une clef ssh pour l'utilisateur &lt;code&gt;gitlab-runner&lt;/code&gt; (sous Ubuntu):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;sudo su gitlab-runner
ssh-keygen
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;que nous avons copi&amp;eacute;e sur le serveur servant le site (derri&amp;egrave;re nginx compil&amp;eacute; avec le module pagespeed).
Ne pas oublier d'ouvrir les ports n&amp;eacute;cessaires sur les firewall, et tout roule !
A chaque commit &amp;amp; push sur la branche &lt;code&gt;master&lt;/code&gt; le site est reconstruit et
pouss&amp;eacute; sur le bon serveur.&lt;/p&gt;
&lt;p&gt;Le fichier de configuration de l'int&amp;eacute;gration continue est donc minimal:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;span class="l l-Scalar l-Scalar-Plain"&gt;stages&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;
  &lt;span class="p p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l l-Scalar l-Scalar-Plain"&gt;build&lt;/span&gt;
  &lt;span class="p p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l l-Scalar l-Scalar-Plain"&gt;upload&lt;/span&gt;

&lt;span class="l l-Scalar l-Scalar-Plain"&gt;build&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;
  &lt;span class="l l-Scalar l-Scalar-Plain"&gt;stage&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l l-Scalar l-Scalar-Plain"&gt;build&lt;/span&gt;
  &lt;span class="l l-Scalar l-Scalar-Plain"&gt;script&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;
    &lt;span class="p p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l l-Scalar l-Scalar-Plain"&gt;make publish&lt;/span&gt;
  &lt;span class="l l-Scalar l-Scalar-Plain"&gt;only&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;
    &lt;span class="p p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l l-Scalar l-Scalar-Plain"&gt;master&lt;/span&gt;

&lt;span class="l l-Scalar l-Scalar-Plain"&gt;upload&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;
  &lt;span class="l l-Scalar l-Scalar-Plain"&gt;stage&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt; &lt;span class="l l-Scalar l-Scalar-Plain"&gt;upload&lt;/span&gt;
  &lt;span class="l l-Scalar l-Scalar-Plain"&gt;script&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;
    &lt;span class="p p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l l-Scalar l-Scalar-Plain"&gt;make rsync_upload&lt;/span&gt;
  &lt;span class="l l-Scalar l-Scalar-Plain"&gt;only&lt;/span&gt;&lt;span class="p p-Indicator"&gt;:&lt;/span&gt;
    &lt;span class="p p-Indicator"&gt;-&lt;/span&gt; &lt;span class="l l-Scalar l-Scalar-Plain"&gt;master&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Le "stage" nomm&amp;eacute; "pages" est r&amp;eacute;serv&amp;eacute; par gitlab et d&amp;eacute;clenche une copie en locale
pour &amp;ecirc;tre servi par le nom de domaine des pages statiques Gitlab. &lt;/p&gt;
&lt;p&gt;J'ai donc ajout&amp;eacute; manuellement les 2 &amp;eacute;tapes (la derni&amp;egrave;re aurait suffit car le Makefile r&amp;eacute;g&amp;eacute;n&amp;egrave;re le site avant upload).&lt;/p&gt;</content><category term="entreprise"></category><category term="gitlab"></category><category term="application"></category><category term="pelican"></category><category term="python 3"></category></entry><entry><title>Hello world !</title><link href="https://www.aeon-creation.com/blog/hello-world/" rel="alternate"></link><published>2017-04-15T00:00:00+02:00</published><updated>2017-04-15T00:00:00+02:00</updated><author><name>Æon Création</name></author><id>tag:www.aeon-creation.com,2017-04-15:/blog/hello-world/</id><summary type="html">&lt;p&gt;Bienvenue chez nous&lt;/p&gt;</summary><content type="html">&lt;p&gt;Cet article marque le d&amp;eacute;but de notre blog.
&lt;strong&gt;Bienvenus &amp;agrave; vous !&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Nous allons vous proposer des articles techniques sur ce que l'on fait,
montrer nos r&amp;eacute;alisations et partager un peu de la vie de notre entreprise.&lt;/p&gt;
&lt;p&gt;A bient&amp;ocirc;t !&lt;/p&gt;</content><category term="entreprise"></category></entry></feed>