Quelques patrons de conception en Javascript et optimisation

Par défaut

Les patrons de conception sont des solutions réutilisables aux problèmes courants dans la conception de logiciels. Ils sont à la fois passionnants et fascinants à explorer dans n’importe quel langage de programmation. Une des raisons de cela est qu’ils nous aident à tirer parti de l’expérience combinée de nombreux développeurs qui nous ont précédés et à nous assurer de structurer notre code de manière optimisée, répondant aux besoins des problèmes que nous essayons de résoudre. Les modèles de conception nous fournissent également un vocabulaire commun pour décrire les solutions. Cela peut être significativement plus simple que de décrire la syntaxe et la sémantique lorsque nous essayons de transmettre un mode de structuration d’une solution sous forme de code à d’autres. Dans ce blog, je vais vous décrire quelques unes de ces patrons de conception en javascript.

Dans les exemples qui suivent, je vous montre comment travailler avec un objet ‘individu’ qui contient les propriétés age, nom et ville en utilisant les différents patrons de conception.

Le patron de conception ‘Factory’ (usine)

Le Factory est un patron de conception créatif qui concerne la notion de création d’objets. Là où il diffère des autres modèles dans sa catégorie, c’est qu’il ne nous oblige pas explicitement à utiliser un constructeur. Au lieu de cela, un Factory ( l’usine ) peut fournir une interface générique pour créer des objets, où nous pouvons spécifier le type d’objet que nous souhaitons créer.

Imaginez que nous avons une usine UI où nous sommes invités à créer un type de composant UI. Plutôt que de créer ce composant directement en utilisant le nouvel opérateur ou via un autre constructeur créatif, nous demandons plutôt un objet Factory pour un nouveau composant. Nous informons l’usine quel type d’objet est requis (p. Ex. « Bouton », « Panneau ») et il l’instancie, nous le renvoyant pour l’utiliser.

Un example


var individuFactory = function(age, nom, ville) {
//les fonctions servent un peu le role de classes
//on crée un objet vide dans cet objet

var temp = {};
temp.age = age;
temp.nom = nom;
temp.ville = ville;

temp.AfficherIndividu = function() {
console.log(this.age + "," + this.nom + "," + this.ville)

};

return temp;
};

Individu1 = individuFactory(15, 'Jean', 'Paris');
Individu2 = individuFactory(18, 'Pascal', 'Toulouse');
Individu3 = individuFactory(19, 'Pierette', 'Marseille');
Individu4 = individuFactory(35, 'Michael', 'Lille');

//Ajouter ces individus à un tableau et les afficher

var individus = [];
individus.push(Individu1, Individu2, Individu3, Individu4);

for (var i = 0; i < individus.length; i++) {
console.log(individus[i].age + "," + individus[i].nom + "," + individus[i].ville);
}

Le patron de conception ‘Constructeur’

Dans les langages de programmation classiques orientés objet, un constructeur est une méthode spéciale utilisée pour initialiser un objet nouvellement créé une fois que la mémoire lui a été attribuée. En JavaScript, comme presque tout est un objet, nous nous intéressons le plus souvent aux constructeurs d’objets.

Les constructeurs d’objets sont utilisés pour créer des types spécifiques d’objets: à la fois la préparation de l’objet à utiliser et l’acceptation des arguments qu’un constructeur peut utiliser pour définir les valeurs des propriétés et des méthodes du membre lorsque l’objet est créé.

Un example


//Patron de conception : Constructeur

//Identique au precedent, cette fois ci, on utilise un constructeur.

var individuConstructeur = function(age, nom, ville) {
  // au lieu d'utiliser un objet temp, comme les fonctions sont aussi des objets, on peut leur ajouter des proprietes.
  // en utilisant 'this'

  this.age = age;
  this.nom = nom;
  this.ville = ville;

  this.Afficher = function() {
    console.log(this.age + "," + this.nom + "," + this.ville)
  };

};

//Contrairement au patron de conception Factory, comme on ne retourne pas d'objet, il faut creer d'autres objet
// a partir de cet objet lui meme
// Il faut utiliser un constructeur.

var individu_c1 = new individuConstructeur(48, 'Marine Le Pen', 'Henin Beaumont');
var individu_c2 = new individuConstructeur(39, 'Emmanuel Macron', 'Paris');
var individu_c3 = new individuConstructeur(63, 'Francois Fillon', 'Sartre');
var individu_c4 = new individuConstructeur(49, 'Benoit Hamon', 'Paris');
var individu_c5 = new individuConstructeur(62, 'Jean LaSalle', 'Pyrenees Atlantiques');
var individu_c6 = new individuConstructeur(75, 'Jacques Cheminade', 'Mars');
var individu_c7 = new individuConstructeur(64, 'Jean Luc Melenchon', 'Montpellier');

individu_c1.Afficher();

//Le probleme avec le patron de conception Constructeur c'est que chaque objet a sa propre methode
// Afficher
//Donc si on cree des milliers d'objets, ca fera beaucoup et c'est donc de la redondance.

Le patron de conception ‘Prototype’

Le GoF se réfère au prototype en tant que celui qui crée des objets en fonction d’un modèle d’un objet existant par clonage.

Nous pouvons penser que le modèle de prototype est basé sur l’héritage où nous créons des objets qui constituent des prototypes pour d’autres objets. L’objet prototype lui-même est effectivement utilisé comme modèle pour chaque objet créé par le constructeur. Si le prototype de la fonction constructeur utilisé contient une propriété appelée nom par exemple (selon l’exemple de code plus bas), chaque objet créé par ce même constructeur aura également cette même propriété.

L’un des avantages de l’utilisation du prototype est que nous travaillons avec les fonctionnalités que JavaScript offre de manière native plutôt que tenter d’imiter les fonctionnalités d’autres langues.

Non seulement le modèle est un moyen simple d’implémenter les héritages, mais il peut également aussi y avoir une amélioration des performances: lors de la définition d’une fonction dans un objet, ils sont tous créés par référence (de sorte que tous les objets enfants désignent la même fonction) Au lieu de créer leurs propres copies individuelles.Les objets créés sont des clones (clones peu profonds) de l’objet d’origine qui sont transmis. Un cas d’utilisation du modèle prototype effectue une opération de base de données étendue pour créer un objet utilisé pour d’autres parties de l’application. Si un autre processus doit utiliser cet objet, au lieu d’avoir à effectuer cette opération de base de données substantielle, il serait avantageux de cloner l’objet précédemment créé.


//Patron de conception : Prototype

//Permet de resoudre les problematiques lies au prototype Constructeur.
//On cree d'abord un objet vide

//Nous allons ajouter des proprietes et des fonctions

var individuPrototype = function() {

};

individuPrototype.prototype.age = 0;
individuPrototype.prototype.nom = "pas de nom";
individuPrototype.prototype.ville = "pas de ville";
individuPrototype.prototype.Afficher = function() {
  console.log(this.age + "," + this.nom + "," + this.ville);
}

individuPrototype.prototype.Afficher();

var individu_p1 = new individuPrototype();
individu_p1.age = 45;
individu_p1.nom = 'Pierre';
individu_p1.ville = 'Marseille';
individu_p1.Afficher();

// Des tests pour determiner si un objet a ou non des proprietes definis a l'interieur
console.log('age' in individu_p1);
console.log(individu_p1.hasOwnProperty('nom'));

// Les désavantages, c'est que, a chaque fois, il faut créer un objet vide
// redondance de code même si l'objet crée est plutôt 'léger'

Le patron de conception ‘Prototype’ : Optimisation

// Patron de conception : Prototype Dynamique

var individuPrototypeDynamqique = function(age, nom, ville) {
  //Comme pour le patron de conception Constructeur
  this.age = age;
  this.nom = nom;
  this.ville = ville;

  //Seule difference dans la fonction
  //Un test pour determiner ou non la presence de la fonction Afficher
  // Si elle n'existe pas, on la cree, mais au lieu de la creer ici, on la cree
  // dans l'espace prototype
  // La fonction est cree UNE SEULE FOIS lors de la creation du premier objet
  // Quand le second objet sera cree, on n'aura pas besoin de la creer une deuxieme fois.

  if (typeof this.Afficher !== 'function') {
    individuPrototypeDynamqique.prototype.Afficher = function() {
      console.log(this.age + "," + this.nom + "," + this.ville);
    }
  }
}

var individu_d1 = new individuPrototypeDynamqique(33, 'Ajmal', 'Ile Maurice');
var individu_d2 = new individuPrototypeDynamqique(30, 'Pauline', 'Paris');

individu_d1.Afficher();
individu_d2.Afficher();

Conclusion

Si on veut un seul objet, on peut utiliser le patron de conception ‘Constructeur’
Si on veut créer plusieurs objets, le patron de conception Prototype Dynamique convient le mieux.

Vous pouvez retrouver le code sur JSFiddle

https://jsfiddle.net/2jmhL0r2/

Powershell – Rechercher et remplacer un motif dans un fichier qui est présent dans plusieurs dossiers.

Par défaut

Problématique

J’ai un fichier « Preferences.strings » qui est présent dans plusieurs dossiers.

Powershell_recherche_remplace_motif_fichier

Ce fichier contient un texte « Color Theme » que je souhaiterais remplacer par un autre texte, « UX Theme »

Powershell_recherche_remplace_motif_fichier2

Comment faire ?

Avec Powershell, comme toujours.

Tout d’abord, j’utilise Get-ChildItem, pour d’abord filter sur les fichiers qui ont l’extension .strings .
Ensuite,  à partir de ce premier groupe de résultats, je procède par appliquer un autre filtre, en fonction du nom du fichier, qui est  « Preferences »


$filenames = Get-ChildItem "C:\Users\adookhan\Desktop\Powershell\2464\test\Sites\Sites\*.strings" -Recurse | Where-Object { $_.Name -match 'Preferences' }
select -expand fullname

Ensuite, je parcours ces fichiers et je lis les contenus avec Get-Content.
Je remplace ensuite le motif recherché « Color Theme » par « UX Theme », et je termine
avec Set-Content


(Get-Content $filename) -replace 'Color Theme', 'UX Theme' | Set-Content $fileName

Voici le code complet


$filenames = Get-ChildItem "C:\Users\adookhan\Desktop\Powershell\2464\test\Sites\Sites\*.strings" -Recurse | Where-Object { $_.Name -match 'Preferences' }
select -expand fullname
foreach ($filename in $filenames)
{
#Write-Host ($filenames| Format-Table | Out-String)

(Get-Content $filename) -replace 'Color Theme', 'UX Theme' | Set-Content $fileName
}

Le resultat
Powershell_recherche_remplace_motif_fichier3

Developers Conference 2017 : ce que je retiens de la dernière journée

Par défaut

Les Jeudi 30 Mars, Vendredi 31 Mars et Samedi 1er Avril se tenaient à Voila Bagatelle, à l’Ile Maurice,  l’édition 2017  du Developers Conference, le rendez-vous annuel de l’écosystème mauricien des développeurs, geeks, fans et étudiants passionnés par le monde de l’informatique et des nouvelles technologies.  Près de 200 participants ont pu pendant trois jours échanger, avec différents intervenants, sur divers thèmes, du développement web à la programmation de jeux videos en passant par l’intelligence artificielle. Dans cette article, je reviens essentiellement sur la dernière journée de l’évènement.

Pas moins de ………21 conférences pour cette dernière journée…autant dire que le programme était riche. Pour préciser, les conférences se tenaient en parallèles.

9:00 – Arrivée à Voila Bagatelle

Le cadre était pas mal, avec le temps qui était au rendez vous.

2202

2201

L’agenda du jour

9.30 – Premier conf de la journée et ca démarre avec javascript !

Premier hic, une conference sur la conception de jeux avec …javascript et Angular 2 qui se tiennent en meme temps. Hmm…Angular 2, je voulais y aller…comme google a depuis déjà passée à 4 et que ca fait quelques temps que je me suis déjà familiarisé avec le framework, je me disais que ca valait mieux la peine que j’assiste au conf javascript sur la conception de jeux, présentée par Akasha Rojee, bien que n’étant pas un concepteur de jeux ( ce qui va peut etre changé…;)

Donc, cette première conférence parlait de l’avantage qu’offre un langage ’simple’ et flexible comme javascript dans le développement de jeux, avec une petite demo à l’appui. La présentatrice a ensuite décrié les étapes dans la conception d’un jeu 2D avec l’aide de phaser. Avec au commencement, dessiner les objets, les faire bouger, créer des évènements liés par examples au collisions avec d’autres objets, ensuite controller ces objets avec la souris et le clavier.

javascript2D

 

 

Screen Shot 2017-04-01 at 22.37.58.png

Un example que j’ai pu retrouvé en ligne se trouve à la page suivante.

https://developer.mozilla.org/en-US/docs/Games/Tutorials/2D_Breakout_game_pure_JavaScript

Pas mal !, ca m’a donné un coup en rafraichissant ma mémoire sur l’une de mes passions quand je m’étais initialement interressé à l’informatique à la fin des années 90, début 2000….la conception de jeux vidéos !! Les jeux comme Doom 2 ( découvert en 1994 sur un intel 386 ) et ensuite Quake 2, Resident Evil et Commandos. C’était la belle époque des jeux sur PC et Console. Passion qui n’a malheureusement pas été suivie !

 

 

10.30 Nginx et les microservices

Ensuite, autre dilemme 😉 3 autres conférences sur 3 thèmes complement différents, mais également intéréssants,  le développement des jeux sur le moteur de jeux UnReal Engine 4, Nginx et les microservices, et une presentation les systèmes intelligents sur ISSL ( Intelligent System Scripting Language ). Pas de bol ! J’ai décidé de rester les pieds sur terre et d’aller assister à la conférence donnée par Ish Sookun sur Nginx et les microservicesEn effet, comme je développe sur .NET Core, et que j’ai vu que le serveur Nginx avait le vent en poupe, j’ai décidé d’en savoir un peu plus sur l’hébergement d’application .net core sur ce serveur. Le présentateur a passé sur les différentes étapes, de l’installation, au lancement en passant par la configuration sur OpenSuse.

nginxish

Pour ceux qui ne connaissent pas encore, selon wikipedia, les microservices sont un style d’architecture logicielle à partir duquel un ensemble complexe d’applications est décomposé en plusieurs processus indépendants et faiblement couplés, souvent spécialisés dans une seule tâche. Les processus indépendants communiquent les uns avec les autres en utilisant des API langage-agnostiques.

Pour schématiser un peu ce concept, une petite ’comparaison’ vite fait entre un architecture de services classique et l’architecture avec les microservices.

microservices.png

Ce site très utile, décrit ce concept, et son application sur des gros projets.

http://blog.octo.com/larchitecture-microservices-sans-la-hype-quest-ce-que-cest-a-quoi-ca-sert-est-ce-quil-men-faut/

La conclusion de cette présentation avait pour but de démontrer l’application des microservices sur un site à haut traffic ( pour le contexte mauricien ) comme lexpress.mu.

Screen Shot 2017-04-02 at 00.25.54

11.30 – SQL Server sur Linux

Cas pratique encore une fois encore. Etant moi meme un utilisateur de Sql Server dans le monde professionnel, j’ai décidé d’aller jeter un petit coup d’oeil à cette presentation presentée par Jochen kirstätter, le fondateur de MSCC, le groupe local des developpeurs, dont j’en suis moi meme membre depuis bientot 3 ans maintenant, et organisateur de l’évenement.

L’explosion sur le marché des bases de données, avec l’arrivé de nouveau acteurs  a conduit tout naturellement Microsoft à faire l’inimaginable! Oui vous ne revez pas….SQL Server sur Linux !!

Microsoft a pour la première fois décidé de déployer l’un de ces produits phares, destinés aux servers, sur une plateforme autre que Windows Server. Maintenant, je pense que Linux sera considéré par Microsoft comme contribuant aux succès futures et à la survie de l’entreprise dans les 10 prochaines années du moins !

13.30 – Le role de la psychologie dans le design et la communication

Petit coup de coeur pour cette présentation par Nirvan (Tejas) Pagooah.

Screen Shot 2017-04-02 at 01.10.16

La conception front end a toujours été l’une de mes passions !  J’ai toujours appris sur le tas, et de facon intuitive. De meme, J’ai beaucoup suivi l’évolution dans le design des sites et applications mobiles ces 5 dernières années. Ma conclusion, un design doit etre simple et élégant, voire minimaliste. J’étais heureux d’apprendre ( comme je suis bete ) que les designers et les psychologues allemands avaient déjà réfléchi à ca depuis longtemps, au début du 20ème siècle !

 

Ce concept, né de l’école allemande du Gestaltpsychologie , ou gestaltisme, repose sur le fait selon laquelle les processus de la perception et de la représentation mentale traitent spontanément les phénomènes comme des formes globales, structurées ou non, plutôt que comme l’addition ou la juxtaposition d’éléments simples. (reference)

Compliqué ?? En fait, c’est très simple, si l’on se réfère par example à ces différents representations illustrant parfaitement les critères selon lesquels on peut juger qu’un produit a été bien concu d’un point de vue du design.

gestalt

Nirvan en a profité ensuite pour démontrer la psychologie des couleurs en naviguant sur le site de ……………….Victoria Secrets. Décidémment, j’aurais aimé étudier la psychologie 🙂

nirvanvictoriasecrets

14.30 – Développement d’un jeux 3D multi plateformes avec Unity

Enchainement ensuite avec une présentation sur la plateforme Unity par Nitish Jeebun.

Screen Shot 2017-04-02 at 01.31.45

J’ai beaucoup apprécié cette présentation, notamment due au fait que  je pouvais me retrouver, ….avec du code C# !! En effet, on a eu un peu le melange des genres, c’est à dire, une interface de conception d’un jeux 3D avec le débogage en temps réel sur du code C#.

Le lien suivant donne un peu plus de détails sur cet environment de développement qui est aussi utilisé pour faire de la simulation entre autres.

15.30 – Conclusion de la journée avec les NodeBots

Les Makers Mauriciens sont une communauté en plein essore,…enfin, ca commence enfin à susciter un engouement parmi certains jeunes ( et moins jeunes d’ailleurs ). Malheureusement, les débouchés professionnels n’existent pas vraiment à Maurice. Dommage, car les avancées technologiques dans le domaine, notamment la disponibilité des microcontrolleurs à bas couts comme Arduino et les SDKs permettent de nourrir l’imagination de développeurs qui veulent tout automatiser à travers….internet !

Le présentateur Rahul Thacoor, accompagné de  Dissay Kissoon de Microsoft Student partners, ont fait leur démo et la salle s’est vite remplie, due à l’engouement suscité par ces technologies.

Screen Shot 2017-04-02 at 01.53.10Screen Shot 2017-04-02 at 01.53.31Screen Shot 2017-04-02 at 01.54.00

 

En effet, bien que Arduino soit la référence, le souci que beaucoup de makers ont eu à affaire ( bizarrement ..) est le fait que la programmation sur ces plateformes requiert au moins la connaissance d’un langage de programmation bas niveau, comme le C ou C++. L’avènement des NodeBots a tout changé. Maintenant, vous pouvez écrire un simple programme en javascript et controller l’allumage d’une lumière, par example, à travers internet. Le Raspberry pi peut aussi etre programmé comme un NodeBot. NodeJs connait aussi une très grande application dans ce domaine d’ailleurs.

L’application de messagerie Telegram a aussi été utiliser pour interragir avec la lampe à travers internet

Screen Shot 2017-04-02 at 02.05.18

Les liens suivants vous donneront plus de détails sur les nodebots

http://nodebots.io/

http://johnny-five.io/examples/

 

Voila, mon bilan de la Developers Conference 2017 ! Rendez vous en 2018 !

 

Ma toute première application Scala

Par défaut

Ma découverte de ce langage fut un petit déclic ! On peut dire que Apache Spark a été le précurseur à tout cela bien évidemment. Pour rappel,  Scala est un langage de programmation multi-paradigme conçu à  l’École polytechnique fédérale de Lausanne, en Suisse. Elle connait actuellement un envol dans le secteur des analyse des données et le Big Data.

Il existe déjà quelques références sur toute l’historique de ce langage, que je vous invite à découvrir sur internet.

Comme tout débutant sur cette techno, Je vais commencer par écrire un petit programme qui affiche « Hello World », un classique.

Mon environnement de développement

  • Windows 7
  • Scala Version 2.12.1  ( peut être téléchargé depuis https://www.scala-lang.org/download/
  • Java ( version 1.8 )
  • Notepad ++

A ce jour, il faut au minimum Java 8 pour pouvoir développer sur Scala sur Windows. Donc si vous ne savez pas votre version Java, sur Windows, faites

java – version

Vous pouvez télécharger Java sur le lien suivant : https://www.java.com/

Apres avoir fini de télécharger et d’installer Scala, ouvrez une ligne de commande et faites

Pour voir si l’installation s’est bien passée, avec les variables environnements bien définis, faites

scala – version

scala

Si vous voyez « Scala code runner… », l’installation s’est bien passée, sinon désinstaller et réessayer.

Maintenant que vous avez Scala, bien installé, vous pouvez commencer à jouer un peu avec quelques lignes de code !

Notepad++ n’a a ce jour pas Scala comme syntaxe prédéfini. Donc, pour pouvoir avoir les avantages liés a un éditeur de code, je vous conseille de télécharger le fichier scala.xml disponible sur le lien suivant.

https://gist.github.com/MihailJP/4563140

Sur Notepad++, définissez le langage Scala en suivant les étapes suivantes.

 

Après l’import, vous devriez avoir un message « Import réussi » ou ’’Import Successfull’’

Maintenant on va commencer à pouvoir jouer un peu avec un petit program « Hello World »

 object HelloWorld {
     def main(args: Array[String]) {
           println("Hello, world!")
               }
             } 

Sur notepad++, definissez scala comme langage.

Maintenant vous avez la syntaxe qui est correctement défini.

scala6

Sauvegardez le fichier dans un répertoire

N’oubliez pas l’extension       » .scala   »

Sur ligne de commande, lancez la compilation en exécutant la commande suivante.

scalac HelloWorld.scala

Ensuite, executez le program en lancant

scala classpath . HelloWorld

scala8.pngFélicitations, vous avez réussi à compiler votre premier programme Scala !

Il vous reste maintenant à commencer à explorer toutes les facettes intéressantes de ce langage, par example  son interaction facile avec du code Java. Toutes les classes de java.lang sont importes par défaut. Le fait que Scala offre de reels capacités d’interopérabilité avec Java font qu’il n’y ai pas besoin d’implementer des classes équivalentes dans les bibiliotheques Scala. Nous pouvons simplement importer les packages java correspondants.

import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._

object AffichageDateFrancais {
def main(args: Array[String]) {
val now = new Date
val df = getDateInstance(LONG, Locale.FRANCE)
println(df format now)
}
}

Ensuite, recompilez et ré-exécuter :-

scalac AffichageDateFrancais.scala

scala -classpath . AffichageDateFrancais

scala10

A bientôt !

MA DÉCOVERTE DE …………..SPARK ET DES RESILIENT DISTRIBUTED DATASETS (RDD)

Par défaut

Mon expérience passée sur les « Big Data appliances », comme on les appelle dans le jargon, c’est à dire, des ordinateurs conçus spécialement pour l’analyse de grande quantités données,   m’a conduit tout naturellement à aller explorer les innombrables avancées dans ce domaine et la lumière fut………Spark !

En effet, j’ai récemment découvert ce framework,  qui a de plus en plus le vent en poupe !

Pour moi, le principe le plus important réside dans la compréhension de ce que sont les « Resilient Distributed Datasets ».  Par exemple, Hadoop, est résilient aux pannes ou aux défaillances du système, car les données sont écrites sur le disque après chaque opération et Spark offre la même résilience intégrée du fait que les objets de données sont stockés dans ces fameux RDD répartis sur le cluster de données !

Je compte aussi mettre a jour ce blog avec quelques examples d’analyse de données sur SCALA, la célèbre langue de programmation conçu a l’Ecole Polytechnique fédérale de Lausanne et qui  le langage natif de Spark !

SQL Server – Déterminer quelle est la dernière procédure stocké qui s’est lancée sur votre base de données en ordonnant sur la dernière exécution au lieu d’utiliser SQL Profiler.

Par défaut

SQL Profiler est un outil intéressant mais qui est parfois pas aussi intuitive à utiliser. L’alternative réside à faire appel à plusieurs vues ou tables utiles pour les DBAs dans lesquels SQL Server  enregistre des informations.

Pour notre problème, tout d’abord, il suffit de connaitre l’identifiant de la base de donnée. Lancer la commande suivante.

select db_id()

La base sur laquelle je veux lancer des investigations a un identifiant qui est égal a 11.

Ensuite, faites la requete suivante, en filtrant sur le database_id qui se trouve dans sys.dm_exec_procedure_stats

SELECT TOP 10 d.object_id, d.database_id, OBJECT_NAME(object_id, database_id) 'proc name',
d.cached_time, d.last_execution_time, d.total_elapsed_time,
d.total_elapsed_time/d.execution_count AS [avg_elapsed_time],
d.last_elapsed_time, d.execution_count
FROM sys.dm_exec_procedure_stats AS d
where d.database_id = 11
ORDER BY [last_execution_time] DESC;

Vous aurez la liste des procédures stocquées, et la dernière qui a été lancée sera la première sur le tableau des résultats.

 

Visual Studio 2017 – Migration de projets depuis une version antérieure.

Par défaut

Visual Studio 2017 est la dernière version de l’outil de développement intégré (EDI) de Microsoft, permettant l’édition du code, le débogage, la génération, etc. d’applications.

Pour la petite démo, je vais utiliser Visual Studio 2017 Community qui est une version s’adressant aux petites équipes (au plus cinq développeurs), étudiants, enseignants, chercheurs et développeurs des solutions open source, cette édition gratuite dispose pratiquement des mêmes fonctionnalités que l’édition professionnelle.

J’utilise pour cette démo, une version anglaise, mais le principe reste le même : migrer des projets.

Le projet que je vais migrer a été conçu sur une version Visual Studio 2008, donc remontant a plusieurs versions antérieures de Visual Studio. Cependant, J’ai pas eu d’anomalies durant cette exercice.

Tout d’abord, en installant Visual Studio 2017 pour la première fois, j’avais choisi la version de développement Web ( ASP.net MVC, core etc ). Cependant il arrive souvent que vous avez des projets qui regroupe plusieurs types d’applications ( web, bureau, web service etc ). Donc, la première étape a été l’ajout des fonctionnalités liés a un développement bureau.

Etape 1

Cette étape ne prend vraiment pas beaucoup de temps ( 6 mb de Téléchargements nécessaires pour moi ).

Capture.PNG

Apres avoir terminé l’acquisition des packages destines au bureau ( WPF, etc..).

Etape 2

MigrationDeProjets_VisualStudio2017.png

Les différents projets contenus dans la solution principale seront maintenant visibles. Cependant vous ne pouvez pas les ouvrir tout de suite car vous avez une note d’information qui est donne. « needs migration », c’est a dire que ce projet a besoin d’être migrer. Il suffit juste de clicker droit sur le projet et vous aurez l’option suivante

MigrationDeProjets_VisualStudio2017_2

Il suffit juste de clicker sur « Reload Project »

MigrationDeProjets_VisualStudio2017_3.png

Visual Studio vous donne un aperçu de la migration. N’oubliez pas que les migrations sont « One-way upgrade », c’est a dire, dans une seule direction. Apres cette étape, vous ne pourrez plus ouvrir ce projet sur une version de Visual Studio antérieure.

Faites OK.

Reproduire le même procédé pour les autres projets.

Finalement, après avoir migrer tous les projets, ils seront accessibles a travers Visual Studio.

MigrationDeProjets_VisualStudio2017_5

Vous pouvez aussi consulter le rapport de migration, UpgradeLog.htm, qui se trouve dans le répertoire principale de la solution, pour avoir toutes les warnings ou erreurs qui se sont produits lors de la migration. Pour ce projet ci, pas d’erreurs !

MigrationDeProjets_VisualStudio2017_4