Recherche sur le blog

samedi 21 juillet 2018

[JS] Afficher un PDF en image avec pdf.js

Il existe plusieurs méthodes en Java pour transformer un PDF (ou une partie seulement) en image côté serveur, afin de renvoyer le résultat au client, pour qu'il ne lui reste plus qu'à l'afficher. La première qui vient à l'esprit est Apache PDFBox. D'autres comme IcePDF ou JPedal font bien le job aussi, mais sont souvent payantes. De plus, le traitement peut évidemment vite devenir lourd pour le serveur si de nombreuses requêtes sont effectuées par plusieurs utilisateurs.

On peut imaginer laisser le client faire le boulot, en utilisant la librairie pdf.js, qui est sous licence Apache. Elle permet de visualiser des documents PDF dans une page web mais aussi de les transformer en image ce qui nous intéresse ici.

L'idée de l'exemple qui suit est de transformer une page donnée en image. Après ajout du script principal dans l'élément head, on va créer une fonction qui recevra plusieurs paramètres tels que les données du fichier PDF (sous forme de chaine encodée en Base64), le numéro de page à transformer, un ID pour la création du canvas, une valeur pour l'échelle du rendu, et l'identifiant de l'élément img qui recevra le résultat.
PDFJS.getDocument({data : atob(ao_pdfData)})
    .then(function(ao_pdf) 
{
 ao_pdf.getPage(ai_num).then(function(ao_page) 
 {
  var lo_canvas = document.createElement('canvas');
  lo_canvas.id = as_idd + '-page-' + ai_num;
  lo_canvas.className = 'f-canvas';

  var lo_context = lo_canvas.getContext('2d');
  var lo_viewport = ao_page.getViewport(af_scale2);
  lo_canvas.height = lo_viewport.height;
  lo_canvas.width = lo_viewport.width;
  
  var lo_renderContext = {
   canvasContext: lo_context,
   viewport: lo_viewport
  };

  ao_page.render(lo_renderContext).then(function()
  {
   $('#' + as_imageId)
     .attr("src", lo_canvas.toDataURL());
  });
 });
});
La fonction PDFJS.getDocument() reçoit en paramètre les données, décodées par la fonction JavaScript atob().

Une fois le document chargé, on va demander à récupérer la page dont le numéro est passé en paramètre. Une fois que cela est fait on exécute une fonction pour traiter les données de cette fameuse page. On crée un élément canvas temporaire, qu'on pourra stocker - ou pas - dans la page. On récupère aussi le contexte de dessin de ce canvas.

On récupère le viewport en indiquant l'échelle (ex : 1.5f). On définit ensuite la hauteur et la largeur du canvas avec les valeurs du viewport.

On crée ensuite un objet qui contiendra le contexte de dessin et le viewport. Ceux-ci seront passés à la fonction render() qui est une fonction de l'objet page. Lorsque le rendu est terminé, on peut récupérer la source de l'image depuis le canvas, grâce à la fonction toDataURL() de ce dernier.

vendredi 20 juillet 2018

[Système] Photos : Erreur système -2147219196

Si vous avez installé la mise à jour cumulative 17134.167 sur votre PC, il est possible que vous obteniez des erreurs en lançant l'application Photos, dont "Erreur du système de fichiers -2147219196" lorsque une photo est ouverte. D'autres applications peuvent également poser problème dont Skype ou même Calculatrice.

En lançant l'application Photos, vous pouvez également obtenir l'entrée suivante dans l'observateur d'événements : 

Nom de l’application défaillante Microsoft.Photos.exe, version : 2018.18051.17710.0, horodatage : 0x5b4c53ea
Nom du module défaillant : Windows.UI.Xaml.dll, version : 10.0.17134.81, horodatage : 0x4f4899f8
Code d’exception : 0xc000027b
Décalage d’erreur : 0x00000000006a4e02
ID du processus défaillant : 0x2b28
Heure de début de l’application défaillante : 0x01d4205da541b39a
Chemin d’accès de l’application défaillante : C:\Program Files\WindowsApps\Microsoft.Windows.Photos_2018.18051.17710.0_x64__8wekyb3d8bbwe\Microsoft.Photos.exe
Chemin d’accès du module défaillant: C:\Windows\System32\Windows.UI.Xaml.dll
ID de rapport : 08b2e8a9-e42d-46cf-9af2-24c466df7349
Nom complet du package défaillant : Microsoft.Windows.Photos_2018.18051.17710.0_x64__8wekyb3d8bbwe
ID de l’application relative au package défaillant : App

Visiblement réinstaller l'application ou la réinitialiser ne sert à rien : c'est en tout cas la première chose que j'ai voulu faire et ça n'a eu aucun effet. Utiliser l'utilitaire de résolution des problèmes est aussi inutile. De même que lancer la fameuse commande de déploiement via Powershell, ou l'utilitaire SFC pour vérifier s'il existe une corruption des fichiers système.

C'est en fait un problème de permissions : les droits du groupe Utilisateurs ont en fait été corrompues d'une manière ou d'une autre. Erreur dans la mise à jour ? Corruption complètement aléatoire et pas forcément liée ? Impossible d'en être réellement sûr.

Voici comment résoudre le problème :
  • Allez dans le dossier C:\Program Files\WindowsApps : Windows vous indiquera qu'il n'est pas possible d'accéder au dossier tant que vous n'aurez pas redéfini les droits d'accès. Cliquez sur le lien qu'il propose pour accéder à l'onglet Sécurité.
  • Dans cet onglet, cliquez sur Avancé. Vous devriez voir apparaitre la fenêtre suivante.

  • Changez le propriétaire en cliquant sur "Modifier", sélectionnez votre utilisateur, puis cochez la case "Remplacer le propriétaire des sous conteneurs et objets", ensuite choisissez Appliquer.
  • Supprimez les permissions du groupe Utilisateurs et appliquez. 
  • Ajoutez à nouveau les permissions pour le groupe Utilisateurs, cochez Lecture, écriture, exécution. Appliquez à nouveau.
Essayez d'ouvrir une image pour voir si vous obtenez toujours le message d'erreur. Si c'est le cas alors procédez aux étapes suivantes sinon fermez simplement en cliquant deux fois sur OK.
  • Fermez la fenêtre en cliquant sur OK. Faites de même une fois de retour à l'onglet de Sécurité.
  • Ouvrez une ligne de commande en mode administrateur.
  • Exécutez la commande "icacls "D:\Program Files\WindowsApps" /q /c /t /reset" sans prendre en compte les guillemets.
  • A la fin du traitement, il faut qu'il y ait 0 erreur si possible.
  • Retournez dans le dossier C:\Program Files\WindowsApps, faites un clic droit dans le dossier, puis choisissez Propriétés dans le menu contextuel.
  • Allez dans l'onglet Sécurité : vous devriez voir de nouveaux droits d'accès (notamment "Tous les packages d'applications"). Cliquez sur Avancé.
  • Changez le propriétaire par NT SERVICE\TrustedInstaller, cochez de nouveau la case pour remplacer le propriétaire des sous-objets, puis appliquez. 
  • Fermez les deux fenêtres avec OK.
  • Vous devriez avoir accès à l'application Photos et les autres applications qui posaient problème.

jeudi 17 mai 2018

[Système] Microcode Intel pour Windows 10 1803

Jusqu'à présent Microsoft ne proposait pas les mises à jour nécessaires pour le microcode des processeurs Intel pour Windows 10 April Update (version 1803), laissant ainsi la faille Spectre à nouveau ouverte. C'est désormais réglé puisque le catalogue Microsoft Update reprend une nouvelle mise à jour, la KB4100347. Comme cela a déjà été expliqué dans un article sur ce blog, vous pouvez utiliser l'outil GRC InSpectre pour connaitre le CPUID de votre processeur. 

    
Repérez ensuite la bonne version du patch à télécharger et l'architecture correspondant à celle de votre OS. Il vous sera demandé de redémarrer après l'installation. Vérifiez ensuite avec le petit outil si la protection est bien active.

Si la mise à jour ne s'applique pas à votre processeur, vérifiez si le constructeur de votre carte mère ne propose pas un nouveau BIOS. Dernièrement Asus - comme d'autres marques - a sorti des versions bêta pour certains modèles tels que les Maximus VII, et les retours sont plutôt positifs.

lundi 7 mai 2018

[Streaming] Mais que se passe-t-il avec Spotify ?

Jusqu'il y a une semaine, tout allait bien avec Spotify. J'étais jusque là très content puisque depuis déjà plus d'un an je possède un ampli Yamaha RX-V581. Quelle ne fut pas ma surprise quand j'ai constaté avant-hier des problèmes en utilisant Spotify Connect... Il s'agit d'une fonctionnalité que l'on retrouve intégrée à de nombreux équipements dont des enceintes portables, et bien entendu pas mal de modèles d'amplificateurs Home Cinéma. 


En lançant donc ma playlist à l'aide de l'ordinateur - ou de mon smartphone - j'ai donc eu la surprise d'avoir des coupures durant la lecture. Et surtout dans la majorité des cas, l'impossibilité de continuer la lecture. Obligé d'éteindre puis de relancer l'ampli, et c'est reparti pour 2 à 3 chansons, voire plus avec de la chance..

Deux sujets ont été ouverts sur les forums :
Sur Twitter, des utilisateurs n'hésitent pas à se plaindre directement auprès du support.
Même si Spotify a mis à jour la page "Pourquoi ne puis-je pas utiliser Spotify sur mes enceintes?", beaucoup d'utilisateurs - dont moi-même - rencontrent le problème sur des modèles récents, de différentes marques également. Aucune nouvelle annonce de fin de support n'a été émise par le service de streaming. De plus, le modèle que je possède n'est même pas encore en fin de vie : on le retrouve d'ailleurs encore vendu sur de nombreuses plateformes d'achat en ligne, et le dernier firmware (1.17) date d'octobre 2017~. 

Alors qu'en est-il réellement ? Aucun membre du service n'a encore donné de réponse claire et officielle. En attendant, c'est principalement le fait de pouvoir utiliser la fonctionnalité Connect avec mon ampli qui m'a poussé à m'abonner. C'est plutôt embêtant de ne pas pouvoir en profiter pleinement sur un appareil encore assez jeune...

Édition du 9/5/2018

Après avoir été contacté par Les Numériques et sans doute d'autres médias, Spotify semble avoir pris la chose au sérieux. Bien que diverses solutions aient été proposées, comme modifier les serveurs DNS de votre ampli - ce que j'ai fait - (8.8.8.8 et 8.8.4.4), quelques réponses suggèrent que le fonctionnement du streaming via Connect est revenu à la normale. En testant moi-même avec mon smartphone à l'heure où j'écris ces lignes, voilà la 7ème chanson qui commence sans avoir eu une seule interruption.Verdict : une demi-heure où rien n'est à signaler.

Même si l'on est tenté de se dire que le problème est enfin derrière nous, aucune annonce officielle n'a vu le jour, et d'après le support sur Twitter, ils n'ont aucune information en ce qui concerne la cause de ce souci. Le mieux est donc de continuer à tester et de vérifier que ce problème ne revienne pas hanter nos périphériques...

mardi 17 avril 2018

[Windows 10] Où est la mise à jour ?

Alors que de nombreux médias sur internet prévoyaient une sortie de la mise à jour de Windows 10 pour le 10 avril, Microsoft avait finalement décidé de repousser la date... sans donner plus d'indications. Les rumeurs pointaient du doigt un très gros bug.

C'est hier que l'on apprend par l'intermédiaire de Dona Sarkar, que des problèmes de fiabilité avaient été détectés sur la build 17133 supposée être la version disponible sur Windows Update. Problèmes pouvant mener à un haut pourcentage d'écrans bleus. Pas top !
As Build 17133 progressed through the rings, we discovered some reliability issues we wanted to fix. In certain cases, these reliability issues could have led to a higher percentage of (BSOD) on PCs for example. Instead of creating a Cumulative Update package to service these issues, we decided to create a new build with the fixes included.


C'est donc une nouvelle version qui a vu le jour pour les Windows Insiders (nommée Preview Build 17134). Celle-ci reprend donc de nombreux correctifs comme cela est expliqué ci-dessus en anglais. Elle nécessitera sans doute d'un contrôle qualité supplémentaire avant d'arriver sur nos machines. 

Sources

mardi 10 avril 2018

[JS] JQuery - Mémo #2 - Requête AJAX

JQuery vous permet d'effectuer facilement des requêtes AJAX. Par exemple :
$.ajax({
 type : "POST",
 url : "URL_A_APPELER",
 data : {
  param1: val_param1,
  param2: val_param2,
  // ...
 }
})
.done(function(data)
{

})
.fail(function(jqXHR, responseHtml, url)
{

});
Dans l'exemple on spécifie le type de requête, l'URL appelée, et les données envoyées. La fonction done() est exécutée lorsque la réponse est positive. L'objet "data" est alors un objet qui peut contenir du HTML notamment. La fonction fail() est exécutée quand la réponse du serveur est une erreur ou quand l'appel a échoué.

Dans JQuery 3, il ne faut plus utiliser les méthodes callback suivantes : error(), success() et complete().

La documentation officielle décrit les paramètres supplémentaires et l'utilisation des méthodes callback. Par exemple, on peut passer un objet dans "data" à la place des différents paramètres. Au niveau des options, on peut notamment spécifier async: false, pour forcer l'attente de la réponse. Les possibilités sont nombreuses.

[Utilitaires] Scoop

Scoop est un utilitaire qui s'exécute en ligne de commande via Windows Powershell et fait penser à apt-get dans son fonctionnement. Il permet en fait d'installer pour l'utilisateur en cours des applications - principalement pour le développement - sans demander d'élévation des privilèges, et sans se soucier de l'architecture de la machine, tout ça sans passer par un navigateur web. L'utilitaire télécharge lui-même le nécessaire et stocke ensuite les fichiers dans le dossier de l'utilisateur. On trouve principalement des outils de développement.

Pour fonctionner, il faut s'assurer d'avoir installé Powershell 3.0, en téléchargeant les mises à jour nécessaires ici pour votre système d'exploitation. Une fois que cela est fait, il faut alors ouvrir Powershell et exécuter la commande suivante : 
iex (new-object net.webclient).downloadstring('https://get.scoop.sh')
(si l'installation ne fonctionne pas et qu'un message d'erreur s'affiche indiquant que l'exécution de scripts est désactivée, saisissez d'abord la commande suivante : Set-ExecutionPolicy RemoteSigned -scope CurrentUser).

Une fois l'outil installé, vous pouvez par exemple saisir la commande "scoop help" pour obtenir plus d'informations quant aux différents arguments utilisables.


Par exemple :
  • scoop install NOM_APP : permet l'installation d'une application
  • scoop uninstall NOM_APP : désinstalle une application déjà installée.
Par défaut, Scoop utilise la liste d'applications disponible en suivant ce lien et extrait celles-ci dans le dossier C:\Users\NOM_USER\scoop\apps.

Il est évidemment possible d'utiliser d'autres sources, appelées "buckets". Par exemple, le bucket extras propose davantage d'utilitaires Windows tels que Autoruns, CPU-Z, Notepad++, Handbrake, etc.

 

Pour qu'il soit pris en compte lors de la recherche et l'installation d'une application, il faut exécuter la commande suivante :
scoop bucket add extras
Pour en savoir plus, on retrouve sur Github la documentation officielle.

Site officel

Scoop.sh

vendredi 16 mars 2018

[Windows 10] Firmware Intel contre Spectre

Depuis le début du mois de mars Intel collabore avec Microsoft pour délivrer aux utilisateurs de Windows 10 (version 1709) les mises à jour du firmware de ses processeurs qui sont touchés par la fameuse faille Spectre. Déployée au démarrage du système, cela permet aux possesseurs de plus anciennes machines de se protéger au maximum alors qu'ils ne bénéficient pas forcément d'un BIOS mis à jour.


Il y a deux jours le patch a donc été mis à jour pour couvrir les processeurs des gammes Kaby Lake et Coffee Lake, en plus de Skylake. Il s'agit de la mise à jour KB4090007. Le tableau présent sur cette page liste les versions existantes de cette mise à jour, et précise quels sont les CPU concernés à chaque fois. La colonne CPUID vous permettra d'identifier si le votre peut recevoir le correctif.


Téléchargez l'outil InSpectre créé par Gibson Research Corporation, sur la page ici. Ce petit logiciel, ne nécessitant aucune installation, vous indique si votre ordinateur est protégé contre Spectre et Meltdown. Il vous permet également de désactiver les protections pour chacune, si vous rencontrez des problèmes de performances. Et nouveauté de la dernière version : elle indique le CPUID, soit le code qui identifie votre processeur, et qui doit correspondre à un élément dans le tableau sur la page Microsoft du correctif.

Localisez la bonne version du correctif lié au CPUID du processeur, puis rendez-vous sur le catalogue Microsoft Update pour récupérer le patch. Une fois téléchargé, exécutez-le. L'installation ne prend que quelques secondes et vous invite à redémarrer une fois terminée. Au redémarrage, il faudra exécuter l'outil InSpectre en mode administrateur, et activer la protection pour Spectre.

A noter que pour les anciennes versions de Windows, des patches logiciels sont déployés mais ne protègent pas complètement des attaques. Certains bidouilleurs passent alors par des solutions alternatives en moddant le BIOS pour injecter le firmware quand le constructeur de la carte mère ne fournit plus de support logiciel.


Pendant ce temps, Intel améliore le design de ses puces afin d'y intégrer une protection matérielle, et continuerait de mettre en production les firmwares pour les plus anciennes gammes, d'après le bout de document ci-dessus. Espérons que Microsoft continue à les déployer via Microsoft Update...

samedi 10 mars 2018

[Utilitaires] Greenshot

Greenshot est un logiciel de petite taille qui vous permet de réaliser des captures d'écran de manière simple. Il offre différents outils pour les modifier, les annoter, et les exporter. Grâce à différents plugins, il est directement possible d'envoyer un e-mail avec l'image jointe, ou même d'uploader la capture vers différents services tels que Dropbox, Imgur, mais aussi JIRA ou Confluence (Atlassian).

Le logiciel peut être démarré sur demande, ou à l'ouverture de la session. Lorsqu'on appuie sur l'une des combinaisons de touches définies dans les préférences, on peut alors capturer l'entièreté de l'écran, une zone particulière, voire la fenêtre active. Après la capture, un menu contextuel s'affiche et vous demande que faire de l'image: exporter vers Word, vers le presse-papiers, vers un emplacement particulier, envoyer par courriel, ou uploader vers un service particulier (en fonction des plugins installés).


Parmi les propositions, il y a également l'éditeur d'image intégré. Vous pourrez alors rajouter des encadrés, des flèches et d'autres formes à votre image. Idéal pour alimenter une documentation en cours de rédaction. Si le curseur de la souris a été capturé, il peut également être déplacé. L'image peut ensuite être exportée via le menu Fichier. On y retrouve les mêmes propositions que dans le menu contextuel.


Difficile de revenir à l'outil de capture d'écran natif à Windows quand on a essayé Greenshot. Disponible gratuitement en Open Source, on le retrouve également sur Mac au prix de 1,99$. Pour l'obtenir, suivez simplement le lien ci-dessous.

Téléchargement : getgreenshot.org

jeudi 8 février 2018

[Utilitaires] Mouse without Borders

Microsoft Garage, c'est un peu le petit laboratoire - pas très secret - dans lequel les employés de la firme peuvent proposer différents projets qui n'ont pas forcément de lien avec leur poste au sein de l'entreprise. On y retrouve donc des petits programmes sympathiques, et c'est notamment le cas de Mouse without Borders.


Ce petit logiciel bien pratique permet, avec une seule souris, passer d'un écran à un autre sur des PC différents. Les opérations plutôt basiques comme le drag & drop de fichiers ou le copier/coller de texte d'un ordinateur à un autre sont évidemment prises en charge.

Pour lier les ordinateurs, il faut donc installer le logiciel sur chaque machine. Il génère alors une clé, qui devra être ré-utilisée sur chaque PC que l'on veut contrôler. L'utilisateur peut gérer l'ordre des écrans dans l'interface afin de respecter l'ordre des écrans sur son bureau. Une fois que tout cela est configuré, c'est comme si l'on avait du multi-écrans... mais avec des ordinateurs pourtant différents.

Petite mise en situation :
  • Un développeur dispose de son PC (machine 1) avec deux écrans pour son travail journalier. Les écrans A et B sont disposés l'un à côté de l'autre, de gauche à droite, A étant le principal.
  • On lui a rajouté un PC de monitoring (machine 2), avec son écran C. Tout à fait indépendant donc. Aucune souris raccordée à celui-ci, bien sûr.
  • Le logiciel est alors installé sur la machine 1 ainsi que sur la 2. La clé (ABCDEF123 par exemple) doit être indiquée sur chacune des machines.
  • Dans l'onglet "Machine setup" du petit utilitaire, il faut organiser les éléments pour respecter l'ordre physique (d'affichage).
  • Il est alors possible de déplacer le curseur de l'écran A à B, puis C, en utilisant la souris de la machine 1.
  • La machine 1 peut être verrouillée, le curseur de la souris peut toujours être déplacé sur la machine 2.
Pour télécharger le logiciel, suivez ce lien.