Tutoriels vidéos
Windows server
  • Windows Serveur 2012 : Active Directory et DNS

    Windows Serveur 2012 : Active Directory et DNS Contrairement à Windows 2008 R2, il faut débord installer le rôle avant de créer L'active Directory. Pré-requis: - Une adresse IP statique doit être configuré. I - Installation du service Active directory et DNS Dans la console "Server Manager", rendez-vous dan[...]

  • Les types de comptes d’utilisateurs windows

     Les types de comptes d’utilisateurs Windows Il existe plusieurs types de comptes d’utilisateurs dans Windows : Comptes Administrateur : Ils permettent aux utilisateurs d’ouvrir une session en tant qu’administrateurs. Ce compte peut exécuter n'importe quelle instruction sur le[...]

  • Comment tester un login Windows sans ouvrir de session

    Comment tester un login Windows sans ouvrir de session. Voici un utilitaire qui me rend de grand service. testADLogin permet de tester la validité d’un compte dans une architecture Active Directory sans ouvrir de session. En plus le programme est hyper simple. Tout est dit dans le titre, vous allez pouvoir t[...]

  • Gérer Windows Server en ligne de commande

    Pourquoi installer Windows Server Core ? Lorsque l’on installe Windows Server, deux options s’offrent à nous : une installation complète comprenant l’interface graphique, et une installation minimale – presque – sans interface graphique (core). Installer Windows Server en mode « core » ne signi[...]

  • Windows Serveur 2012 : DHCP

    Windows Serveur 2012 : DHCP Ce tutoriel traitera des options de base du rôle DHCP, les configurations avancée sera traité dans un autre tutoriel. I) Installation du service DHCP Dans la console "Server Manager", rendez-vous dans la partie "Dashboard" puis cliquer sur "Add roles and features", La fenêtre ci-[...]

  • réseaux IP
  • Simuler un réseau WAN entre deux réseaux LAN

    Simuler un réseau WAN entre deux réseaux LAN   A partir de sa version 2.6, le noyau Linux dispose d'une fonction permettant de simuler certaines caractéristiques comme un délais de transit, une perte de paquets ou même un débit maximal sur une simple interface réseau locale. J'avais déjà parlé de ce s[...]

  • Simuler un lien WAN sous Linux

    Simuler un lien WAN sous Linux Il peut être utile, dans le cadre de tests applicatifs, de simuler sur votre réseau local (LAN), les caractéristiques d'une liaison distante (WAN). En effet, vos applications peuvent très bien fonctionner sur un réseau LAN et devenir inexploitable sur des liaisons WAN. Nous allons [...]

  • surveiller un réseau informatique, de nombreuses commandes

    Normal 0 21 false false false FR X-NONE AR-SA [...]

  • Découpage d'une plage d'adresses

    Découpage d'une plage d'adresses Ce chapitre va vous demander beaucoup d'attention et de réflexion. Il va y avoir pas mal de calculs et de notions à maîtriser. Ne les négligez pas, car la compréhension des notions abordées sera nécessaire pour la suite du cours ! Les découpages que nous allons aborde[...]

  • Scanner les adresses IP utilisées sur un réseau sans aucun

    Si vous souhaitez scanner une plage d’adresse IP sur votre réseau afin de vérifier la disponibilité d’une ou plusieurs adresses ou inventorier vos machines, voici une astuce toute simple pour le faire sans outils spécifiques,depuis une invite de commande Windows. Pour cela nous allons utiliser [...]

  • linux
  • Installation de Zimbra OSE 7.1.3 sous Ubuntu 10.04 LTS 64bi

    Installation de Zimbra OSE 7.1.3 sous Ubuntu 10.04 LTS 64bits Dans ce premier tutoriel consacré à Zimbra vous allez voir comment installer une machine virtuelle sous Ubuntu 10.04 LTS pour accueillir notre serveur Zimbra. Environnement de test: Comme je l’ai dit dans mon premier article consacré à Zimbr[...]

  • Serveur DHCP sous Linux

    Serveur DHCP sous Linux I. Présentation Un serveur DHCP permet de fournir automatiquement une configuration IP à une machine, par exemple à des ordinateurs, des smartphones, des imprimantes réseau, en gros tous ceux qui peut être connecté à un réseau. Cette configuration IP est composée : d’une adresse IP d’[...]

  • Configuration d'un serveur dédié de A à Z

    Installation d'un serveur dédié de A à Z Installation, configuration et administration d'un serveur dédié Ces tutoriaux ont été réalisés sous Debian (versions Etch 4.0 et Lenny 5.0) mais peuvent être transposés à d'autres distributions Linux, notamment Ubuntu. Ils sont applicables aux serveurs dédiés 1&[...]

  • Installation pas à pas de Xen sous Debian

    Installation pas à pas de Xen sous Debian Le but de ce billet est d'installer un serveur de de virtualisation Xen (Wiki) sur un système GNU/Linux Debian. Ce dernier pourra héberger de manière virtuelle (c'est à dire sur la même machine physique) un nombre important de serveurs, mutualisant ainsi votre [...]

  • Simuler un réseau WAN entre deux réseaux LAN

    Simuler un réseau WAN entre deux réseaux LAN   A partir de sa version 2.6, le noyau Linux dispose d'une fonction permettant de simuler certaines caractéristiques comme un délais de transit, une perte de paquets ou même un débit maximal sur une simple interface réseau locale. J'avais déjà parlé de ce s[...]

  • virtualisation
  • Installation pas à pas de Xen sous Debian

    Installation pas à pas de Xen sous Debian Le but de ce billet est d'installer un serveur de de virtualisation Xen (Wiki) sur un système GNU/Linux Debian. Ce dernier pourra héberger de manière virtuelle (c'est à dire sur la même machine physique) un nombre important de serveurs, mutualisant ainsi votre [...]

  • Administration et utilisation d'Hyper-V R2

    Administration et utilisation d'Hyper-V R2 Nous allons voir dans ce guide comment administrer Hyper-V R2. Une fois connecté sur votre console d'administration (Hyper-V Manager), toutes les actions disponibles se trouvent dans la partie droite de votre MMC (partie « Actions »).        [...]

  • Installation et configuration de VMware Vcenter Server 5.0

    Installation et configuration de VMware Vcenter Server 5.0 I - Pré-requis Le .NET Framework 3.5 ou plus doit etre installé sur le serveur, comme le montre l'image ci-dessous, II - Installation de la partie serveur Inséré le DVD ou monté l'image ISO sur le serveur, la fenêtre ci-dessous s'ouvre, cliquer su[...]

  • installer un hyperviseur VMware ESXi 5.5

    Vmware est pour moi la meilleur solution de Virtualisation. Je profite justement d’une install d’un Hyperviseur Vmware Esxi 5.5 pour vous rédiger un petit tutoriel sur son installation. 1) Installation d’un hyperviseur ESXI -Tous d’abord inscrivez vous sur le site de Vmware est téléchargez gratuitement l’I[...]

  • mise en place du rôle Hyper-V sous Windows Serveur 2012 R2

    mise en place du rôle Hyper-V sous Windows Serveur 2012 R2 ainsi que la configuration d’une machine virtuel. Rappel : Hyper-V, également connu sous le nom de Windows Server Virtualisation, est un système de virtualisation basé sur un rôle de Windows Server. Hyper-V vous permet de consolider les charges de[...]

  • ACTIVE DIRECTORY
  • Windows Serveur 2012 : Active Directory et DNS

    Windows Serveur 2012 : Active Directory et DNS Contrairement à Windows 2008 R2, il faut débord installer le rôle avant de créer L'active Directory. Pré-requis: - Une adresse IP statique doit être configuré. I - Installation du service Active directory et DNS Dans la console "Server Manager", rendez-vous dan[...]

  • Lister les comptes ordinateurs inactifs de votre domaine av

    Lister les comptes ordinateurs inactifs de votre domaine avec la commande DSQUERY   Lister les comptes ordinateurs inactifs de votre domaine avec la commande DSQUERY. Dans ce tutoriel, nous utiliserons la commande dsquery, pour effectuer quelques tâches d’administrations sur notre domaine Acti[...]

  • Les types de comptes d’utilisateurs windows

     Les types de comptes d’utilisateurs Windows Il existe plusieurs types de comptes d’utilisateurs dans Windows : Comptes Administrateur : Ils permettent aux utilisateurs d’ouvrir une session en tant qu’administrateurs. Ce compte peut exécuter n'importe quelle instruction sur le[...]

  • Comment tester un login Windows sans ouvrir de session

    Comment tester un login Windows sans ouvrir de session. Voici un utilitaire qui me rend de grand service. testADLogin permet de tester la validité d’un compte dans une architecture Active Directory sans ouvrir de session. En plus le programme est hyper simple. Tout est dit dans le titre, vous allez pouvoir t[...]

  • Active Directory

    Active Directory I. L’Active Directory L’Active Directory est un annuaire LDAP pour les systèmes d’exploitation Windows, le tout étant créé par Microsoft. Cet annuaire contient différents objets, de différents types (utilisateurs, ordinateurs, etc.), l’objectif étant de centraliser deux fonctionnalit[...]

  • Deployment
  • la mise en place de MDT pour réaliser des déploiements d'OS

    la mise en place de MDT pour réaliser des déploiements d'OS  Ce qu’il vous faut Windows ADK http://www.microsoft.com/fr-fr/download/details.aspx?id=39982 Une ISO Windows 8.1 http://technet.microsoft.com/fr-fr/evalcenter/hh699156.aspx Plus d’info sur le choix de l’ISO : choix-iso-creation-mas[...]

  • Masquer la connexion Wifi au déploiement de Windows 8.1 ave

    Masquer la connexion Wifi au déploiement de Windows 8.1 avec MDT 2013 Il y a un bug dans MDT 2013 à la création de la séquence de tâches pour déployer Windows 8.1. En effet la séquence de tâches utilise le mauvais modèle de fichier de réponse où il manque plusieurs propriétés dans la section <OOBE>, com[...]

  • Migration Windows XP vers Windows 8.1 avec MDT 2013

    Migration Windows XP vers Windows 8.1 avec MDT 2013 Vous souhaitez réaliser une migration Windows XP vers Windows 8.1 avec MDT 2013? C’est possible, mais pas si simple. Avant d’entrer dans le vif du sujet, il faut voir les nouveautés de Windows ADK pour Windows 8.1 et les nouveautés MDT 2013. Étant donné qu’USMT[...]

  • Créer l’image de référence Windows 8.1 avec MDT 2013

    Précédemment j’ai écrit comment déployer Windows 8.1 avec MDT 2013. Mais qu’en est-il de l’image de référence? Cette méthode consiste à déployer Windows 8.1, installer vos logiciels, configurer certains options puis exécuter sysprep et capturer l’image. C’est cette image que vous utiliserez par la suite en produc[...]

  • Déployer Windows 8.1 avec MDT 2013

    Si vous êtes nouveau dans le déploiement de Windows, je recommande toujours Microsoft Deployment Toolkit (MDT) aux professionnels de l’informatique qui souhaitent personnaliser et déployer Windows dans leurs petites et moyennes organisations. Cet outil fournit une interface utilisateur facile à utiliser et automa[...]

  • Cisco
  • Configurer et vérifier NTP dans le mode client et le mode s

    Configurer et vérifier NTP dans le mode client et le mode serverSynchronisation temporelle NTP1. Network Time Protocol (NTP)Network Time Protocol (NTP) est un protocole TCP/IP qui permet de synchroniser à travers le réseau l’horloge locale des ordinateurs sur une date et une heure de référence. Le projet NTP propose u[...]

  • ROUTAGE STATIQUE

    ROUTAGE STATIQUE Normal 0 21 false false false FR X-NONE AR-SA [...]

  • Configurer un tunnel IPSec Cisco entre deux réseaux locaux

    Configurer un tunnel IPSec Cisco entre deux réseaux locaux Un petit poste "pense-bête" pour configurer un tunnel IPSec avec "pre-share key" (c'est à dire une clés secrète seulement connue par les deux sites) et cryptage AES 256 bits entre deux LAN connectés à Internet par des routeurs Cisco (compatible avec I[...]

  • Installer un serveur TFTP pour vos Cisco

    Installer un serveur TFTP pour vos Cisco Un rapide billet pour rappeler les étapes nécessaires à la mise en place d'un serveur TFTP sur un système GNU/Linux (Debian Squeeze) afin de sauvegarder les configurations de vos routeurs Cisco. Installation du serveur TFTPD On utilise le paquet tftpd qui se trouve dan[...]

  • Cisco et le routage inter VLAN

    Cisco et le routage inter VLAN Nous allons dans ce billet mettre en place une architecture réseau basée sur des équipements Cisco (un routeur 1841 et un switch 2960). Deux réseaux LAN différents (un pour les chefs, un autre pour le peuple) seront disponibles sur le même switch (en utilisant les fonctions VLAN). L[...]

  • supervision
  • Installation pas à pas de Nagios

    Installation pas à pas de Nagios Trêve de blabla, entrons directement dans le vif du sujet avec l'installation du système d'exploitation et des pré-requis systèmes qui vont servir de base à notre serveur de supervision. Avant de commencer L’installation de Nagios est à ré[...]

  • Installation Opsview sur Ubuntu 8.04 LTS

    Installation Opsview sur Ubuntu 8.04 LTS Pré-Requis L’installation Opsview demande quelques pré-requis, mais il s’avère qu’il est très simple de les satisfaire. Entrer le dépôt d’Opsview dans la source.list de APT Java est obligatoire (mais pas d’inquiétude, il sera installé avec les autres dépendances) [...]

  • Installation de Cacti sous Debian

    Installation de Cacti sous Debian  Les systèmes informatiques d'entreprise associent une diversité de services proposés (routage, proxy, serveur web...), à plusieurs types de réseaux (LAN, Intranet, DMZ, Internet...). La disponibilité et le bon fonctionnement de chaque machine participant à cet ensemble[...]

  • Le serveur de supervision libre – PART 4

    Le serveur de supervision libre – PART 4 Nous arrivons bientôt à la fin de l'installation de notre serveur de supervision. Avec Nagios et Centreon il est parfaitement opérationnel. Je trouve cependant qu'il manque encore à Centreon des fonctions de graphes évoluées. C'est pour cela que je propose d'ajouter s[...]

  • Le serveur de supervision libre – PART 1

      Le serveur de supervision libre – PART 1 Cela fait maintenant un petit moment que ce blog existe. Il aborde bien des sujets autours des logiciels libres mais il y en a un qui suscite plus d'intérêt que les autres: la supervision système et réseau. La complexité de ces logiciels et la faible docum[...]

  • Windows Server Core
  • Configurer pas-à-pas un Windows 2008 en version CORE

    Configurer pas-à-pas un Windows 2008 en version CORE La nouvelle version du système d’exploitation serveur de Microsoft est vraiment géniale, à mon sens ! Pleins de nouveautés font leurs apparitions, comme le mode CORE, par exemple. Mais tout «indowsien/ne » que n[...]

  • Basculer entre les modes Graphique et Core sur Windows Serv

    Basculer entre les modes Graphique et Core sur Windows Server 2012 Un serveur Windows Server 2008 ou Windows Server 2012 peut être installé dans un mode appelé mode Core ou Minimale. Il s’agit d’un mode d’installation épuré ou le Shell graphique n’est pas installé. Autrement dit il n’y a ni bu[...]

  • Windows Server 2012 : Activer l’interface graphique après u

    Windows Server 2012 : Activer l’interface graphique après une installation en mode Core Si vous avez installé Windows  Server 2012 en mode « Core » et que vous souhaitez finalement activer l’interface graphique, pas de panique, vous n’aurez pas à tout réinstaller ! Ce petit tutoriel vous explique [...]

  • Installer Windows Server en mode « core »

    Installer Windows Server en mode « core » I. Les options d’installation Il existe deux manières d’utiliser en mode « core » :   Windows Server Core « standard » Il s’agit tout simplement d’une installation minimale qui donne lieu à un système sans interface graphique et allégé tel [...]

  • Modifier la résolution de l’écran

    Modifier la résolution de l’écran Pour changer la résolution d’écran, nous utiliserons la commande Set-DisplayResolution. En fait, c’est simple d’utilisation puisqu’il suffit de préciser la largeur et la hauteur de l’écran qui définiront la résolution. Par exemple, si l’on veut définir une résol[...]

  • script
  • Le JavaScript++

    TypeScript est un langage très récent (février 2012) qui a été conçu par Anders Hejlsberg, également concepteur du langage C#. Le but premier de TypeScript est de rendre plus facile et plus fiable l'écriture de code en JavaScript pour des applications de grande ampleur. Cet article présentera de fa[...]

  • Lister les alias Powershell

    Lister les alias Powershell Il est possible d’utiliser des Alias pour appeler les CmdLets de Powershell. Autrement dit il est possible d’utiliser un raccourcis plutôt qu’une commande parfois fastidieuse à taper ou à se souvenir. Voici comment obtenir la liste des Aliaspro[...]

  • exécuter un script PowerShell

    Comment exécuter un script PowerShell Dans l’article comment installer et vérifier le bon fonctionnement de PowerShell, nous avions ouvert l’interpréteur de commande PowerShell et exécuté quelques instructions. Si l’utilisation de l’interpréteur suffit pour lancer quelques commandes occasionnelles,[...]

  • PowerShell : Arbre de processus

    PowerShell : Arbre de processus Depuis quelques temps, je travaille avec PowerShell, le langage de scripts de Microsoft. C'est un langage que j'ai eu beaucoup de mal à prendre en main. En avançant dans l'apprentissage, on se rend compte que cet outil peut se révéler très puis[...]

  • Empêcher les mises à jour Adobe Reader DC

    Empêcher les mises à jour Adobe Reader DC Un problème qui se pose lorsqu'on administre un parc informatique est celui des droits utilisateurs. Ne pas leur laisser les droits administrateurs est une règle de base. Cependant, cela peut parfois bloquer les mises à jour de c[...]

  • Messagerie
  • Zimbra OSE

    Zimbra OSE Dans cette série de tutoriel consacré à Zimbra, nous allons voir comment intégrér un serveur mail Zimbra dans une infrastructure système déja existante et comment l’intégrer dans un domaine Active Directory. Cela va se passer en plusieurs étapes: Configuration du serveur pour installer Zi[...]

  • Zimbra: Installation et configuration de Zpush 2

    Zimbra: Installation et configuration de Zpush 2 Bonjour, cela faisait longtemps que je n’avais pas fait de tutoriel pour Zimbra. Dans ce tuto je vais vous expliquer la configuration de Zpush 2 pour Zimbra 8 sous Ubuntu 12.04 LTS Qu’est-ce que ZPush? La version payante de Zimbra (NE) permet la synch[...]

  • Installation de Zimbra OSE 7.1.3 sous Ubuntu 10.04 LTS 64bi

    Installation de Zimbra OSE 7.1.3 sous Ubuntu 10.04 LTS 64bits Dans ce premier tutoriel consacré à Zimbra vous allez voir comment installer une machine virtuelle sous Ubuntu 10.04 LTS pour accueillir notre serveur Zimbra. Environnement de test: Comme je l’ai dit dans mon premier article consacré à Zimbr[...]

  • la messagerie électronique

    NOTIONS DE BASE RÉSEAU INFORMATIQUE réseau informatique Le réseau la reconnaissance des machines entre elles, le transport de l'information. L'adresse IP Les serveurs : à votre service ! Serveur / Client Les protocoles Exemple : Les serveurs mails 1. L'expéditeur écrit le courrier. 2. Il le post[...]

  • VOip
  • Qu’est-ce qu’un système PBX?

    Qu’est-ce qu’un système PBX? Le terme PBX revient souvent dans les offres des fournisseurs téléphoniques, parfois sous la forme de PBX hébergé, PBX IP ou Cloud PBX. Pour ceux qui connaissent moins leur lexique téléphonique, l’offre d’un système PBX avec des fonctionnalités quelconque[...]

  • De la téléphonie IP très facilement avec Asterisk

    De la téléphonie IP très facilement avec Asterisk Je vous propose en ce début d’année un tuto assez simple sur Asterisk. Si vous ne le connaissez pas, c’est un logiciel libre qui permet de faire de la téléphonie par IP, c’est assez sympa à faire ! Le tutorial a été réalisé sur une Debian 7.3 64bits m[...]

  • Qu’est ce que la Voix sur IP (VoIP)?

    Qu’est ce que la Voix sur IP (VoIP)? La Voix sur IP, raccourci de voix par le protocole internet, est aussi connue sous le terme de VoIP. La voix sur IP se réfère à la diffusion du flux de la voix sur les réseaux Internet, au lieu des réseaux téléphoniques RTC traditionnels. Le protocole Internet (IP) a ét[...]

  • Installer Asterisk 13 sur Debian 7

    Installer Asterisk 13 sur Debian 7 Bonjour à tous Nous allons voir dans ce tutoriel comment installer Asterisk 13 sur une machine virtuelle sous Debian 7. Installation d’ Asterisk Préparation à l’installation On commence par mettre à jour notre distribution et installer les dépendances nécéssair[...]

  • mettre en place sa téléphonie grâce à Asterisk

    la ligne téléphonique d'une freebox (et sûrement des autres "box") à Skype en passant par les très nombreuses offres disponibles sur le Net, la VoIP (Voice over IP) est partout. Pris dans le contexte d'une architecture domestique ou d'entreprise, la VoIP (Voice over IP ou Voix sur IP) est un nouveau faisc[...]

  • Recent Articles

      Fortinet VPN SSL Vous souhaitez que vos utilisateurs nomades aient toujours accès aux applications présentes au sein de votre entreprise au travers d’un navigateur web? Dans ce tutoriel, je vais vous montrer comment configurer un Firewall Fortinet (Fortigate) [...]

    06 Jul 2021 | 0 commentsVoir article

    Configurer et vérifier NTP dans le mode client et le mode server

    Configurer et vérifier NTP dans le mode client et le mode serverSynchronisation temporelle NTP1. Network Time Protocol (NTP)Network Time Protocol (NTP) est un protocole TCP/IP qui permet de synchroniser à travers le réseau l’horloge locale des ordinateurs sur une date et une heure de référence. Le projet NTP propose u[...]

    25 Jul 2020 | 0 commentsVoir article

    Création d’une règle de pare-feu avec un Fortigate

    Création d’une règle de pare-feu avec un Fortigate I. Présentation Après avoir découvert ce qu’est un Fortinet dans un premier article, je voudrais vous montrer comment mettre en place une règle de Firewall avec quelques-unes des options de sécurité les plus utilisées pour la sécurité ou l’optimisation de n[...]

    06 Aug 2018 | 2 commentsVoir article

    Qu’est-ce qu’un système PBX?

    Qu’est-ce qu’un système PBX? Le terme PBX revient souvent dans les offres des fournisseurs téléphoniques, parfois sous la forme de PBX hébergé, PBX IP ou Cloud PBX. Pour ceux qui connaissent moins leur lexique téléphonique, l’offre d’un système PBX avec des fonctionnalités quelconque[...]

    22 Jul 2018 | 0 commentsVoir article

    Le JavaScript++

    TypeScript est un langage très récent (février 2012) qui a été conçu par Anders Hejlsberg, également concepteur du langage C#. Le but premier de TypeScript est de rendre plus facile et plus fiable l'écriture de code en JavaScript pour des applications de grande ampleur. Cet article présentera de fa[...]

    17 Feb 2018 | 0 commentsVoir article

    De la téléphonie IP très facilement avec Asterisk

    De la téléphonie IP très facilement avec Asterisk Je vous propose en ce début d’année un tuto assez simple sur Asterisk. Si vous ne le connaissez pas, c’est un logiciel libre qui permet de faire de la téléphonie par IP, c’est assez sympa à faire ! Le tutorial a été réalisé sur une Debian 7.3 64bits m[...]

    13 Feb 2018 | 0 commentsVoir article

    Qu’est ce que la Voix sur IP (VoIP)?

    Qu’est ce que la Voix sur IP (VoIP)? La Voix sur IP, raccourci de voix par le protocole internet, est aussi connue sous le terme de VoIP. La voix sur IP se réfère à la diffusion du flux de la voix sur les réseaux Internet, au lieu des réseaux téléphoniques RTC traditionnels. Le protocole Internet (IP) a ét[...]

    13 Feb 2018 | 0 commentsVoir article

    Quelques astuces pour assurer la sécurité de vos données informatiques

    Quelques astuces pour assurer la sécurité de vos données informatiques   Sécurité informatique Chaque année, de nombreux utilisateurs et entreprises se font malheureusement piratés leurs données informatiques qu’elles soient personnelles ou professionnelles. Pour éviter e[...]

    22 Mar 2016 | 0 commentsVoir article

    Installer une VM Linux sur ESXi

    VMware vSphere ESXi Hypervisor comment configurer ESXi, le plus célèbre des virtualiseurs dit "barre métal" ou encore "hyperviseur type 1" (système dédié à la virtualisation) qui à une version gratuite limitée, mais largement utilisable pour un usage perso. Il a la particularité d'être extrêmement fiab[...]

    21 Mar 2016 | 0 commentsVoir article

    VMware vSphere ESXi Hypervisor

    VMware vSphere ESXi Hypervisor comment configurer ESXi, le plus célèbre des virtualiseurs dit "barre métal" ou encore "hyperviseur type 1" (système dédié à la virtualisation) qui à une version gratuite limitée, mais largement utilisable pour un usage perso. Il a la particularité d'être extrêmement fiable, [...]

    21 Mar 2016 | 0 commentsVoir article

    Le JavaScript++



    TypeScript est un langage très récent (février 2012) qui a été conçu par Anders Hejlsberg, également concepteur du langage C#. Le but premier de TypeScript est de rendre plus facile et plus fiable l'écriture de code en JavaScript pour des applications de grande ampleur.
    Cet article présentera de façon succincte les principaux ajouts de TypeScript par rapport à JavaScript comme le typage, les classes, et la modularité, sachant que pour ceux connaissant déjà JavaScript, l'apprentissage de TypeScript ne devrait être qu'une simple formalité.
    Puis, après la brève mention des principaux outils de développement utilisables avec TypeScript, nous comparerons l'approche de TypeScript avec deux autres langages similaires, CoffeeScript et Dart, et tenterons de montrer en quoi l'approche de TypeScript semble la plus viable à l'avenir.

    2. Typage

    2-1. Variables

    Le principal apport du langage TypeScript, celui qui justifie le nom même du langage, est la possibilité d'associer, facultativement, un type à une donnée.
    Typage explicite de variables
    Sélectionnez
    var pi: number;
    var message: string;
    var flag: boolean;
    var joker: any;
    Dans l'exemple ci-dessus, quatre variables sont déclarées sans être initialisées à l'aide d'un type dont la signification est explicite.
    • La variable pi a pour type number, un nombre entier ou flottant.
    • La variable message a pour type string, une chaîne de caractères.
    • La variable flag a pour type boolean, un booléen qui peut prendre la valeur true ou false.
    • La variable joker a pour type any, qui est le type par défaut qu'attribue TypeScript à une variable globale s'il ne parvient pas à déterminer son type lors de sa déclaration.
    Bien entendu, il est possible d'initialiser une variable au moment de sa déclaration comme on peut le voir ci-dessous :
    Typage implicite de variables
    Sélectionnez
    var pi = 3.14; // number
    var message = "Bonjour !"; // string
    var flag = true; // boolean
    var joker = null; // any
    Lors de la première initialisation d'une variable, TypeScript en infère automatiquement le type sans qu'il soit nécessaire de le mentionner explicitement.
    Ainsi, TypeScript, contrairement à JavaScript, peut être considéré comme un langage à typage statique.

    2-2. Fonctions

    Il est courant qu'une fonction renvoie un certain résultat. Le langage TypeScript permet de préciser le type du résultat attendu lors de la déclaration de la fonction.
    Par défaut et en l'absence d'instruction return, le type du résultat d'une fonction est void, c'est-à-dire aucun résultat.
    Typage d'une fonction
    Sélectionnez
    function triple(n: number): number {
      return 3 * n;
    }
    La fonction triple ci-dessus est déclarée comme prenant un paramètre de type number et renvoyant une valeur de type number.

    3. Classe

    La notion de classe introduite dans TypeScript anticipe la prochaine évolution de JavaScript (ECMAScript 6).
    Définition d'une classe
    Sélectionnez
    class Animal {
      name: string;
    
      constructor(name: string) {
        this.name = name;
      }
    
      shout(): string {
        return "...";
      }
    }
    Comme on peut le voir dans l'exemple ci-dessus, une classe Animal y est définie d'une façon proche de la plupart des langages orientés objet.
    La classe Animal possède ici un attribut (name), elle définit un constructeur (constructor) et une méthode (shout). Son instanciation se fait à l'aide de l'opérateur new comme ceci :
    Instanciation d'une classe
    Sélectionnez
    var animal = new Animal("pokemon");
    De pair avec la notion de classe, TypeScript implémente la notion d'héritage simple par l'utilisation du mot-clé extends.
    L'extension de la classe Animal de l'exemple précédent pourrait se faire ainsi :
    Héritage
    Sélectionnez
    class Lion extends Animal {
      sex: string;
    
      constructor(name: string, sex: string) {
        super(name);
    
        this.sex = sex;
      }
    
      shout(): string {
        return "Rooooaarrr!"
      }
    }
    Cette nouvelle classe Lion ajoute un nouvel attribut sex à la classe Animal et redéfinit la méthode shout.
    Puisque toutes les classes définies dans TypeScript sont considérées comme de nouveaux types, la classe Lion est du type Lion, et en vertu de l'héritage est aussi du type Animal.
    En remarque, malgré cet apport orienté objet à la syntaxe initiale de JavaScript, il faut avoir conscience que les limitations intrinsèques de JavaScript se reflètent également dans TypeScript. Par exemple, la notion d'attribut privé (private) d'une classe qui existe dans la plupart des langages orientés objet, bien que syntaxiquement présente dans TypeScript, n'est pas véritablement restrictive dans la mesure où un attribut privé pourra malgré tout être utilisé en dehors de sa classe avec une approche dynamique.

    4. Interface

    Une interface peut être vue tout d'abord comme une sorte de contrat minimum que doit respecter une structure de données en termes d'attributs et de méthodes. Cette structure de données peut être un objet {…} ou une classe.
    Définition d'interfaces
    Sélectionnez
    interface I1 {
        a: number;
    }
    
    interface I2 {
        b: string;
    }
    L'interface I1 ci-dessus indique que la structure de données implémentant I1 doit avoir à minima un attribut nommé a de type number. L'interface I2 indique que la structure de données l'implémentant doit avoir à minima un attribut nommé b de type string.
    Une interface est considérée comme un type à part entière, ce qui signifie qu'il est possible de définir une fonction qui prendrait un paramètre de type I1 comme l'exemple ci-dessous :
    Interface en tant que type
    Sélectionnez
    function fct(x: I1) {
        alert(x.a);
    }
    Cette fonction fct pouvant être appelée en passant en paramètre un objet ayant au moins un attribut nommé a :
    Objet implémentant une interface
    Sélectionnez
    fct({ a: 20, z: -1 });
    Un autre intérêt d'une interface, c'est qu'elle peut être considérée comme une classe n'ayant que des méthodes abstraites (ou pas de méthode du tout). Cela permet dans un langage comme TypeScript ne gérant que l'héritage simple, de se rapprocher du concept de l'héritage multiple, une classe pouvant implémenter (implements) plusieurs interfaces comme le montre l'exemple ci-dessous :
    Classe implémentant deux interfaces
    Sélectionnez
    class C implements I1, I2 {
        a: number;
        b: string;
        
        constructor(a: number, b: string) {
            this.a = a;
            this.b = b;
        }
    }
    Une instance de cette classe C pourrait tout à fait être passée en paramètre de notre fonction fct définie plus haut.

    Sélectionnez
    var c = new C(15, "bonjour");
    fct(c);
    Enfin, comme nous venons de le voir, une interface pouvant être considérée comme une classe abstraite, il est possible de faire hériter une interface d'une autre à l'aide du mot-clé extends :
    Héritage entre interfaces
    Sélectionnez
    interface I3 extends I2 {
      c: boolean;
    }
    Dans l'exemple ci-dessus, la nouvelle interface I3 dérive de l'interface I2 définie plus haut en ajoutant un attribut c de type boolean.

    5. Fonction anonyme fléchée

    Un autre apport notable de TypeScript à JavaScript est sa nouvelle manière de définir une fonction anonyme qui peut être dénommée ici notation « fléchée » (arrow function) en raison de l'utilisation du symbole =>.
    Fonction anonyme fléchée
    Sélectionnez
    function alertMsg(msg: string) {
      this.msg = msg;
      this.timer = setInterval(
        () => {
          alert(this.msg);
        },
        500);
    }
    La fonction anonyme fléchée est définie dans cet exemple en premier paramètre de l'appel à setInterval. À gauche du symbole => doit être mentionnée la liste de paramètres entre parenthèses, et à droite du symbole =>, le corps de la fonction anonyme entre accolades.
    L'avantage par rapport à l'actuelle norme de JavaScript (ECMAScript 5), est que la notation fléchée ne change pas la valeur de contexte du mot-clé this à l'intérieur de la fonction anonyme. Cela évite donc l'utilisation d'une variable intermédiaire servant à propager la valeur de this à l'intérieur de la fonction anonyme. Par exemple, la ligne de code précédente aurait pu être transcrite ainsi en JavaScript actuel :
    Équivalent JS de la fonction anonyme fléchée
    Sélectionnez
    function alertMsg(msg: string) {
      this.msg = msg;
      var _this = this;
      this.timer = setInterval(
        function () {
          alert(_this.msg);
        },
        500);
    }
    Cette nouvelle notation plus concise sera utile en particulier pour les fonctions callback appelées de façon asynchrone.
    Il convient aussi de noter que la norme ECMAScript 6, si elle est approuvée, reprendra cette notation ; TypeScript permettant ainsi de se familiariser en avance avec ces fonctions anonymes fléchées.

    6. Modularité

    La modularité en TypeScript est un sujet qui peut rapidement devenir complexe et nécessiterait un article en soi. Dans ce chapitre, nous nous contenterons de n'évoquer que les principales techniques.

    6-1. Référencement de fichiers

    TypeScript introduit de nouvelles techniques de modularisation devenues nécessaires par le typage statique et par l'héritage de classes. Parmi ces techniques de modularisation, le référencement d'un fichier TypeScript externe est peut-être la plus simple.
    Elle consiste à inclure de façon statique en tout début de fichier, un autre fichier source TypeScript contenant des déclarations nécessaires au compilateur afin qu'il en déduise entre autres les types et les héritages.
    source.ts
    Sélectionnez
    /// <reference path="module.ts"/>
    À noter que le référencement ressemble un peu aux #include des langages C/C++.
    C'est cette approche qui est en général adoptée pour utiliser des bibliothèques JavaScript déjà existantes via les fichiers de déclaration .d.ts.
    Sur certains environnements intégrés de développement comme Visual Studio, le référencement peut se faire implicitement, sans avoir besoin de mentionner le fichier contenant les dépendances de déclarations, même si un référencement explicite peut faciliter la documentation des dépendances entre fichiers sources.
    Ce référencement permet très simplement de bénéficier à l'intérieur du fichier source appelant, partageant le même espace de nommage, des déclarations de variables, de fonctions ou de classes présentes dans le fichier référencé.
    L'utilisation du référencement de fichiers se fait généralement pour les applications côté client où dans la page HTML il sera nécessaire soit de référencer via la balise <script> l'ensemble des fichiers JavaScript générés (c.f. index1.htm), soit de référencer le fichier issu de la concaténation éventuellement minifiée (.min.js) de ces fichiers JavaScript (c.f. index2.htm).
    index1.htm
    Sélectionnez
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <script src="module.js"></script>
        <script src="source.js"></script>
    </head>
    <body>
        ...
    </body>
    </html>
    Dans l'exemple ci-dessus, on suppose que les fichiers module.js et source.js sont le résultat de la compilation en JavaScript des fichiers module.ts et source.ts.
    index2.htm
    Sélectionnez
    <!DOCTYPE html>
    <html lang="fr">
    <head>
        <script src="source-module.min.js"></script>
    </head>
    <body>
        ...
    </body>
    </html>
    Dans l'exemple ci-dessus, on suppose que le fichier source-module.min.js est la concaténation du fichier module.js suivi du fichier source.js.
    Par souci de performance, la seconde solution consistant à fusionner les fichiers JavaScript résultants est en général privilégiée. C'est pourquoi les fichiers reliés par référencement (dans l'exemple module.ts) au fichier source principal (dans l'exemple source.ts) peuvent être qualifiés de modules internes, par opposition aux modules externes reliés par une autre méthode et que nous verrons un peu plus loin.
    L'inconvénient de cette approche est que cela peut engendrer des conflits de nommage entre deux variables globales, fonctions ou classes pouvant porter la même appellation. Pour remédier à ce problème, TypeScript propose la notion de module explicite.

    6-2. Module explicite

    En TypeScript chaque fichier source est implicitement un module.
    Il est possible de déclarer explicitement un module, ce qui basiquement créera un espace de nommage permettant de spécifier les variables, fonctions, interfaces ou classes pouvant être importées dans un autre fichier, par exemple via référencement. Un module explicite est introduit par le mot-clé module.
    module.ts
    Sélectionnez
    module M {
      var temp = "bonjour";
      export var id = 0;
      export function fct() {}
      export interface I {
        a: number;
      }
      export class C implements I {
        a: number;
      }
    }
    Dans l'exemple ci-dessus, le module M exporte, c'est-à-dire rend accessible, les éléments suivants :
    • la variable id ;
    • la fonction fct ;
    • l'interface I ;
    • et la classe C.
    La variable temp est quant à elle interne à ce module M et ne pourra pas être utilisée en dehors de ce module.
    Par exemple, dans ce même fichier source, l'instruction suivante utilisant la variable id est valide :
    module.ts
    Sélectionnez
    alert(M.id);
    alors que l'instruction ci-dessous utilisant la variable temp n'est pas valide :
    module.ts
    Sélectionnez
    alert(M.temp); // erreur

    6-3. Importation de modules externes

    Alors que précédemment la responsabilité de l'espace de nommage était au niveau du module appelé, forçant l'utilisateur à réutiliser l'espace de nommage du module concerné, il est possible de transférer la responsabilité de l'espace de nommage au niveau du fichier source appelant à l'aide des mot-clés import et require.
    Reprenons l'exemple de la section précédente, mais cette fois sans créer d'espace de nommage via le mot-clé module :
    module2.ts
    Sélectionnez
    export var id = 0;
    export function fct() {}
    export interface I {
      a: number;
    }
    export class C implements I {
      a: number;
    }
    Ainsi défini, ce fichier module2.ts peut être importé dans un autre fichier, qu'on supposera pour l'exemple présent dans le même répertoire que module2.ts, de la manière suivante :
    source2.ts
    Sélectionnez
    import m = require("./module2");
    
    m.id++;
    Ci-dessus, le symbole m ainsi défini via le mot-clé import est un nouvel espace de nommage englobant les éléments exportés du fichier module2.ts, sans avoir recours au référencement de fichiers via la syntaxe /// <reference>.
    Cette technique de modularisation est surtout pratiquée pour des applications côté serveur (e.g. Node.js) où les différents fichiers n'ont pas vocation à être combinés en un seul fichier final JavaScript. C'est la raison pour laquelle on peut parler de modules externes dans ce cas.

    7. Typage générique

    Le typage générique ajoute un niveau d'abstraction en rendant les types paramétrables, que ce soit dans une fonction, une classe ou une interface, sachant qu'au moment de l'appel effectif à cette fonction ou à cette classe, le type devra être explicitement défini.
    Le typage générique est surtout utile en TypeScript lorsqu'il s'agit d'assurer la cohérence du typage entre différents éléments. Par exemple, si on considère un tableau de nombres, on pourrait souhaiter disposer d'une fonction de concaténation assurant de concaténer ce tableau de nombres avec un autre tableau de nombres et non avec un tableau de chaînes de caractères ou d'autres choses. Par contre, on pourrait souhaiter que cette même fonction de concaténation puisse s'appliquer sur deux tableaux de chaînes de caractères ou autres, sans avoir besoin de réécrire une nouvelle fonction pour chaque type traité. C'est à ce moment-là qu'intervient le typage générique.
    Définition d'une fonction générique
    Sélectionnez
    function concatenate<T>(a1: T[], a2: T[]): T[] {
      return a1.concat(a2);
    }
    
    resultNumbers = concatenate<number>([1, 2], [3, 4]); // [1, 2, 3, 4]
    resultStrings = concatenate<string>(["a", "b"], ["c", "d"]); // ["a", "b", "c", "d"]
    resultError1 = concatenate<number>([1, 2], ["a", "b"]); // erreur
    resultError2 = concatenate<string>([1, 2], ["a", "b"]); // erreur
    resultAny = concatenate<any>([1, 2], ["a", "b"]); // [1, 2, "a", "b"]
    La syntaxe du typage générique est tout ce qu'il y a de classique pour les habitués de C++, C# ou de Java. Le type générique (dans l'exemple T) est déclaré entre chevrons <>, puis est utilisé comme un type ordinaire.
    L'exemple montre la concaténation de deux tableaux de nombres (resultNumbers) et de deux tableaux de chaînes de caractères (resultStrings), et montre aussi qu'il n'est pas possible de concaténer un tableau de nombres avec un tableau de chaînes de caractères (resultError1 et resultError2) sous peine de lever une erreur.
    Le typage générique est donc différent du type any puisqu'une fonction de concaténation entre deux tableaux de type any[] n'aurait pas levé d'erreur au niveau de la compilation comme l'indique le quatrième résultat de l'exemple (resultAny).

    8. Outils

    Bien que TypeScript soit d'abord un compilateur installable via Node.js, pour être exploité à son plein potentiel, il est recommandé qu'il soit associé à un environnement intégré de développement comme Visual Studio, WebStorm ou éventuellement Eclipse.
    Pour tester de petits morceaux de codes (snippets), il peut être intéressant d'utiliser le site TypeScript.io fonctionnant de façon similaire à JsFiddle.
    Aussi, la page de test mise à disposition par Microsoft peut également être utile pour voir immédiatement la transcription en JavaScript d'un code TypeScript.

    9. TypeScript et les autres

    Après cet aperçu concernant le « sucre syntaxique » de TypeScript, intéressons-nous au modèle de développement de ce langage comparativement à ses principaux concurrents que sont CoffeeScript (décembre 2009) et Dart (2011).

    9-1. Maturité

    On constate tout d'abord que TypeScript est le plus jeune des trois, n'étant apparu qu'en 2012. Ce retard de maturité est encore visible dans la mesure où la version de production 1.0 n'a été disponible que cette année 2014. Cependant, force est de constater qu'à l'instar de Google avec Dart, Microsoft et son concepteur restent très impliqués dans l'évolution de TypeScript, ce qui ne peut que rassurer ses utilisateurs. Concernant TypeScript, il est raisonnable de tabler sur deux à trois évolutions majeures par an.

    9-2. Code source

    Tout comme CoffeeScript et Dart, le code source du compilateur TypeScript est disponible en Open source (Licence Apache 2), sur le compte GitHub de Microsoft. Ce critère n'est donc pas discriminant pour évaluer la pertinence relative de ce langage sur les deux autres.

    9-3. Correspondance JavaScript

    La conversion de TypeScript vers le JavaScript est assez directe et le sera encore davantage avec l'officialisation de la norme ECMAScript 6 puisque TypeScript est un sur-ensemble de JavaScript. Il est donc très aisé d'identifier le morceau de code TypeScript ayant produit un morceau de code JavaScript. Cette forte correspondance (voulue) entre TypeScript et JavaScript permet à TypeScript de bénéficier sans trop d'efforts aux innombrables bibliothèques, API ou frameworks écrits en JavaScript. C'est évidemment un gros avantage.
    Ce n'est pas forcément le cas des deux autres langages. La syntaxe de CoffeeScript inspirée du langage Haskell peut parfois être absconse et en tous les cas significativement différente de JavaScript pouvant rendre le débogage, l'identification entre code source et le code traduit et l'importation de codes en JavaScript natifs non triviaux. Et cela est encore plus vrai pour Dart qui emploie une syntaxe différente à celle de JavaScript en s'inspirant davantage de Java et du C++. D'autant plus que les optimisations réalisées par Dart lors de la conversion en code JavaScript peuvent significativement changer la structure du code et l'ordre des instructions.
    En fin de document, on trouvera en annexe le résultat de la conversion en JavaScript d'un programme simple rédigé en trois versions : CoffeeScript, Dart et TypeScript. Le lecteur se convaincra facilement que TypeScript est syntaxiquement le langage le plus proche de JavaScript, le code source étant très similaire au code cible, tandis que dans le cas de Dart avec son code cible interminable, on peut se poser la question de son lien avec JavaScript.

    9-4. Portabilité

    Les trois langages permettent la conversion (ou transcompilation) en JavaScript et donc l'accès en théorie à tous les navigateurs du marché.
    Cependant, pour bénéficier pleinement des performances promises par Dart, il est nécessaire que le navigateur dispose d'une machine virtuelle DartVM, ce qui n'est le cas actuellement que pour Chrome, évidemment. Dans la mesure où il est peu probable que Microsoft et Apple implémentent une DartVM dans Internet Explorer et dans Safari, il est raisonnable de considérer que ce qui est souvent vendu comme l'avantage décisif de Dart, ne soit finalement réservé qu'à une fraction des navigateurs. Par conséquent, Dart, à terme, devrait vraisemblablement rester marginal. Un peu comme Google Web Toolkit (2006) dont on retrouve beaucoup de caractéristiques avec Dart, et qui n'a pas vraiment eu de succès comme on peut le constater aujourd'hui.
    C'est pourquoi JavaScript, en tant que langage natif de tous les navigateurs, devrait rester le seul standard pendant encore de nombreuses années.
    Et l'approche de TypeScript se voulant la plus respectueuse des normes de JavaScript a de grandes chances d'être la bonne.

    9-5. Popularité

    Bien que les classements de popularité soient toujours sujets à caution, et ne mentionnons même pas l'indice très douteux de Tiobe, c'est souvent sur ce point que se décide l'adoption d'un langage, ce suivisme entraînant un effet boule de neige dont chacun est libre de penser ce qu'il voudra. Mais c'est un fait et cela a son importance.
    Si nous nous basons sur la plate-forme d'hébergement de codes source GitHub qui est très prisée des développeurs Web comme l'indique la position dominante de JavaScript sur les autres langages, nous devrions avoir une tendance objective relativement proche des usages dans ce domaine.
    Langage 2012-2013 2013-2014 +/-
    JavaScript 531 482 702 596 32 %
    CoffeeScript 26 362 42 094 60 %
    Dart 3 120 3 393 9 %
    TypeScript 2 150 6 558 205 %
    Évolution (1) annuelle (d'octobre à septembre) de la création de repositories sur GitHub
    On peut constater que la croissance de Dart (9 %) reste assez stable et en deçà de ses concurrents, y compris JavaScript lui-même (32 %). CoffeeScript continue quant à lui de connaître une belle dynamique avec une croissance des créations de +60 %. TypeScript qui comptabilisait en 2012-2013 moins de créations de repositories que Dart, vient de le dépasser en 2013-2014 avec un nombre de créations deux fois plus fort et une croissance annuelle qui explose à +205 %.
    Ceci est un indicateur laissant à penser que TypeScript a un grand potentiel d'adoption parmi la communauté des développeurs Web malgré sa jeunesse. On peut signaler à titre d'exemple que le framework graphique babylon.js a annoncé récemment la migration de son code de JavaScript vers TypeScript. Gageons qu'avec la récente mise à disposition d'une version de production et donc stable du compilateur TypeScript, d'autres migrations d'ampleur vers ce langage voient le jour dans les mois qui viennent.

    9-6. Récapitulatif

    CoffeeScript Dart TypeScript
    Maturité 5 ans 4 ans 3 ans
    Code source Open source Open source Open source
    Correspondance Moyenne Faible Forte
    Portabilité JavaScript JavaScript sans DartVM JavaScript
    Popularité Restreinte,
    forte croissance
    Confidentielle,
    faible croissance
    Confidentielle,
    très forte croissance

    10. Conclusion

    Cette présentation est évidemment loin d'être complète. Des mécanismes comme les mixins n'ont pas été abordés tout comme les possibilités offertes avec les fonctions concernant les paramètres et la surcharge. Pour se familiariser avec TypeScript, il peut être utile d'utiliser la page de test afin de voir instantanément la conversion d'un code TypeScript en un code JavaScript. Sinon, le guide d'utilisation et la spécification, malheureusement ni l'un ni l'autre n'étant traduit en français, restent indispensables pour approfondir le sujet.
    En dépit de sa courte existence, TypeScript est un langage en pleine croissance tant sur le plan de ses spécifications que sur le plan de sa popularité. Il n'est pas parfait du fait de sa volonté de coller au plus près des normes de JavaScript, mais l'évolution de ces normes pour enrichir la syntaxe de JavaScript ainsi que des approches parallèles pour améliorer les performances comme asm.js permettent de penser que TypeScript pourrait à terme au mieux devenir lui-même un standard, au pire, inspirer les futures normes ECMAScript.
    Toute proportion gardée, c'est une démarche similaire qu'avait eue à son époque Bjarne Stroustrup en concevant le C++ en tant que sur-ensemble du langage C. Et le succès jamais démenti du C++ depuis plusieurs décennies laisse à penser que TypeScript pourrait suivre le même chemin et devenir une sorte de JavaScript++.

    11. Annexe : conversion en JavaScript

    Les trois codes source proviennent du compte GitHub darthapo. Les codes cibles ont été réactualisés avec les derniers compilateurs en date.

    11-1. CoffeeScript 1.8.0

    Code source CoffeeScript
    Sélectionnez
    class Simple
     
      constructor: (@name = "default") ->
     
      greet: (who) ->
        "Greetings #{ who }, I'm #{ @name }!"
     
      @main: ->
        s= new Simple "Flynn"
        console.log s.greet "Program"
     
    Simple.main();
    Code cible JavaScript
    Sélectionnez
    (function() {
      var Simple;
    
      Simple = (function() {
        function Simple(name) {
          this.name = name != null ? name : "default";
        }
    
        Simple.prototype.greet = function(who) {
          return "Greetings " + who + ", I'm " + this.name + "!";
        };
    
        Simple.main = function() {
          var s;
          s = new Simple("Flynn");
          return console.log(s.greet("Program"));
        };
    
        return Simple;
    
      })();
    
      Simple.main();
    
    }).call(this);

    11-2. Dart 1.7.2

    Code source Dart
    Sélectionnez
    class Simple {
    
      String name;
    
      Simple(this.name);
    
      greet(who) => "Greetings $who, I'm $name!";
    }
    
    main() {
      var s= new Simple('Flyn');
    
      print( s.greet('Program'));  
    }
    Code cible JavaScript
    CacherSélectionnez

    11-3. TypeScript 1.1

    Code source TypeScript
    Sélectionnez
    class Simple {
      
      constructor(public name: string) {}
    
      greet(who: string) {
        return "Greetings "+ who +", I'm "+ this.name +"!";
      }
    
      static main() {
        var s = new Simple('Flynn');
        console.log(s.greet("Program"));  
      }
    
    }
    
    Simple.main()
    Code cible JavaScript
    Sélectionnez
    var Simple = (function () {
        function Simple(name) {
            this.name = name;
        }
        Simple.prototype.greet = function (who) {
            return "Greetings " + who + ", I'm " + this.name + "!";
        };
    
        Simple.main = function () {
            var s = new Simple('Flynn');
            console.log(s.greet("Program"));
        };
        return Simple;
    })();
    
    Simple.main();

    Share and Enjoy:

    0 commentaires pour ce poste

    Leave a reply

    Vidéos similaires
    GRANDES CATEGORIES
    http://admin-reseaux.blogspot.fr/http://admin-reseaux.blogspot.frhttp://admin-reseaux.blogspot.fr
    http://admin-reseaux.blogspot.frhttp://admin-reseaux.blogspot.frhttp://admin-reseaux.blogspot.fr
    http://admin-reseaux.blogspot.fr/search/label/ACTIVE%20DIRECTORYhttp://admin-reseaux.blogspot.frhttp://admin-reseaux.blogspot.fr
    https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnLrfU3ikj6mRqbAL2TNKLBMxNt9vqwo44KXAsRHxYVp5XBBZxiwLP9njfotk0OJdPQCu9zPJiFgeI0N7_aZswToXXhKvVejLGBPZ9LrsDned5cOX3AiLu1a2CJYhbzXYnZ58kKI99uwHU/s1600/Unknownvoip.jpghttp://admin-reseaux.blogspot.frhttp://admin-reseaux.blogspot.fr
    https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnLrfU3ikj6mRqbAL2TNKLBMxNt9vqwo44KXAsRHxYVp5XBBZxiwLP9njfotk0OJdPQCu9zPJiFgeI0N7_aZswToXXhKvVejLGBPZ9LrsDned5cOX3AiLu1a2CJYhbzXYnZ58kKI99uwHU/s1600/Unknownvoip.jpghttp://admin-reseaux.blogspot.frhttp://admin-reseaux.blogspot.fr
    Messages populaires

    pobular post

    Widgetadmin-reseaux
    Fourni par Blogger.
    Recent Stories
  •   Fortinet VPN SSL Vous souhaitez que vos utilisateurs nomades aient toujours accès aux applications présentes au sein de votre entreprise au travers d’un navigateur web? Dans ce tutoriel, je vais vous montrer comment configurer un Firewall Fortinet (Fortigate) [...]

  • Configurer et vérifier NTP dans le mode client et le mode s

    Configurer et vérifier NTP dans le mode client et le mode serverSynchronisation temporelle NTP1. Network Time Protocol (NTP)Network Time Protocol (NTP) est un protocole TCP/IP qui permet de synchroniser à travers le réseau l’horloge locale des ordinateurs sur une date et une heure de référence. Le projet NTP propose u[...]

  • Création d’une règle de pare-feu avec un Fortigate

    Création d’une règle de pare-feu avec un Fortigate I. Présentation Après avoir découvert ce qu’est un Fortinet dans un premier article, je voudrais vous montrer comment mettre en place une règle de Firewall avec quelques-unes des options de sécurité les plus utilisées pour la sécurité ou l’optimisation de n[...]

  • Qu’est-ce qu’un système PBX?

    Qu’est-ce qu’un système PBX? Le terme PBX revient souvent dans les offres des fournisseurs téléphoniques, parfois sous la forme de PBX hébergé, PBX IP ou Cloud PBX. Pour ceux qui connaissent moins leur lexique téléphonique, l’offre d’un système PBX avec des fonctionnalités quelconque[...]

  • Le JavaScript++

    TypeScript est un langage très récent (février 2012) qui a été conçu par Anders Hejlsberg, également concepteur du langage C#. Le but premier de TypeScript est de rendre plus facile et plus fiable l'écriture de code en JavaScript pour des applications de grande ampleur. Cet article présentera de fa[...]

  • De la téléphonie IP très facilement avec Asterisk

    De la téléphonie IP très facilement avec Asterisk Je vous propose en ce début d’année un tuto assez simple sur Asterisk. Si vous ne le connaissez pas, c’est un logiciel libre qui permet de faire de la téléphonie par IP, c’est assez sympa à faire ! Le tutorial a été réalisé sur une Debian 7.3 64bits m[...]

  • Qu’est ce que la Voix sur IP (VoIP)?

    Qu’est ce que la Voix sur IP (VoIP)? La Voix sur IP, raccourci de voix par le protocole internet, est aussi connue sous le terme de VoIP. La voix sur IP se réfère à la diffusion du flux de la voix sur les réseaux Internet, au lieu des réseaux téléphoniques RTC traditionnels. Le protocole Internet (IP) a ét[...]

  • Quelques astuces pour assurer la sécurité de vos données in

    Quelques astuces pour assurer la sécurité de vos données informatiques   Sécurité informatique Chaque année, de nombreux utilisateurs et entreprises se font malheureusement piratés leurs données informatiques qu’elles soient personnelles ou professionnelles. Pour éviter e[...]

  • CONNECTER AVEC FACEBOOK
    Sponsors
    Chercher
    Archives
    Contactez Moi
    Contactez Moi