Du PHP dans Visual Studio: est-ce vraiment possible ?

Présentation

Depuis plusieurs mois maintenant je suis amené à travailler sur deux languages différents : le C# (.NET) et le PHP 🙁 .

Le problème c'est que je suis "Full Microsoft" et j'adore mon EDI "Microsoft Visual Studio 2017" !!! C'est vrai, je peux utiliser VS Code, mais moins pratique quand même.

J'ai donc cherché pour savoir si je pouvais faire du PHP dans mon environnement préféré. Et j'ai trouvé un plugin (payant je l'avoue) mais qui vaut le détour: "PHP Tools for Visual Studio" !

Je vais vous présenter ce plugin rapidement et vous montrer comment l'utiliser.

Visual Studio Code : quésaco ?

Présentation

Visual Studio Code est un éditeur de code source léger mais puissant qui fonctionne sur toutes les plateformes tel que Windows, MacOS et Linux. Il prend en charge la plupart des languages connus comme JavaScript, TypeScript et Node.js ou encore C ++, C #, Python, PHP...

Il intègre toutes les fonctionnalités attendues pour ce genre d'outils (snippets, indentation automatique, coloration syntaxique, auto complétion, code refactoring...etc). 

Il intègre aussi un gestionnaire de paquets et de dépôts (Connexion à GIT par exemple). Enfin, il est possible de développer des plugins pour VS Code.

Télécharger VS Code ici.

Communiquer powershell et webservice Soap. Démo avancée pratique

soap via powershell

 

L'objet est de consommer les webservices (soap ou autre) depuis powershell.

Cette première démo fait le focus sur un webservice soap simple afin de présenter facilement les notions liées.

Considérons ce webservice dont le wsdl est localisé à cette adresse: http://www.dneonline.com/calculator.asmx?wsdl

Il offre un simple calculateur. La seule méthode qui nous intéresse est la méthode Add.

Pour interroger ce webservice, nous utilisons Invoke-WebRequest de powershell.

 

cmdlet Invoke-WebRequest (iwr)

La commande get-help iwr affiche ceci:

NOM

Invoke-WebRequest

RÉSUMÉ

   Gets content from a web page on the Internet.

SYNTAXE

   Invoke-WebRequest [-Uri] <Uri> [-Body <Object>] [-Certificate <X509Certificate>] [-CertificateThumbprint <String>] [-ContentType <String>] [-Credential <PSCredential>]

   [-DisableKeepAlive] [-Headers <IDictionary>] [-InFile <String>] [-MaximumRedirection <Int32>] [-Method <WebRequestMethod> {Default | Get | Head | Post | Put | Delete |

   Trace | Options | Merge | Patch}] [-OutFile <String>] [-PassThru] [-Proxy <Uri>] [-ProxyCredential <PSCredential>] [-ProxyUseDefaultCredentials] [-SessionVariable

   <String>] [-TimeoutSec <Int32>] [-TransferEncoding <String> {chunked | compress | deflate | gzip | identity}] [-UseBasicParsing] [-UseDefaultCredentials] [-UserAgent

   <String>] [-WebSession <WebRequestSession>] [<CommonParameters>]

........

Whaoooo!!!!

 

Pour notre démo pratique, nous utilisons cette forme:

 

Utilisation des classes Proxy Magento 2

 

Magento 2 utilise le principe d'injection de dépendances comme alternative à la classe finale Mage de Magento 1. Cela veut dire que si une classe A dépend du service B, B doit être injecté directement dans le constructeur de A, ce n'est plus à A de récupérer la dépendance B au moment où il en a besoin.

Cela implique inévitablement que B doit être instancié avant d'être injecté dans A. Cela n'a rien de problématique en soi, par contre imaginons que l'instanciation de B soit relativement lourde en terme de ressource et que B possède également des dépendances, qui elles-mêmes possèdent des dépendances, qui elles-mêmes... Vous l'aurez compris, cela peut commencer à devenir non négligeable, surtout (et c'est là que la problématique devient intéressante) si A a besoin de B uniquement dans certaines conditions (selon l'état d'une variable, l'état d'un service, le calcul d'un résultat, ou autre), l'instanciation de B devient donc inutile si A n'en a jamais besoin. Les classes de type Proxy sont présentes pour répondre à cette problématique.

Spring REST Docs

Comme son nom l'indique, Spring REST Docs est un outil Spring d'aide à la documentation des API Restful. En s'articulant autour des jeux des tests Spring MVC, Spring REST Docs génère sans effort une documentation à jour et détaillée des API de l'application. Spring REST Docs se base sur l'utilisation de "snippets" (données de texte brut) générés suite à l’exécution de tests. La mise en forme est assurée par Asciidoctor (par défaut) qui va produire des pages HTML.

Extraire des données d’un fichier IFC via un script Python

Cet article a pour but d’expliquer la mise en place d’un script Python permettant d’extraire des données taguées dans un fichier IFC.

Contexte :

Dans le cadre d’un projet BIM (Building information modeling), j’ai été amené à récupérer des informations présentes dans une maquette numérique au format IFC (Industry foundation classes).
Les données que l’on souhaite extraire sont préfixées par le tag : "mdata_".
Ce préfixage va permettre d’accélérer la recherche et l’extraction des données du fichier IFC.
Sans cela, il devient très compliqué de retrouver des données dans un fichier IFC vu la quantité d’informations présentes dans ce type de fichier :

Object#yield_self (ruby 2.5.0)

Ruby 2.5 introduit une nouvelle méthode du plus haut intérêt : Object#yield_self.

En voici une version (grossièrement) simplifiée :

class Object
  def yield_self
    yield(self)
  end
end

Au premier coup d'œil, ceci ne passe pas pour une fonctionnalité remarquable. Cependant, cette fonctionnalité est très similaire à l'opérateur Pipe d'Elixir ou de F#. Cette fonctionnalité peut sembler similaire à la méthode Object#tap mais le retour de ces méthodes diffère.

Spring-Boot: Comment consommer un web-service Soap? Écrire un client web service par la pratique en 15 minutes

 

Nous allons présenter un guide pratique pour écrire un client java qui consomme un web service soap.

L'idée ici est de reprendre le guide de spring.io qui hélas s'appuie sur une url wsdl ne fonctionnant plus et qui rend le guide difficile à suivre.

Je propose ici d'utiliser l'url wsdl suivante: http://www.dneonline.com/calculator.asmx?wsdl

J'indique aussi la bonne version du plugin pour corriger une erreur de ce type:

Execution default of goal org.jvnet.jaxb2.maven2:maven-jaxb2-plugin:0.12.3:generate failed: A required class..