Google’s DeepMind est maintenant ouvert Sourcing Sonnet

khaled salmouk

Google’s DeepMind est maintenant en open source Sonnet, sa bibliothèque de réseau de neurones orienté plus haut niveau qui permet aux développeurs de construire plus facilement des composants de réseau de neurones dans tensorflow.

Ceci est un autre StepForward à la démocratisation de la technologie d’intelligence artificielle. Tout en ouvrant son moteur tensorflow AI et Sonnet à d’autres ingénieurs, ce qui signifie la recherche d’alimentation en dehors de la société, Google profite quand ils se nourrissent de nouveau dans la compagnie du moteur de recherche.

DeepMind-Open-Sources-its-higher-level-framework-Sonnet-1

tensorflow, parfois appelé TF, est l’un de la bibliothèque d’apprentissage de la machine la plus populaire aujourd’hui, et il a été initialement développé en tant que logiciel propriétaire par Google ingénieurs du cerveau. Après DeepMind a été acquis par Google en 2014, l’équipe de recherche a commencé à adopter toute tensorflow depuis la fin de 2015 et au début de 2016.

Sur son blog, commentaires DeepMind au sujet de la bonne expérience et la satisfaction qu’ils ont d’avoir choisi tensorflow pour leurs modèles se penchant, en disant qu’ils « apprendre signicatilly plus vite », et que ses fonctionnalités intégrées de formation distribués ont grandement simplifié leur code.

Selon DeepMind, son cadre supérieur levier Sonnet permet aux développeurs de créer des modules de réseau de neurones beaucoup plus rapide lors de l’utilisation tensorflow.

À présent, certains développeurs expérimentés voient des similitudes entre tensorflow et la flamme (une autre bibliothèque d’apprentissage machine), lors de l’utilisation Sonnet et tensorflow ensemble. Aussi, considérant parfois ce cadre d’apprentissage automatique, ‘pas aussi bon encore’ comme PyTorch.

Sonnet est déjà disponible sur GitHub et il devrait avoir des mises à jour constantes par l’équipe DeepMind.

 

Publicités

Comment le « deep learning » révolutionne l’intelligence artificielle?

Cette technologie d’apprentissage, basée sur des réseaux de neurones artificiels, a complètement bouleversé le domaine de l’intelligence artificielle en moins de cinq ans.

« Je n’ai jamais vu une révolution aussi rapide. On est passé d’un système un peu obscur à un système utilisé par des millions de personnes en seulement deux ans. » Yann LeCun, un des pionniers du « deep learning », n’en revient toujours pas. Après une longue traversée du désert, « l’apprentissage profond », qu’il a contribué à inventer, est désormais la méthode phare de l’intelligence artificielle (IA). Toutes les grandes entreprises tech s’y mettent : Google, IBM, Microsoft, Amazon, Adobe, Yandex ou encore Baidu y investissent des fortunes. Facebook également, qui, signal fort, a placé Yann LeCun à la tête de son nouveau laboratoire d’intelligence artificielle installé à Paris.

Ce système d’apprentissage et de classification, basé sur des « réseaux de neurones artificiels » numériques, est, pêle-mêle, utilisé par Siri, Cortana et Google Now pour comprendre la voix, être capable d’apprendre à reconnaître des visages. Il a « découvert » par lui-même le concept de chat et est à l’origine des images psychédéliques qui ont inondé la Toile ces dernières semaines, aux allures de « rêves » de machines.

deep learning

Le massif du Mont-Blanc vu par Deep Dream. Basé sur Roman Boed/CC BY 2.0

Qu’est-ce que c’est ?

Concrètement, le deep learning est une technique d’apprentissage permettant à un programme, par exemple, de reconnaître le contenu d’une image ou de comprendre le langage parlé – des défis complexes, sur lesquels la communauté de chercheurs en intelligence artificielle s’est longtemps cassé le nez. « La technologie du deep learning apprend à représenter le monde. C’est-à-dire comment la machine va représenter la parole ou l’image par exemple », pose Yann LeCun, considéré par ses pairs comme un des chercheurs les plus influents dans le domaine. « Avant, il fallait lefaire à la main, expliquer à l’outil comment transformer une image afin de la classifier. Avec le deep learning, la machine apprend à le faire elle-même. Et elle le fait beaucoup mieux que les ingénieurs, c’est presque humiliant !»

Pour comprendre le deep learning, il faut revenir sur l’apprentissage supervisé, une technique courante en IA, permettant aux machines d’apprendre. Concrètement, pour qu’un programme apprenne à reconnaître une voiture, par exemple, on le « nourrit » de dizaines de milliers d’images de voitures, étiquetées comme telles. Un « entraînement », qui peut nécessiter des heures, voire des jours. Une fois entraîné, il peut reconnaître des voitures sur de nouvelles images.

Le deep learning utilise lui aussi l’apprentissage supervisé, mais c’est l’architecture interne de la machine qui est différente : il s’agit d’un « réseau de neurones », une machine virtuelle composée de milliers d’unités (les neurones) qui effectuent chacune de petits calculs simples. « La particularité, c’est que les résultats de la première couche de neurones vont servir d’entrée au calcul des autres », détaille Yann Ollivier, chercheur en IA au CNRS, spécialiste du sujet. Ce fonctionnement par « couches » est ce qui rend ce type d’apprentissage « profond ». Yann Ollivier donne un exemple parlant :

« Comment reconnaître une image de chat ? Les points saillants sont les yeux et les oreilles. Comment reconnaître une oreille de chat ? L’angle est à peu près de 45°. Pour reconnaître la présence d’une ligne, la première couche de neurones va comparer la différence des pixels au-dessus et en dessous : cela donnera une caractéristique de niveau 1. La deuxième couche va travailler sur ces caractéristiques et les combiner entre elles. S’il y a deux lignes qui se rencontrent à 45°, elle va commencer à reconnaître le triangle de l’oreille de chat. Et ainsi de suite. »

A chaque étape – il peut y avoir jusqu’à une vingtaine de couches –, le réseau de neurones approfondit sa compréhension de l’image avec des concepts de plus en plus précis. Pour reconnaître une personne, par exemple, la machine décompose l’image : d’abord le visage, les cheveux, la bouche, puis elle ira vers des propriétés de plus en plus fines, comme le grain de beauté. « Avec les méthodes traditionnelles, la machine se contente de comparer les pixels. Le deep learning permet un apprentissage sur des caractéristiques plus abstraites que des valeurs de pixels, qu’elle va elle-même construire », précise Yann Ollivier.

Concrètement, ça donne quoi ?

Outre sa mise en œuvre dans le champ de la reconnaissance vocale avec Siri, Cortana et Google Now, le deep learning est avant tout utilisé pour reconnaître le contenu des images. Google Maps l’utilise pour déchiffrer le texte présent dans les paysages, comme les numéros de rue. Facebook s’en sert pour détecter les images contraires à ses conditions d’utilisation, et pour reconnaître et taguer les utilisateurs présents sur les photos publiées – une fonctionnalité non disponible en Europe. Des chercheurs l’utilisent pour classifier les galaxies. Yann LeCun fait aussi depuis plusieurs années cette démonstration impressionnante : il a créé un programme capable de reconnaître en temps réel les objets filmés par la webcam d’un simple ordinateur portable.

« le système a découvert le concept de chat lui-même. Personne ne lui a jamais dit que c’était un chat ».

Une des réalisations les plus poussées et les plus spectaculaires du deep learning a eu lieu en 2012, quand Google Brain, le projet de deep learning de la firme américaine, a été capable de « découvrir », par lui-même, le concept de chat. Cette fois, l’apprentissage n’était pas supervisé : concrètement, la machine a analysé, pendant trois jours, dix millions de captures d’écran issues de YouTube, choisies aléatoirement et, surtout, non étiquetées. Un apprentissage « en vrac » qui a porté ses fruits : à l’issue de cet entraînement, le programme avait appris lui-même à détecter des têtes de chats et des corps humains – des formes récurrentes dans les images analysées. « Ce qui est remarquable, c’est que le système a découvert le concept de chat lui-même. Personne ne lui a jamais dit que c’était un chat. Ça a marqué un tournant dans le machine learning », a expliqué Andrew Ng, fondateur du projet Google Brain, dans les colonnes du magazine Forbes.

Plus récemment – et plus gadget –, Google a encore fait parler de lui avec «Deep Dream », un programme permettant, en quelque sorte, de visualiser un processus de deep learning, avec des résultats étonnants. Les formes repérées, analysées et interprétées dans une image par le programme étaient visuellement « augmentées ». En clair, « on demande au réseau “quoi que tu voies, on en veut plus !” (…) Si un nuage ressemble un peu à un oiseau, le réseau va le faire ressembler encore plus à un oiseau », expliquent les auteurs de ce travail sur un blog. Résultat : un cochon-escargot dans les nuages, des palais merveilleux de toutes les couleurs et des circonvolutions hypnotisantes dans les tableaux des grands maîtres…


Une forêt, vue par Deep Dream. Joan Campderros-i-Canas/CC BY 2.0

Pourquoi en parle-t-on autant aujourd’hui ?

Les idées de base du deep learning remontent à la fin des années 80, avec la naissance des premiers réseaux de neurones. Pourtant, cette méthode vient seulement de connaître son heure de gloire. Pourquoi ? Car si la théorie était déjà en place, les moyens, eux, ne sont apparus que très récemment. La puissance des ordinateurs actuels, combinés à la masse de données désormais accessible, a multiplié l’efficacité du deep learning. « On s’est rendu compte qu’en prenant des logiciels que nous avions écrits dans les années 80, lors d’un stage par exemple, et en les faisanttourner sur un ordinateur moderne, ils fonctionnaient beaucoup mieux », explique Andrew Ng à Forbes.

Le trio de pionniers se surnommait à l’époque, avec autodérision, « la conspiration du deep learning ».

Qui plus est, on sait désormais construire des réseaux de neurones plus complexes, et le développement de l’apprentissage non supervisé a, lui aussi, également contribué à donner une nouvelle dimension au deep learning. « On est passé en cinq ans de techniques qui ne fonctionnaient pas vraiment à des techniques qui marchent. Un cap a été franchi », assure le chercheur Yann Ollivier.

Et pourtant, les spécialistes du deep learning ont longtemps été mis de côté par la communauté scientifique, sceptique. A la fin des années 80, « il y a eu une vague d’intérêt pour le deep learning », se souvient Yann LeCun, qui avait présenté sa thèse sur le sujet en 1987. Un système de lecture de chèques qu’il avait développé lisait, dans les années 90, « entre 10 % et 20 % des chèques émis aux Etats-Unis ». Mais, devant le manque de résultats de ces technologies prometteuses, lié à la faible puissance des machines et le nombre limité de données, la communauté scientifique a fini par s’en détourner.

Yann LeCun, de son côté, est passé en 2002 du monde de l’industrie à celui l’université, où il a rencontré Geoffrey Hinton et Yoshua Bengio. « Nous avons décidé tous les trois de renouveler l’intérêt de la communauté scientifique pour ces méthodes. Ça a été une traversée du désert. On était une espèce de groupe mis à part », raconte Yann LeCun. Le trio se surnomme même, avec autodérision, « la conspiration du deep learning ».

Les technologies évoluant, les résultats commencent toutefois à se montrer de plus en plus prometteurs. « Vers 2010-2012, on a commencé à établir des records. Les grandes entreprises se sont aperçues que ces systèmes fonctionnaient très bien. » En 2013, Geoffrey Hinton remporte la prestigieuse compétition ImageNet, consacrée à la reconnaissance d’image. Une « révolution », se souvient Yann LeCun :

« Il a gagné avec un taux d’erreur deux fois moins élevé que les compétiteurs les plus proches. Une révolution. On est passé d’une attitude très sceptique à une situation où tout le monde s’est mis à y travailler en un an et demi. Je n’ai jamais vu une révolution aussi rapide. Même si, de mon point de vue, elle a mis beaucoup de temps à arriver… »

Et demain ?

« L’espoir est que plus on augmente le nombre de couches, plus les réseaux de neurones apprennent des choses compliquées, abstraites, qui correspondent plus à la manière dont un humain raisonne », anticipe Yann Ollivier. Pour lui, le deep learning va, dans une échéance de 5 à 10 ans, se généraliser « dans toute l’électronique de décision », comme dans les voitures ou les avions. Il pense aussi à l’aide au diagnostic en médecine, citant certains réseaux de neurones qui « se trompent moins qu’un médecin pour certains diagnostics », même si, souligne-t-il, « ce n’est pas encore rôdé ». Les robots seront eux aussi, selon lui, bientôt dotés de cette intelligence artificielle. « Un robot pourrait apprendre à faire le ménage tout seul, et ce serait bien mieux que les robots aspirateurs, qui ne sont pas fantastiques ! », sourit-il. « Ce sont des choses qui commencent à devenir envisageables. »

« Des gens promettent la Lune, et c’est dangereux pour le deep learning »

Chez Facebook, Yann LeCun veut utiliser le deep learning « de façon plus systématique pour la représentation des pièces d’information », en clair, développer une IA capable de comprendre le contenu des textes, photos et vidéos publiées par les internautes. « Mais pour l’instant, on n’y est pas ». Il rêve également depouvoir créer un assistant numérique personnel avec qui il serait possible de dialoguer par la voix. Plus proche de l’IA du film Her (où un humain tombe amoureux du logiciel de son smartphone) que de l’actuel système Siri des iPhones, précise-t-il.

« Pour Siri et Cortana, les réponses sont écrites à la main. Ces systèmes ne sont intelligents que parce que des ingénieurs ont pensé à toutes les possibilités ». Lui aimerait créer un système plus autonome, « à qui on pourrait poser des questions comme à un ami, sans avoir besoin d’utiliser le bon mot-clé ». Mais, temporise le chercheur, « on ne sait pas faire, on est très loin de Her. Cela nécessite un bien meilleur niveau de compréhension que les systèmes qu’on a actuellement. Et cela nécessite aussi de comprendre la psychologie des gens ».

Plus inattendu, les réseaux de neurones pourraient aussi avoir une influence sur les neurosciences, explique Yann LeCun. « Des chercheurs les utilisent comme un modèle du cortex visuel, car il y a des parallèles ». « Le cerveau humain fonctionne aussi par couches : il capte des formes simples, puis complexes », explique Christian Wolf, spécialiste de la vision par ordinateur à l’INSA de Lyon. « En ce sens, il existe une analogie entre les réseaux de neurones et le cerveau humain. Mais, à part cela, on ne peut pas dire que le deep learning est à l’image du cerveau. »

L’avenir semble donc sourire au deep learning, mais Yann LeCun reste méfiant :

« On est dans une phase très enthousiaste, c’est très excitant. Mais il y a aussi beaucoup de bêtises racontées, il y a des exagérations. On entend dire qu’on va créer des machines intelligentes dans cinq ans, que Terminator va éliminer la race humaine dans dix ans… Il y a aussi de gros espoirs que certains placent dans ces méthodes, qui ne seront peut-être pas concrétisés. Des gens promettent la Lune, et c’est dangereux pour le domaine. »

Ces derniers mois, plusieurs personnalités, parmi lesquelles le fondateur de Microsoft, Bill Gates, l’astrophysicien britannique Stephen Hawking et le PDG de Tesla, Elon Musk, avaient exprimé leurs préoccupations par rapport aux progrès de l’intelligence artificielle, qu’ils jugent potentiellement dangereuse.

Yann LeCun, lui, se veut pragmatique, et rappelle que le domaine de l’IA a souvent souffert des attentes disproportionnées à son égard. Il espère que, cette fois, la discipline ne sera pas victime de cette « inflation des promesses ».

khaled salmouk

Le CSS c’est cool, mais avec Sass et LESS c’est mieux

Le CSS c’est cool, mais avec Sass et LESS c’est mieux.

Pourquoi ? Le but de cet article est de vanter les mérites de LESS et Sass (Syntactically Awesome Stylesheet), deux langages de génération dynamique de CSS.

Ces deux préprocesseurs CSS permettent uniquement d’améliorer la syntaxe du langage sans toucher à ses fondamentaux ni à ses possibilités qui sont dépendants du standard défini par le W3C.

Pourquoi utiliser un préprocesseur CSS ?

Les préprocesseurs CSS permettent d’optimiser le code en amont et sont transparents pour le navigateur et donc pour l’utilisateur (rendez vous sur un site qui utilise Sass ou LESS et inspecter l’élément, vous ne verrez que le CSS généré).

Installation et utilisation

LESS est implémenté en JavaScript. Il faut créer un fichier .less et charger un script JavaScript sur la page pour apporter le style à la page. Par conséquent sans javascript, pas de styles.

Il est également possible de compiler systématiquement les fichiers .less grâce à des GUI comme SimpLESS (multi OS) / Crunch (multi OS) / CodeKit (Mac) / WinLESS (Win) pour inclure le fichier CSS précompilé dans la page et éviter l’appel JavaScript.

Sass est implémenté en Ruby. Il est nécessaire d’installer Ruby pour pouvoir installer la gem Sass (Edit 10/08/2015 – merci Olivier : Il est maintenant possible de profiter de SASS sans Ruby grâce à libSASS qui est écrit en C. Il existe également une version ‘wrapper’ Node.js : Node-SAAS). Il existe également des outils pour compiler les fichiers en .CSS à chaque sauvegarde automatiquement (Compass.app (Win, Mac) / LiveReload (Win, Mac) / CodeKit (Mac)).

Fonctionnalités et particularités

LESS utilise l’extension .less tandis que Sass propose deux formats de fichiers : le .scss (Sassy CSS, CSS fougueux… !) et le .sass (inspiré par HAML). Les fichiers .sass sont identiques aux fichiers .scss mais les accolades sont remplacées par des tabulationx et les points-virgules par des retours à la ligne.

Variables

LESS et Sass permettent de stocker des constantes dans une variable précédée de @ pour LESS et $ pour Sass.

L’utilisation de @ pour LESS peut toutefois paraitre troublante car elle n’a rien à voir avec l’utilisation de @ pour la déclaration de media queries (@media) où pour la création d’animations (@keyframes).

Il y a une petite différence entre LESS et Sass. Quand on surcharge une variable globale localement, la variable globale prend la valeur locale, ce qui n’est pas très intuitif :

.scss
1
2
3
4
5
6
7
8
9
10
$color: red;
.classe-a {
  $color: blue;
  color: $color;
}
.classe-b {
  // LESS = red (global)
  // Sass = blue (surchargée par la variable locale)
  color: $color;
}

Imbrication

LESS et Sass permettent d’imbriquer du code de la même manière :

1
2
3
4
5
6
nav {
  width: 940px;
    ul {
    padding: 0;
  }
}

est compilé en

.css
1
2
3
4
5
6
nav {
  width: 940px;
}
nav ul {
  padding: 0;
}

Cependant, Sass va plus loin en permettant d’imbriquer des propriétés :

.scss
1
2
3
4
5
6
7
8
9
10
11
12
13
nav {
  width: 940px;
  ul{
    padding: 0;
  }
  border {
    style: solid;
    right {
      width: 2px;
      color: $color;
    }
  }
}

est compilé en

.css
1
2
3
4
5
6
7
8
9
nav {
  width: 940px;
  border-style: solid;
  border-right-width: 2px;
  border-right-color: red;
}
nav ul {
  padding: 0;
}

Il est également possible d’imbriquer des media queries, ce qui permet de voir bien plus simplement les différences d’affichage entre le style original et le style responsive :

1
2
3
4
5
6
.classe-a{
  // style original
  @media (max-width: 800px) {
  // style responsive
  }
}

Mixins

CSS ne supporte pas encore les mixins. Un mixin est une classe destinée à être composée par héritage multiple avec une autre classe pour lui apporter des fonctionnalités.

C’est un cas de réutilisation d’implémentation. Ils permettent ainsi une meilleure maintenabilité du code car il suffit de modifier le code à un seul endroit.

Ici aussi, les syntaxes sont différentes entre LESS et Sass. Sass utilise @mixin et less utilise la déclaration de classe :

.scss
1
2
3
4
5
6
@mixin bordure($valeur) {
  border-radius: $valeur;
}
nav {
  @include bordure(10px);
}
.less
1
2
3
4
5
6
.bordure(@valeur) {
  border-radius: @valeur;
}
nav {
  .bordure(10px);
}

Bien entendu, les mixins sont utilisables sans paramètres. Une fois de plus, Sass va un peu plus loin avec l’héritage de sélecteurs. Plus besoin de copier/coller tous les styles d’un sélecteur dans un autre, il y a @extend :

.scss
1
2
3
4
5
6
7
.classe-a {
   width: 100px;
}
.classe-b {
   border: 1px solid $red;
   @extend .classe-a;
}

est compilé en

.css
1
2
3
4
5
6
.classe-a, .classe-b {
   width: 100px;
}
.classe-b {
   border: 1px solid $red;
}

Contrairement à LESS, avec @extend Sass ne duplique pas le code de .classe-a dans .classe-b, le sélecteur .classe-a est altéré en .classe-a, .classe-b et seuls les styles particuliers à .classe-b y restent.

Opérations mathématiques / logique & boucles

Maths

.scss
1
2
3
4
$marge: 20px;
div {
  margin: $marge - 10%;
}

Ici il y aura une erreur de compilation sur la marge en Sass car les unités sont différentes mais LESS garde la première unité en référence, c’est à dire que le code est équivalent à 10px – 10px = 0px. Oui, c’est bizarre mais c’est comme ça !

.scss
1
2
3
$bleu= #0000FF;
$bleuclair= lighten($blue, 10%);
$bleufonce= darken($blue, 10%);

L’exemple ci-dessus montre également comment aller plus vite, plus besoin de chercher 1000 couleurs pour faire des dégradés, les fonctions lighten et darken sont là pour ça !

Logique & boucles

LESS et Sass permettent d’insérer de la logique dans le code :

.less
1
2
3
4
5
6
7
8
9
10
.set-bg-color (@text-color) when (lightness(@text-color) >= 50%) {
  background-color: black;
}
.set-bg-color (@text-color) when (lightness(@text-color) < 50%) {
  background-color: white;
}
.classe-a {
  color: #BADA55;
  .set-bg-color(#BADA55);
}
.scss
1
2
3
4
5
6
7
8
9
10
11
@mixin set-bg-color($color) {
  @if lightness($color) >= 50% {
    background-color: black;
  } @else {
    background-color: white;
  }
}
.classe-a {
  color: #BADA55;
  @include set-bg-color(#BADA55);
}

Ici, on adapte le background de .classe-a en fonction de la clarté du texte. Si le texte est clair on met un background blanc, sinon noir.

On remarque que Sass est plus intuitif et permet d’utiliser des conditions de type if/if else/else, ce qui est bien plus lisible que ce que LESS a à offrir. Il en est de même avec les boucles, Sass est plus robuste et même si nous sommes d’accord que les boucles en CSS ce n’est pas indispensable, il est toujours pratique de savoir que ça existe : Sass permet de faire des boucles de type @for, @each, @while :

.scss
1
2
3
4
5
6
$columns: 4;
@for $i from 1 through $columns {
  .cols-#{$i} {
    width: ((100 / $columns) * $i) * 1%;
  }
}

est compilé en

.css
1
2
3
4
5
6
7
8
9
10
11
12
.cols-1 {
  width: 25%;
}
.cols-2 {
  width: 50%;
}
.cols-3 {
  width: 75%;
}
.cols-4 {
  width: 100%;
}

A noter qu’on a ici utilisé la concaténation, qui marche à merveille avec Sass en utilisant tout simplement #{$ma-variable}.

LESS ne permet pas exactement de faire des boucles, on doit utiliser une fonction récursive et oui, ce n’est pas idéal :

.less
1
2
3
4
5
6
7
8
9
10
11
12
13
@columns: 4;
.loopWidthColumn (@i) when (@i > 0) {
  (~".cols-@{i}"){
    width: ((100 / @columns) * @i) * 1%;
  }
  // Fonction récursive qui s'appelle elle même
  .loopWidthColumn (@i - 1);
}
// on arrête la boucle
.loopWidthColumn  (0) {}</p>
<p>// 1er appel de la boucle
.loopWidthColumn  (@columns);

Extensions

LESS et Sass ont tous les deux des extensions disponibles pour faciliter le développement.

La principale extension pour Sass est Compass. Compass met à disposition de nombreux mixins pour écrire du CSS plus vite mais pas seulement. Il propose également des helpers, layouts, aides à la typographie, système de grille, des sprites pour les images, etc. En résumé, il y a tout ce que vous cherchez dans Compass !

LESS a de nombreuses extensions mais contrairement à Sass, elles n’ont rien à voir entre elles et sont développées par des équipes distinctes : il faut prendre du temps pour choisir ce dont on a besoin. Parmis les plus importantes :

Par exemple en utilisant Sass avec le framework Compass, vous obtenez un mixin background qui permet d’éviter d’avoir à gérer les problématiques cross browser avec les vendor prefixes :

.scss
1
2
3
4
5
6
7
.classe-a {
  @include background(
    image-url("foo.png"),
    linear-gradient(top left, #333, #0c0),
    radial-gradient(#c00, #fff 100px)
  );
}

est compilé en

.css
1
2
3
4
5
6
7
8
.classe-a{
  background: url('/foo.png'), -webkit-gradient(linear, 0% 0%, 100% 100%, color-stop(0%, #333333), color-stop(100%, #00cc00)), -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 100, color-stop(0%, #cc0000), color-stop(100%, #ffffff));
  background: url('/foo.png'), -webkit-linear-gradient(top left, #333333, #00cc00), -webkit-radial-gradient(#cc0000, #ffffff 100px);
  background: url('/foo.png'), -moz-linear-gradient(top left, #333333, #00cc00), -moz-radial-gradient(#cc0000, #ffffff 100px);
  background: url('/foo.png'), -o-linear-gradient(top left, #333333, #00cc00), -o-radial-gradient(#cc0000, #ffffff 100px);
  background: url('/foo.png'), -ms-linear-gradient(top left, #333333, #00cc00), -ms-radial-gradient(#cc0000, #ffffff 100px);
  background: url('/foo.png'), linear-gradient(top left, #333333, #00cc00), radial-gradient(#cc0000, #ffffff 100px);
}

Magnifique, hein?

Conclusion

L’utilisation de préprocesseurs CSS permet de mettre en place une optique DRY (Don’t Repeat Yourself) dans le code grâce aux mixins et à l’imbrication du code.

Ils sont très utiles bien que pas indispensables si vous travaillez sur des projets de petite envergure.

L’utilisation de variables, de boucles et de logique, les extensions disponibles et la facilité d’installation et de prise en main sont autant d’arguments en faveur de l’utilisation d’un préprocesseur CSS.

Il semble que Sass soit plus mature et plus intuitif que LESS et son utilisation avec Compass est un bonheur bien que moins évident à prendre en main que LESS.

Bien entendu il vous reste à lire les docs pour vous rendre compte de la puissance de ces préprocesseurs, je n’ai montré ici qu’une infime partie de ce qu’il est possible de faire!

Le mot de la fin : LESS est plus adapté aux débutants, Sass est plus high-level, mais si vous utilisez déjà LESS, pas de panique au moins vous préprocessez!

Pour commencer avec LESS, c’est ici.

Pour Sass, c’est  ou pour des super tutos avec Compass.

SALMOUK KHALED

Quel préprocesseur CSS utilisez-vous ?

Bonjour à tous ! Un préprocesseur CSS vous aide dans l’écriture de vos feuilles de styles. Qu’apporte t’il et faut-il l’utiliser ?

Le but n’est pas de dire « utiliser un préprocesseur CSS c’est mal, il faut coder en dur ! » ni « les préprocesseurs css c’est génial, il ne faut plus coder en dur ! »

Je veux juste vous démonter à quel point ces préprocesseurs représentent un gain de temps important dans un développement web. Pour cela, je vous propose un petit tour d’horizon de ces machines de guerre taillées pour le CSS.

Qu’est-ce qu’un préprocesseur CSS ?

Un préprocesseur CSS est un « programme » ou module sous Node.js  (pour Less et Sass) qui interprète votre code source pour générer un code standard du web : le CSS. Ce sont des générateurs dynamiques de CSS.

LESS et Sass (Syntactically Awesome Stylesheet) sont les préprocesseurs CSS les plus utilisés, ils permettent d’améliorer la syntaxe du langage en préservant ses fondamentaux, ses possibilités et sa conformité W3C.

Voici un exemple concret :

compass

Après la compilation :

compilé css

Et le CSS ?

Pour les novices, CSS est un langage dit descriptif qui vous permet de styler vos pages web par le biais de règles de styles. Cependant CSS3 connait encore quelques limitations, notamment l’utilisation de variables comme « $menu ».

Pour commencer, les variables

Less, SASS ou encore Stylus permettent de stocker des constantes qui seront interprétées par le préprocesseur choisi.

Les variables s’écrivent ainsi :

variables

Ce qui peut paraître déroutant lorsque l’on découvre un préprocesseur, c’est de découvrir des constantes de variables précédées de @ pour LESS et $ pour Sass. Le dollar étant aussi utilisé pour les variables PHP et le @ l’est aussi pour l’import en CSS classique.

Le Nesting

Les préprocesseurs Less, SASS ou encore Stylus permettent d’imbriquer du code de la même manière. Avec Sass il est également possible d’imbriquer des propriétés, ce que Less ne permet pas.

Un css classique

gif css

Un fichier SASS

nesting gif

Les Mixins

Ces dernières vous facilitent grandement la vie. C’est en quelque sorte un système de Classe qui permet une simplification dans l’écriture de vos CSS.

Je m’explique : Comme vous le savez, Internet Explorer est mort (ouf !) mais ce dernier a fait beaucoup de mal pendant son existence ! Grace aux mixins vous pouvez faire du préfixage de certaines règles de styles qui ne sont pas encore complètement implémentées dans les navigateurs dit « modernes ». C’est la base du DRY, le Don’t Repeat Yourself.

mixins

Cependant le préprocesseur css va plus loin avec @extend qui étend une classe css.

Les Opérations mathématiques & logiques

math

Ces derniers permettent d’utiliser les opérateurs mathématiques. Ah ouais vous allez me dire ! et bah oui ! ces machines de guerres vont directement calculer vos colonnes pour vous faire une petite grille rien qu’à vous !

Le seul point négatif est le risque de mélanger les pixels avec des valeurs en pourcentage.

Les extensions

Pour Sass, il existe un framework nommé Compass qui vous permet de faire des sprites pour vos images mais pas seulement ! Compass permet l’utilisation d’@include, vous bénéficiez alors d’un préfixage pour les vieux navigateurs, ce qui n’est pas négligeable avec IE.

Vous avez également Susy, une extension juste géniale ! Susy permet de faire une grille sans passer par un système de classe à la Twitter bootstrap. Cela permet de mieux contrôler son css car il n’est pas codé en dur directement dans le html.

Mais rassurez vous pour Less, il existe CSScomb, clean-css ou encore Autoprefixer !

Conclusion

Comme vous avez pu le lire, l’un des intérêts d’un préprocesseur CSS est de vous simplifier la vie mais attention, il ne faut pas viser uniquement la facilité, vous risquerez de générer un code CSS pourri.

Attention, si vous faites un mauvais usage des préprocesseurs css, vous allez progressivement perdre vos connaissances en CSS pur et dur. Prenez votre temps et ne perdez jamais de vue les fondamentaux, c’est très important.

Je vous recommande de travailler sur la syntaxe et vous verrez ce que ces bijoux peuvent vous apporter. Testez Can I use , vous verrez, c’est fait pour vous !

Vous pouvez aussi en profiter pour découvrir les préprocesseurs HTML style Jade qui permettent cette simplification propre aux préprocesseurs.

Et vous ! Quel préprocesseur CSS utilisez-vous ?

Comment installer Sugar CRM sur un serveur dédié VPS avec BitNami ?

Qu’est ce que Sugar CRM ?

sugarcrmSugar CRM est un logiciel de suivi de la relation client très évolué et open-source . Cette solution peut facilement être installée sur un serveur vps à l’aide de l’installeur fourni par l’éditeur Bitnami .

Le site officiel de Sugar CRM : http://www.sugarcrm.com/

Qu’est ce que Bitnami ?

 Bitnami  Bitnami est un éditeur qui propose des solutions completes pour l’installation sur serveurs de nombreuses applications open-sources , dont Sugar CRM .

Le site de Bitnami : https://bitnami.com/

les applications disponibles : https://bitnami.com/stacks

 

Pour installerSugar CRM il faut que votre vps soit équipé d’une version nue de debian 7 ou supérieure, aucun serveur web ne doit être installé . Vous devez pouvoir vous conecter en ssh .

Au cours de l’installation vous créerez le compte du premier utilisateur qui sera aussi l’administrateur du serveur Sugar CRM . Vous devrez aussi renseigner les paramètres d’une adresse mail pour cet utilisateur , ces paramètres sont les mêmes que ceux que vous renseignez dans un logiciel de messagerie comme windows live mail ou thunderbird ( adresse, mot de passe, serveur smtp , port du serveur ) . Rassemblez toutes ces informations avant de lancer l’installation.

Procédure

Comment installer Sugar CRM sur un serveur dédié VPS avec BitNami ?

1) – Prérequis :

Les versions de Debian livrées sur les vps LWS varient . Demandez l’installation d’une version 7 ou supérieure nue , ou réinstallez vous même cette version depuis votre pannel client  ( celà effacera toutes les données du serveur !)

a) – Installez nano qui est l’éditeur de texte utilisé dans cette procédure .

apt-get install nano

b) –  Si votre serveur est sous une version Debian 7 , les sources peuvent ne plus être à jour , ouvrez le fichier sources.list

nano /etc/apt/sources.list

Effacez ce qu’il contient ou commentez les lignes existantes avec un # , et collez ces sources à la place :

## Debian Wheezy - dépôts officielsdeb http://ftp.fr.debian.org/debian/ wheezy maindeb http://ftp.fr.debian.org/debian/ wheezy-updates maindeb http://security.debian.org/ wheezy/updates main

mettez à jour le serveur

apt-get updateapt-get upgrade

c) – Pour éviter des erreurs de certificats, installez ca-certificates

apt-get install ca-certificates

d) – reconfigurez les locales en lançant cette commande

dpkg-reconfigure locales

lorsque  Jeux de paramètres régionaux à créer : s’affiche, entrez le numéro qui correspond à fr_FR.UTF-8 UTF-8

e)- réglez la zone horaire de votre serveur

dpkg-reconfigure tzdata

Choisissez 8 ( pour europe ) et 35 ( pour Paris )

f) – Installez Fail2ban , un logiciel qui protège votre serveur des attaques par bruteforce . Vous disposerez d’une protection basique de l’accès SSH immédiatement . Si vous désirez optimiser la protection rendez vous sur cette page : https://www.isalo.org/wiki.debian-fr/Fail2ban

apt-get install fail2ban

2) – Installation de Sugar CRM

Connectez vous en ssh au serveur vps .

placez vous maintenant dans un répertoire temporaire

cd /tmp

Avec votre navigateur rendez-vous sur la page de téléchargement Gitlab de bitnami : https://bitnami.com/stack/sugarcrm

Cliquez droit sur le lien de téléchargement de la version Linux 64 bits et copiez le .

Retournez sur votre console ssh , entrez wget suivi d’un espace collez le lien de téléchargement puis validez .

( l’adresse du lien donné dans l’exemple ci dessous n’est peut-être plus valable, relevez bien le lien sur le site de l’éditeur Bitnami )

wget https://bitnami.com/redirect/to/65094/bitnami-sugarcrm-6.5.21-1-linux-x64-installer.run

Une fois le téléchargement terminé vous devez rendre exécutable le fichier avec la commande chmod 755 [nom du fichier]

pour notre exemple :

chmod 755 bitnami-sugarcrm-6.5.21-1-linux-x64-installer.run

Entrez ensuite la commande suivante pour lancer l’installation ./[nom du fichier téléchargé] ce qui donne pour notre exemple :

./bitnami-sugarcrm-6.5.21-1-linux-x64-installer.run

L’installeur va vous poser plusieurs questions , répondez ainsi :

PhpMyAdmin [Y/n] :    YIs the selection above correct? [Y/n]:      YSelect a folder [/opt/sugarcrm-6.5.21-1]:     validezYour real name [User Name]:                         votre NomEmail Address [user@example.com]:            votre adresse mailLogin [user]:                                          l'identifiant que vous souhaitez utiliser pour accéder à SugarCRMPassword :                                         choisissez un mot de passePlease confirm your password :       confirmez le mot de passeDo you want to configure mail support? [y/N]:                  YDefault email provider:[1] GMail[2] CustomPlease choose an option [1] :             choisissez 1 pour une adresse chez gmail sinon choisissez 2Username []:                                  Attention ! entrez votre adresse mail complète ! ex: paul@exemple.comPassword :                                     Le mot de passe de votre adresse mailRe-enter :                                       confirmez le mot de passeSMTP Host []:                               l'adresse du serveur SMTP de votre hébergeur MailSecure connection[1] None[2] SSL[3] TLSPlease choose an option [3] :            choisissez le chiffre qui correspond au mode de connection à votre serveur smtp Do you want to continue? [Y/n]:          Y

L’installation va durer quelques minutes , à la fin l’installeur vous demande si vous voulez démarrer SugarCRM – répondez Y

Launch Bitnami SugarCRM Stack [Y/n]:      Y

Les trois dernières commandes vont vous permettre de faire démarrer SugarCRM avec votre serveur vps si nécessaire .

Il s’agit de se placer dans le répertoire d’installation, de copier le script de démarrage dans /etc/init.d et de l’activer pour le démarrage .

cd /opt/sugarcrm-6.5.22-0cpt ctlscript.sh /etc/init.dupdate-rc.d ctlscript.sh start 2 2 .

 

Sugar CRM est prêt, vous pouvez accéder à l’interface web en entrant l’adresse de votre serveur .

Intelligence Artificielle, 4e révolution industrielle ?

Intelligence Artificielle, 4e révolution industrielle, c’est en tout cas défini comme tel par la 46e édition du forum de Davos. Assistant virtuel, agent conversationnel, usine intelligente, domotique, voiture autonome, au niveau de la société, l’ Intelligence Artificielle, ou plutôt IA, c’est déjà aujourd’hui. Au niveau de l’entreprise c’est également une réalité qu’il faut observer.

Pour l’entreprise l’impact est bien plus profond qu’une transformation digitale et plus complexe qu’un projet IT. La transformation est multidimensionnelle car l’intégration du numérique a une influence sur des sujets multiples et hétérogènes. Au niveau RH sur des sujets comme l’intégration, la fragmentation du travail, ou la transmission et le partage du savoir. Au niveau de l’organisation qui passe d’un modèle hiérarchique à un système réticulaire pour des besoins de transversalité et de réactivité. Au niveau de l’intégration et de l’exploitation de technologies où l’entreprise doit faire face à un foisonnement de nouveautés : API, Cloud, Blockchain, 3D, cognitif. Un contexte où il faut éviter au maximum la multiplication de systèmes tout en réussissant l’intégration de la technologie dans la chaîne métier. Au niveau de la culture d’entreprise car désormais toute l’organisation parle de client, d’usage et de service.

De la recherche de la perfection au besoin de rapidité.

Il y a le concept et sa mise en oeuvre, ce qui compte c’est le résultat. La recherche de la perfection est trop longue et trop coûteuse, c’est aujourd’hui la rapidité et le time-to-market qui compte. Le ‘fell-fast’ est devenu un principe business et le modèle celui des “factories” (content factory, digital factory, data factory, design factory, etc.) ou comment s’industrialiser pour aller plus vite en rationnalisant et en mutualisant les moyens.

C’est le cas par exemple chez l’IBM Studios Paris, réunissant sur un plateau commun les experts de la phase du design à celle de la mise en mise en production. Une organisation agile, qui a permis de développer une application de maintenance prédictive pour Airbus en seulement 2 mois. Un délai court rendu possible par une approche projet qui repose sur la “co-création”, mettant fin au process projet itératif binaire et à son binôme éculé client / prestataire. Deuxième levier de gain de temps, l’utilisation de la solution d’intelligence cognitive Watson qui favorise la qualité de conseil et l’acquisition de connaissances de l’équipe projet. Une économie de temps en phase d’analyse ou de conception car Watson permet l’analyse fine de bases connaissances et documentaires très volumineuses, permettant ainsi à l’équipe projet de se concentrer sur la production de valeur. Dans un autre registre, celui de la santé, Watson va prendre en charge 150h de lecture hebdomadaire pour un médecin. Gain de souplesse, de modularité ou d’efficacité, l’ Intelligence Artificielle est aussi un système de protection de temps perdu.

Autre exemple pour illustrer la facilité de l’intégration de cette technologie, voici comment développer vous-même une application qui vous permette de détecter la personnalité avec Watson grâce au service “Personality Insights”. Une analyse faites à partir d’un texte rédigé par quelqu’un. En terme de résultat ça donne ça :

watson_results_graph

Un service que vous pouvez tester vous-même sur la plateforme de démo. On imagine assez facilement le potentiel RH de ce type d’application pour le recrutement, les bilans de compétences ou l’intégration d’un nouveau collaborateur.

L’Intelligence Artificielle, un assistant personnel surdoué.

L’Intelligence Artificielle c’est une intelligence de compréhension. Pour ce qui est de prendre des décisions ou d’accomplir une tâche ses capacités se limite encore à des processus automatisables. L’Intelligence Artificielle ne prend pas de décision, c’est une aide à la décision. Pour fonctionner l’ Intelligence Artificielle mobilise 3 leviers :

  • L’analyse prédictive
  • L’analyse cognitive : en utilisant notamment des données non-structurées
  • Un moteur de règle = des décisions nourrit par l’homme

L’homme reste maitre à bord mais l’algorithme a tué le script, c’est la machine qui a changé, elle apprend. L’ Intelligence Artificielle c’est un assistant personnel surdoué qui est là pour compléter le dispositif humain.

Intelligence collective, intelligence cognitive, intelligence émotionnelle, intelligence augmentée, nous sommes avant tout entré dans l’ère du smart, qui redéfini notre relation avec l’humain, l’entreprise, le travail, le monde et la vie d’une façon générale. Une augmentation plus qu’une évolution, une valeur ajoutée plus qu’un remplacement ou une substitution. Qu’elle traduise les notions d’intelligence augmentée ou de communication augmentée, l’ Intelligence Artificielle est une technologie orientée vers la création de valeur de qualité et d’efficacité.

Hadoop What is it and why does it matter? — KHALEDSALMOUK|IT WORKER

Hadoop is an open-source software framework for storing data and running applications on clusters of commodity hardware. It provides massive storage for any kind of data, enormous processing power and the ability to handle virtually limitless concurrent tasks or jobs. Let’s take a look at what some of those terms mean. Open-source software. Open-source software…

via Hadoop What is it and why does it matter? — KHALEDSALMOUK|IT WORKER