WordPress Gutenberg : TypeError: Cannot read property ‘show_ui’ of undefined

Par défaut

Ca fait plusieurs semaines que je suis passé sur WordPress pour mon blog perso, la chose qui m’a fait quitter dotclear fut l’outil de d’écriture de billet Gutenberg que j’ai pu tester ici. C’est à des années lumières de l’éditeur de texte que j’utilisais auparavant. Seulement voilà, une fois les joies de la migration passées, me voici à activer Gutenberg et pouf, ça plante méchamment : impossible d’afficher quoi que ce soit.

Voici ce qui s’affiche lorsque l’on a une erreur dans gutenberg

J’ai passé plusieurs jours à chercher d’où pouvait venir le problème. A priori les causes sont multiples mais dans mon cas, c’était lié à un problème avec les permalinks (permaliens en français) customisés.

On peut trouver le détail dans ce topic de github. Pour résumer, un des contributeur explique que c’est lié à la gestion des query-strings sur les permaliens. Et magie du libre, il a fourni un morceau de code pour corriger le problème. Mais on en fait quoi de ce code ensuite ? Et bien il faut créer un plug-in pour pouvoir activer / désactiver le correctif directement depuis la console d’administration de wordpress. (en attendant une correction de gutenberg j’imagine)

Je joins en copie le zip du plug-in que j’ai fait à partir du code trouvé sur le ticket de github. Il ne reste plus qu’à aller dans l’interface admin de WordPress et d’ajouter le plug-in en le téléversant.

Evidement, il est à prendre tel qu’il est et il n’y pas de support dessus 🙂

WWDC 2018 : une semaine exceptionnelle à San José

Par défaut

Cette année j’ai eu la chance de pouvoir aller assister à la grande messe annuelle Apple en Californie. Cela fait trois années consécutives qu’Informatique Banque Populaire envoie un de ses développeurs à la WWDC, c’est une expérience incroyable et je vais essayer de vous faire vivre ça dans les lignes qui suivent. Attachez votre ceinture, on part dans le monde merveilleux des Apple Addicts.

la suite…

Comment obtenir son numéro DUNS gratuitement ?

Par défaut

Je viens d’avoir un cas particulier pour un de mes clients qui voulait déployer une application iOs sur l’App Store avec son nom.

J’ai donc commencé par créer le compte Apple Développer sur l’Apple Member Center. Rien de bien compliqué lors de la création du compte en lui-même. Le problème est apparu lorsque l’on a voulu s’affilier au programme Apple Développer « Organisation » : compte qui permet d’utiliser la raison sociale comme vendeur sur le store.

L’information manquante était le D-U-N-S® Number: l’équivalent du numero SIREN à l’international. Lorsque l’on cherche DUNS number gratuit sur internet, on tombe sur des sociétés françaises qui s’occupent de récupérer le numéro DUNS pour vous… moyennant une trentaine d’euros.

Qu’est-ce que 30€ lorsque l’on a une société ? Franchement pas grand chose, mais je préfère que mon client me paie un resto plutôt que de payer un tiers à ne rien faire:

Le numéro DUNS peut être récupéré gratuitement auprès de l’organisme américain qui s’occupe de ça. Il suffit d’aller sur le site de Dun & Bradstreet (D&B) :

http://fedgov.dnb.com/webform/displayHomePage.do

Et de remplir le formulaire pour trouver votre société. Si jamais elle m’apparait pas, c’est certainement qu’elle n’est pas encore indéxé ici. Pas la peine de chercher autre part, les sociétés qui s’occupent de récupérer les numéros DUNS passent aussi par ce formulaire. Le numéro DUNS vous sera envoyé gratuitement par mail en moins d’une heure ! Que demande le peuple ?

 

{CSS,iPhone]Comment empêcher l’iPhone de changer le rendu d’une page internet?

Par défaut

Le truc le plus chiant lorsque l’on fait un site internet, c’est de se rendre compte que les mesures qu’on s’est fait $£%%!? à calculer ne sont pas prises en compte par le navigateur web tiers. C’est le cas avec Safari pour iPhone.  Cet idiot réinterprete les données… Donc au lieu d’avoir l’affichage de la page internet identique au navigateur Chrome / IE / Firefox :

On a l’affichage suivant :

La solution pour remédier à ça: ajouter dans la balise body la ligne suivante:

-webkit-text-size-adjust: none;

Et voilà le travail! Ça marche merveilleusement bien maintenant!

{Silverlight] Comment définir après déploiement l’adresse d’un endpoint WCF?

Par défaut

Le Silverlight, c’est une technologie vraiment cool, on peut faire à peu près ce qu’on veut mais parfois on se casse la tête sur des petites choses… Par exemple, comment faire pour modifier l’adresse d’un endpoint WCF? Car oui, ces informations sont inclues à la compilation dans le fichier XAP qui regroupe toute l’application Silverlight.

On a beau chercher, il n’y a plus de fichier de configuration de disponible pour modifier les adresses ip du/des serveur(s) WCF. C’est largement ennuyeux lorsque l’on doit débugger ou switcher à la demande l’adresse du service.

Pour résoudre ce problème, il suffit de regarder du coté du projet web qui héberge l’application Silverlight et plus particulièrement dans la balise object de la page ASPX. Il existe de nombreux paramètres que l’on peut transférer à l’application Silverlight dont la InitParams:

<param name= »InitParams » value= »url=http://localhost:12345/ » />

Je n’ai plus qu’à récupérer ce InitParams dans mon application Silverlight. Ce que je fais dans l’Application Startup:

private void Application_Startup(object sender, StartupEventArgs e)
{
  foreach (var item in e.InitParams)
  {
    switch (item.Key)
    {
       case "url":
         Singleton.Instance.URLParam = item.Value;
         break;
       default:
         break;
    }
  }
  this.RootVisual = new MainPage();
}

Ci-dessus, je place dans un singleton la chaine de l’URL passée via les initParams.  Il ne reste plus qu’à initialiser à la création d’un context WCF un endpoint avec la nouvelle adresse!

  public static MonServiceClient getService()
  {
     Uri uriSIC = new Uri(Singleton.Instance.URLParam + "Service_Exemple.svc?wsdl");
     var adrSIC = new EndpointAddress(uriSIC);
     var _SIC = new MonServiceClient("BindingExemple", adrSIC);
     return _SIC;
  }

Et voilà, il ne me reste plus qu’à utiliser cette instance de MonServiceClient afin d’accéder au WCF avec la bonne adresse!

{Silverlight] Le chargement de cet assembly produirait un jeu accordé différent des autres instances.

Par défaut

Et hop, une autre erreur à la con dans silverlight: globalement je ne sais pas comment j’en suis arrivé à ce problème. J’étais tranquillement en train de jouer avec le designer de visual studio quand c’est arrivé, en complet, ça affiche ça:

Description : Une exception non gérée s’est produite au moment de l’exécution de la requête Web actuelle. Contrôlez la trace de la pile pour plus d’informations sur l’erreur et son origine dans le code. 

Détails de l’exception: System.IO.FileLoadException: Le chargement de cet assembly produirait un jeu accordé différent des autres instances. (Exception de HRESULT : 0x80131401)

Erreur source: Une exception non gérée s’est produite lors de l’exécution de la requête Web actuelle. Les informations relatives à l’origine et l’emplacement de l’exception peuvent être identifiées en utilisant la trace de la pile d’exception ci-dessous.

Trace de la pile:

[FileLoadException: Le chargement de cet assembly produirait un jeu accordé différent des autres instances. (Exception de HRESULT : 0x80131401)]
System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0
System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) +98
System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) +241
System.Activator.CreateInstance(Type type, Boolean nonPublic) +69
System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +1136
System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes) +111
System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture) +23
System.Web.HttpRuntime.CreateNonPublicInstance(Type type, Object[] args) +60
System.Web.Configuration.HttpModulesSection.CreateModules() +221
System.Web.HttpApplication.InitModules() +28
System.Web.HttpApplication.InitInternal(HttpContext context, HttpApplicationState state, MethodInfo[] handlers) +828
System.Web.HttpApplicationFactory.GetNormalApplicationInstance(HttpContext context) +304
System.Web.HttpApplicationFactory.GetApplicationInstance(HttpContext context) +107
System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +327

Et là ça fait peur comme erreur. Je cherche un peu sur le net, rien de bien intéressant. Certains topic parlent de changer une valeur dans la Base de registre. Je suis toujours frileux à effectuer ce genre de manipulation. On sait jamais…

Dans le doute, je me fait un petit reboot de la machine et 5 minutes plus tard, tout est OK. Comme quoi l’informatique, c’est parfois pas compliqué.

 

{Silverlight] NullReference exception avec le Designer Silverlight dans Visual Studio 2010

Par défaut

C’est fou mais parfois, notre PC fait vraiment des trucs moches. Dernier exemple, la mise à jour vers Silverlight 5 du plugin navigateur. Et là le drame: mon application compile toujours, s’exécute correctement mais ne s’affiche plus design dans l’éditeur, j’ai le droit à une jolie erreur du type:

Une exception non gérée s’est produite

Et en détail:

System.NullReferenceException
La référence d'objet n'est pas définie à une instance d'un objet.
à Microsoft.Windows.Design.Platform.SilverlightMetadataContext.SilverlightXamlExtensionImplementations.<GetXmlNamespaceCompatibilityMappings>d__8.MoveNext()
à MS.Internal.Design.Metadata.ReflectionProjectNode.BuildSubsumption()
à MS.Internal.Design.Metadata.ReflectionProjectNode.SubsumingNamespace(Identifier identifier)
à MS.Internal.Design.Markup.XmlElement.BuildScope(PrefixScope parentScope, IParseContext context)
à MS.Internal.Design.Markup.XmlElement.ConvertToXaml(XamlElement parent, PrefixScope parentScope, IParseContext context, IMarkupSourceProvider provider)
à MS.Internal.Design.DocumentModel.DocumentTrees.Markup.XamlSourceDocument.FullParse(Boolean convertToXamlWithErrors)
à MS.Internal.Design.DocumentModel.DocumentTrees.Markup.XamlSourceDocument.get_RootItem()
à Microsoft.Windows.Design.DocumentModel.Trees.ModifiableDocumentTree.get_ModifiableRootItem()
à Microsoft.Windows.Design.DocumentModel.MarkupDocumentManagerBase.get_LoadState()
à MS.Internal.Host.PersistenceSubsystem.Load()
à MS.Internal.Host.Designer.Load()
à MS.Internal.Designer.VSDesigner.Load()
à MS.Internal.Designer.VSIsolatedDesigner.VSIsolatedView.Load()
à MS.Internal.Designer.VSIsolatedDesigner.VSIsolatedDesignerFactory.Load(IsolatedView view)
à MS.Internal.Host.Isolation.IsolatedDesigner.BootstrapProxy.LoadDesigner(IsolatedDesignerFactory factory, IsolatedView view)
à MS.Internal.Host.Isolation.IsolatedDesigner.BootstrapProxy.LoadDesigner(IsolatedDesignerFactory factory, IsolatedView view)
à MS.Internal.Host.Isolation.IsolatedDesigner.Load()
à MS.Internal.Designer.DesignerPane.LoadDesignerView()

Ce qui donne un truc incompréhensible. J’ai passé de nombreuses heures à tenter de réparer ça. Dans l’ordre:

  1. Réinstallation de Silverlight: FAIL
  2. Réinstallation de Silverlight toolkit: FAIL
  3. Réparation de Visual Studio: FAIL
  4. Réinstallation de Silverlight et réinstallation suite à la demande de visual studio: FAIL
  5. Prier le Dieu du .NET: FAIL
  6. Désinstallation de Visual Studio 2010, de Silverlight et compagnie et réinstallation dans l’ordre: OK
Voilà, comme quoi on revient aux sources: ça ne marche plus, on désinstalle tout, on reboot et on réinstalle tout comme il faut. Si j’avais fait ça, j’en aurais eu pour 4h, là j’ai perdu 2 jours. Allé salut.

 

 

{C#] Echec du fournisseur sous-jacent sous open avec SQL Server Compact 3.5 et Entity Framework, comment faire?

Par défaut

Le bug de la semaine est dédié à cette erreur: l’Echec du fournisseur sous-jacent sous open, une erreur barbare pour de nombreuses sources de problèmes. En effet, l’Echec du fournisseur sous jacent sous open ou dans la langue de Shakespeare « The underlying provider failed on Open. » est une erreur générique qui globalement signifie « Je n’arrive pas à me connecter à la base de données ».

Mais ça m’arrange pas plus que ça… Mon programme fonctionne très bien sous Windows 7, mais pas sous XP. Alors là faut m’expliquer, normalement le Framework .NET est fait de telle façon à ce que sur les plateformes équipées du Framework, ça marche. Enfin du moins, c’est ce que je croyais.

En regardant un peu plus loin dans stacktrace, on remarque que l’erreur est bien liée l’ouverture de connexion: « OpenStoreConnectionIf« . Mais rien n’aide à comprendre sur la source de l’erreur.

Après quelques recherches, j’ai trouvé mon problème: le mot de passe sur le fichier SQL Server Compact était vide. Pour une raison encore obscure, il faut mettre un mot de passe à la base de données, sinon la connexion n’est pas possible avec Entity Framework. Et ça, uniquement sur Windows XP!

{Visual Studio] La version de clr.dll figurant dans la cible ne correspond pas à celle pour laquelle mscordacwks.dll a été généré.

Par défaut

La petite erreur sympa de la semaine lors de la compilation d’un de mes projets:

Alors pour faire simple, il s’agit d’un message qui apparaît d’un coup. Cinq minutes avant tout fonctionnait. Le redémarrage habituel du Visual Studio n’y change rien…

Car il s’agit d’un problème lié à une mise à jour en cours du système. Et oui c’est à cause de la mise à jour du Framework en fond via Windows UpdateLa solution est alors très simple, on laisse la mise à jour se terminer et on reboot l’ordinateur!

 

{C#] Comment sauvegarder un mail sur le disque au lieu de l’envoyer par SMTP?

Par défaut

Lors des développements, on est souvent confronté au problème du mail de validation client à envoyer… Seul problème, lorsque l’on se branche sur la base de production avec des vrais données, on ne veut surtout pas que les mails partent… La solution est d’intercepter le mail avant qu’il ne soit envoyé sur le serveur smtp… Il suffit pour ça de modifier le fichier de configuration de l’application:

<system.net>
  <mailSettings>
    <smtp deliveryMethod="SpecifiedPickupDirectory">
      <specifiedPickupDirectory pickupDirectoryLocation="C:\Temp"/>
    </smtp>
  </mailSettings>
</system.net>

Et voilà, dorénavant, les mails ne seront plus expédiés, mais sauvegardés dans C:/Temp. Pas besoin de modifier le code (SmtpClient ou MailMessage )