Recherche sur le blog

mercredi 23 décembre 2015

[Web] Facebook écarte Flash pour les vidéos

Le plugin Flash, très critiqué par de nombreux utilisateurs et développeurs, ne sera plus utilisé sur la plateforme Facebook pour lire des vidéos hébergées sur le site. Le lecteur, qui est sollicité dans de nombreux cas (dans le flux d'actualités, dans le journal, etc) se base désormais sur le HTML5. Bien sûr cela s'appliquera aux navigateurs qui supportent la technologie en question. C'est le cas de toutes les versions récentes de Firefox, Internet Explorer, Edge, Opéra, etc.


Un bon point pour le réseau social puisque cela permet notamment aux pages de se charger plus rapidement qu'avant. C'est aussi l'occasion pour la firme de tirer profit des outils d'accessibilité fournis par HTML5 pour, à terme, aider les utilisateurs souffrant de déficience visuelle.

Sources

Les Numériques.

lundi 14 décembre 2015

[SQL] Concaténer en une seule chaine par ligne

Il existe, en MySQL, une fonction qui s'appelle GROUP_CONCAT et qui permet de concaténer - d'agréger - plusieurs éléments récupérés depuis une seule table en vue d'obtenir une seule chaine de caractères, par ligne de résultat. Cela permet, par exemple, de récupérer les informations d'un livre, avec les auteurs séparés par des ",", et ce en une seule ligne de résultat. L'exemple repris dans la documentation de MySQL permet d'afficher le nom des étudiants avec leurs résultats aux différents tests.
SELECT student_name, GROUP_CONCAT(test_score)
FROM student
GROUP BY student_name;
Avec DB2 c'est plus délicat et selon la version de la base de données, il faudra utiliser une fonction différente. Par exemple, dans les versions 9.2 et supérieures (corrigez-moi si je fais erreur), il existe la fonction LISTAGG qui reçoit en paramètre le champ pour lequel on veut concaténer les valeurs, et le séparateur.

La même fonction - LISTAGG - existe dans le SGBD Oracle, à partir de la version 11g. En ce qui concerne les versions inférieures on peut se dépanner avec une procédure stockée.

Sur AS/400, il a fallu trouver une alternative. Il faut donc utiliser des fonctions XML pour arriver à un résultat similaire, et si on le souhaite, utiliser la fonction REPLACE directement dans la requête pour modifier la chaîne résultante. C'est un peu plus lourd pour la lisibilité globale de la requête.
SELECT pc.ean, pc.libelle,
 (SELECT
  XMLSERIALIZE(
   XMLAGG(
    XMLELEMENT(NAME x, trim(auteur_nom))
   ) AS VARCHAR(1024) CCSID 500
  )
  FROM auteurs 
  JOIN art_auteurs on pc.ean = art_auteurs.ean 
  AND art_auteurs.idaut = auteurs.idaut)
   AS liste_auteurs
FROM articles AS pc 
On utilise 3 fonctions au total :
  • XMLSERIALIZE : va retourner une expression XML sérialisée, dans le type donné. Le paramètre correspond à l'expression XML. Lors des différents essais l'erreur SQL0332 s'est produite. Il faut faire attention à l'encodage par rapport au client, d'où l'utilisation de la clause CCSID dans l'exemple. Plus d'informations dans la documentation IBM.
  • XMLAGG : retourne une séquence XML avec un objet pour chaque valeur non-nulle contenue dans un ensemble de valeurs XML Le paramètre, dans l'exemple, est donc l'ensemble d'éléments "nom d'auteur". En savoir plus.
  • XMLELEMENT : renvoie un champ sous forme d'élément XML. Dans l'exemple, le nom de l'auteur sera transformé en NOM. Le premier paramètre correspond au nom de l'attribut, le second au champ à transformer. En savoir plus
Il suffit ensuite, soit dans votre programme soit directement dans la requête, de modifier la chaine pour y mettre des "," ou tout autre caractère de votre choix. Bon développement !

[Mémo] Réparer les fichiers système corrompus

Sur Windows il peut arriver que vous vous retrouviez avec des fichiers système corrompus (par exemple après une infection), et cela peut rendre votre système instable ou entrainer des comportements étranges. Microsoft a eu la bonne idée d'intégrer au système un utilitaire qui s'appelle SFC. Sous XP il est nécessaire d'insérer le CD d'installation afin de réparer les éventuelles erreurs. Sous Windows 8 et supérieur, le fonctionnement est un peu différent. 

Analyser et réparer les fichiers système

La première commande appelle donc l'utilitaire SFC. On lui donne le paramètre "scannow". Ce paramètre va indiquer à l'outil d'analyser immédiatement tous les fichiers système protégés et de remplacer les versions incorrectes par les versions appropriées. 
sfc /scannow
L'opération peut prendre un certain temps. Si vous possédez un SSD cela varie entre 5 et 10 minutes. Sur un disque dur il faut compter facilement 15 voire 20 minutes, notamment en fonction de ce qui est à remplacer ou non.

En cas d'erreur d'exécution de la commande, réessayez en mode sans échec. Si vous ne savez pas comment faire, les liens suivants peuvent vous aider. Récupération et mode minimal sous Windows 8 et 8.1, démarrage en mode sans échec (Windows XP et Vista).

Analyser et réparer le magasin de composants

Dans certains cas, l'utilitaire SFC peut ne pas réussir pas à remplacer un ou plusieurs fichiers. Cela peut provenir d'une erreur dans le magasin de composants Windows. Sous Windows 7, Server 2008 et Vista, il existe l'utilitaire CheckSUR (KB947821) afin de le réparer. Sous Windows 8 et Windows Server 2012, le fonctionnement est différent et il n'est pas nécessaire de télécharger d'outils supplémentaires. En effet, Microsoft a introduit la fonctionnalité "Inbox Corruption Repair". En temps normal il y a un processus qui, de manière invisible, va vérifier l'état des fichiers système lors d'une installation de mise à jour et remplacer les fichiers corrompus en ré-téléchargeant les versions adéquates depuis Windows Update. Pour le faire manuellement on utilise l'utilitaire DISM "Deployment Imaging and Servicing Management".

Pour exécuter les commandes suivantes, vous devez ouvrir une invite de commandes avec les privilèges administrateur.
Dism /Online /Cleanup-Image /CheckHealth
Cette commande va vous retourner le dernier état qui a été attribué à l'image. Cela signifie que même si l'image a été marquée comme étant en bon état, elle pourrait tout à coup être corrompue. Aucun fichier journal (log) n'est généré lors de l'appel à la commande.
Dism /Online /Cleanup-Image /ScanHealth
La commande ci-dessus va scanner le magasin de composants afin de voir s'il y a des éléments corrompus ou non. Cette opération prend un peu plus de temps. Pour chaque élément corrompu, un enregistrement est affiché au fichier journal (log). Cette opération peut prendre de 5 à 10 minutes et peut sembler bloquée aux alentours de 20%. Il faut juste laisser aller et prendre un café en attendant.
Dism /Online /Cleanup-Image /RestoreHealth
Si corruption il y a, le paramètre "RestoreHealth" va permettre de lancer une réparation automatique. Ce processus est bien plus long (il faut compter entre 15 et 20 minutes). Comme pour la commande précédente, le processus peut sembler bloqué aux alentours de 20%. Il ne faut pas s'inquiéter, il faut juste patienter et manger un bout.

Si vous ne possédez pas d'accès à internet pour permettre de récupérer les fichiers de remplacement, vous pouvez spécifier le paramètre "Source:wim" dans la commande précédente. La valeur "INSTALL_PATH" doit être remplacée par le chemin complet vers le fichier "install.wim" qui contient les fichiers de remplacement. Sachez que ce fichier est présent sur le DVD original de Windows 8.1, dans le dossier "Sources".
Dism /Online /Cleanup-Image /RestoreHealth 
 /Source:wim:INSTALL_PATH:1
Une fois le magasin de composants réparé, lancez à nouveau l'utilitaire SFC et observez le résultat.
  
Sources

Eight Forums
Malekal

[Cloud] Conserver les 15 Go gratuits sur OneDrive

Il y a quelques mois, Microsoft avait annoncé de nombreux changements concernant sa plateforme de stockage en ligne. Aujourd'hui suite aux nombreuses plaintes des utilisateurs, la firme s'excuse et revient partiellement sur la baisse de capacité des comptes existants. En effet, ceux qui disposent de 15 ou 30 Go gratuits sur leur compte peuvent faire en sorte de les conserver en seulement 2-3 clics, et ce avant fin janvier. Il suffit de se rendre sur la page dédiée, de cliquer sur "Keep your free storage" de se connecter à son compte, puis de confirmer l'accès aux informations du profil. Une confirmation s'affiche alors à l'écran indiquant que la modification de quota n'affectera pas votre cloud OneDrive. C'est déjà ça...


Bien sûr tous les changements prévus par Microsoft sont toujours d'actualité. Pour tous ceux qui n'auront pas réalisé cette démarche, ou pour tous les nouveaux comptes créés début février 2016, l'espace de stockage sera bel et bien réduit à 5 Go. La grille tarifaire est conservée elle aussi et les offres 100 et 200 Go disparaissent de celle-ci.

Sources

dimanche 6 décembre 2015

[Windows] Echec d'installation de la KB3122947

Cette mise à jour vise à résoudre des problèmes de paramètres non mémorisés. Visiblement, beaucoup d'utilisateurs se retrouvent face à un code d'erreur 80070643 lors de la tentative d'installation de la KB3122947. Rien ne sert de cliquer sur le bouton "Réessayer" car le résultat est identique à chaque fois. Voici cependant la procédure à appliquer pour installer cette mise à jour manuellement.


Si vous ouvrez l'explorateur Windows dans le dossier "C:\Windows\SoftwareDistribution\Download", vous devriez voir un dossier avec un nom assez long. Si vous êtes sur une version 64 bits du système, le sous-répertoire que vous devriez retrouver s'appelle "c4a1b8896ce9fbfea96c1ee6890d52a5", sinon si vous êtes sur une version 32 bits, alors vous devriez retrouver plutôt le nom "b0a5da1b24245bc4237166e09bae92da".

Ouvrez donc une invite de commandes en mode administrateur. Pour ce faire, effectuez un clic droit sur le menu démarrer (ou utilisez la combinaison de touches Windows+X) et choisissez l'option "Invite de commandes (admin)". Si l'UAC vous demande si le programme que vous tentez d'ouvrir peut apporter des modifications, répondez simplement par "Oui".


Saisissez la bonne commande en fonction de votre version de Windows 10.

32 bits (x86)
dism /online /add-package /packagepath:C:\Windows\SoftwareDistribution\Download\b0a5da1b24245bc4237166e09bae92da\windows10.0-kb3122947-x86.cab
64 bits (x64)
dism /online /add-package /packagepath:C:\Windows\SoftwareDistribution\Download\c4a1b8896ce9fbfea96c1ee6890d52a5\windows10.0-kb3122947-x64.cab
Après un moment vous devriez voir apparaitre une barre de progression. Quelques secondes suffisent pour qu'elle atteigne 100%. Redémarrez ensuite l'ordinateur, et effectuez une nouvelle recherche de mises à jour. Normalement, la KB3122947 aura disparu !

vendredi 4 décembre 2015

[Divers] Star Wars s'invite sur les sites Google

La saga Star Wars ne cesse de faire parler d'elle. En voici encore la preuve. Rendez-vous sur la page google.com/starwars afin de rejoindre le côté de votre choix ! Choisissez entre le côté obscur, et le côté lumineux. Mais concrètement à quoi cela sert-il ?


Cela va activer des effets à la Star Wars que vous retrouverez sur de nombreuses pages. Par exemple, sur Youtube, lors du chargement d'une page, vous verrez apparaitre en haut de la page une barre avec un halo. La couleur varie bien sûr en fonction du côté choisi. 


Si vous modifiez le volume d'une vidéo, là aussi vous pourrez non seulement voir l'effet "sabre laser" mais entendre le son de ce dernier !


Autre petit exemple mais sur Gmail cette fois. Pendant le chargement de votre boite de réception, Google affiche en général une barre de progression classique. Ici vous verrez apparaitre un sabre laser qui se remplit avec la couleur de votre côté. Rouge pour le côté obscur, bleu pour le côté lumineux. Sans parler du fond d'écran toujours en lien avec la saga.


Google va plus loin en proposant une extension pour Chrome pour vivre une nouvelle expérience lors de l'ouverture de nouveaux onglets. Vous l'aurez compris, dans la vie de tous les jours, cela n'est pas très utile, mais cela devrait plaire aux fans du film. Allez, vivement le 7 !

[Jeux vidéo] Supprimer un jeu sur Steam

Et le supprimer définitivement qui plus est... C'est la nouvelle fonctionnalité introduite sur la plateforme de Valve. Vous possédez des jeux que vous n'aimez pas ou auxquels vous n'avez jamais joué ? Vous allez peut-être avoir envie de faire un peu le ménage dans votre liste. La marche à suivre est plutôt simple : rendez-vous dans le menu d'aide de Steam, cherchez le jeu que vous souhaitez enlever définitivement et puis sélectionnez l'option "Je veux supprimer ce jeu de mon compte de façon permanente". Gardez bien à l'esprit que c'est une opération irréversible et qu'une fois que vous aurez cliqué sur "oui, je veux supprimer ce jeu", il disparaitra de la liste à jamais !  Comme si vous ne l'aviez jamais possédé...


Même si cette idée peut paraitre intéressante au premier abord, cela peut rendre dubitatif un grand nombre d'entre nous. En effet, que se passera-t-il si un utilisateur mal intentionné arrive à prendre possession de votre compte dans le but de supprimer un ou plusieurs jeux ? Bien sûr c'est un scénario que l'on ne souhaite pas envisager, mais il pourrait y avoir des abus... Cela dit la sécurité a été améliorée ces derniers temps sur la plateforme. Vous pouvez notamment saisir votre numéro de téléphone pour récupérer votre compte en cas de problème.

Dans le futur il serait intéressant de voir débarquer une politique de remboursement qui ne se limite pas qu'aux achats récents. Et vous, quel est votre avis ?

Sources

Overclock3D

mardi 1 décembre 2015

[WD21] La pré-version en téléchargement

Vous pouvez dès à présent télécharger la pré-version de l'AGL Windev, développé par PC SOFT. Il s'agit de la version 21 01F210039d. Si vous possédez déjà vos licences pour exécuter l'environnement, alors vous allez pouvoir découvrir les nombreuses nouveautés présentées au TDF et dans le magazine. Attention, il ne s'agit pas de la version finale. Certaines fonctionnalités ne sont peut-être pas encore actives et d'autres peuvent tout simplement être instables. Ne migrez donc pas vos applications existantes dans cette version. 


Qu'y-a-t-il de nouveau ?
  • Télémétrie : permettez aux applications de collecter et envoyer des données à un serveur pour faciliter le développement. A tout moment vous pourrez savoir quelles sont les fenêtres les plus / moins utilisées, obtenir le détail des erreurs qui se sont produites sur les différents postes, etc.
  • Champ note : si vous utilisiez déjà les notes intégrées à Windows, vous devriez vous habituer à celles de Windev. Rédigez des notes directement depuis les applications. Celles-ci peuvent alors être déplacées et sont également mémorisées et restaurées à chaque lancement du logiciel. Elles sont bien sûr programmables.
  • Amélioration des éditeurs : interface épurée, mémorisation de l'état de l'explorateur de projets, support des hautes résolutions (4K), affichage des raccourcis dans les menus contextuels, recherche avancée en langage (presque) naturel, fenêtre des 7 onglets non modale lors de l'édition d'états, et encore bien d'autres petites nouveautés ici et là.
  • Modification de l'interface utilisateur... par l'utilisateur : cette fonctionnalité permettra aux utilisateurs de modifier la position et la taille des champs à leur guise et ce sans modifier l'agencement initial. Les informations sont mémorisées et l'utilisateur retrouvera sa configuration au prochain lancement de l'application. Et bien sûr, il sera possible à tout moment de revenir à l'interface initialement prévue par le développeur. 
  • Modification des fenêtres pendant le débogage : en plein développement et donc en pleine opération "go", vous pourrez modifier l'agencement de vos champs et répercuter cela dans l'éditeur de fenêtres de Windev. 
  • Compression de chaines "gzip".
  • Nouveaux formats d'archivage TAR et GZ.
  • Accès natif à la base de données Hadoop
  • Authentification Facebook à partir de vos applications mobile. 
  • Nouvelles fonctionnalités pour les développements mobile : effet de parallaxe sur les images lors du défilement, développement pour les terminaux tels que les iWatch ou iPhone 6S, support des protocoles FTP/FTPS, support de 3D Touch pour les périphériques Apple compatibles, support de l'écriture sur les cartes SD à partir d'Android, etc.
  • HFSQL : nouvelles fonctions, notamment pour les dates et les heures, ou la conversion, nouveaux types, récupération de l'utilisateur courant (CURRENT_USER), "explain" visuel dans le centre de contrôle du serveur, etc.
  • Responsive Web Design : si vous utilisez Webdev, la conception de vos sites "responsive" sera plus facile. L'agencement d'une page pourra être défini en fonction d'une ou plusieurs résolutions / plateformes afin de faire bénéficier aux internautes d'une expérience de navigation optimale. 
  • Universal Windows 10 Apps : développez des applications dites  responsive pour un déploiement sur plusieurs types de périphériques Windows 10 (mobile, desktop, etc). Plus d'informations : "A first look at the Windows 10 Universal app platform".
  
  
Vous vous doutez que cette liste est loin d'être complète. Vous pouvez consulter la brochure disponible sur le site de PC SOFT pour obtenir plus d'informations ou tout simplement télécharger cette nouvelle version. Bon développement à tous.

lundi 16 novembre 2015

[Java] Jsoup HTML Parser

Il arrive parfois que l'on retrouve des fichiers dans un format Excel qui ne le sont pas vraiment. En y regardant de plus près et même si l'extension est "xls", on peut tomber nez-à-nez avec un fichier HTML qui contient un tableau. Dans notre cas il a fallu transformer le fichier suivant en un fichier CSV (séparateur ";"). Avec Jsoup, c'est beaucoup plus facile à réaliser ! Il va "parser" le contenu du fichier donné en paramètre... il ne reste plus qu'à manipuler et traiter les différents éléments.
<html xmlns:x="urn:schemas-microsoft-com:office:excel"> 
<table border="1" columns="3"> 
 <tr> 
  <th>Header1</th> 
  <th>Header2</th> 
  <th>Header3</th> 
 </tr> 
 <tr> 
  <td>LaDonnee1</th> 
  <td>LaDonnee2</th> 
  <td>LaDonnee3</th> 
 </tr> 
</table> 
</html>
Ensuite nous allons simplement utiliser l'API Jsoup pour manipuler les différents éléments afin de tout mettre dans un fichier CSV (encodage ANSI). Ici chaque ligne du tableau en HTML va être copiée dans le CSV avec, entre chaque "colonne", le séparateur ";". Une ligne dans le fichier texte = une ligne du tableau HTML.
File input = new File(args[0]); 
File outpt = new File(args[1]); 
Document doc = Jsoup.parse(input, "UTF-8"); 
Elements tbl = doc.select("tr"); 
try (FileOutputStream fos = new FileOutputStream(outpt); 
 BufferedWriter bw = new BufferedWriter(
 new OutputStreamWriter(fos,"UTF-8"))) { 
  for (Element trb : tbl) 
  { 
    Elements td = trb.children(); 
    i = 1; 
    for (Element tdb : td) 
    { 
       if(i==1) { 
         bw.write(tdb.text());
       } else { 
         bw.write(";"+tdb.text()); 
       } 
       i++; 
    } 
    bw.newLine(); 
  } 
}
En résumé, voici ce qu'on a réalisé :
  • Parsing du document avec la fonction Jsoup.Parse(). Les paramètres sont le fichier source et le jeu d'encodage (charset). Elle renverra une exception si le fichier n'a pas pu être chargé.
  • Sélection de tous les éléments "tr" avec la méthode Document.select(). Celle-ci doit être appelée directement par l'instance qui a été créée ci-dessus. 
  • On va créer un flux de sortie pour le fichier destination (FileOutputStream) et l'objet qui va nous permettre d'y écrire (BufferedWriter). On en profite pour déterminer le jeu d'encodage de caractères.
  • On parcourt l'ensemble des lignes à l'aide de l'instruction "for". 
  • On récupère les éléments "enfants". 
  • Parmi ces éléments on va considérer qu'il s'agit des lignes. Il faut vérifier plus attentivement mais il semblerait que la méthode "children()" renvoie les éléments qui devraient logiquement apparaitre selon les spécifications de la syntaxe. En effet, durant mes tests, j'ai vu l'élément "tbody" apparaitre, or il n'existe pas dans mon fichier source.
  • Parcourir l'ensemble des cellules (instruction "for").
  • Écriture des données des cellules à l'aide de la fonction bw.write().  
  • On rajoute une nouvelle ligne dans notre CSV avant le prochain tour de boucle à l'aide de la méthode bw.newLine().
  • Les ressources sont automatiquement libérées avec cette syntaxe de "try" Rien n'empêche d'écrire tout ça à l'ancienne!
Et voilà... bien sûr, cela reste très basique et ce code pourrait être amélioré afin de répondre à d'autres cas plus spécifiques. Bon développement et bonne découverte à tous.

samedi 14 novembre 2015

[Social] Facebook active Safety Check

Suite aux récents événements ayant touchés Paris, Facebook a réactivé son service Safety Check qui permet de se signaler comme étant en sécurité (ou de vérifier que vos amis sont sains et saufs). Cette fonctionnalité avait été mise en place en octobre 2014 et devait être activé lors de catastrophes naturelles. Il semblerait que le réseau social ait décidé de le mettre en place pour des situations plus graves comme celle-ci.


Twitter et Snapchat ont également mis ce dispositif en place.

Sources

Les Inrocks
PureBreak

[Livre] Et sans lien avec l'informatique

Alors que le monde part totalement en sucette (#ParisAttacks), je vous propose de découvrir le 1er livre d'un ami, destiné aux enfants dès 3 ans. Il s'agit de "La nuit du Lion", édité par Alice et écrit par Rachpunzel. L'ami dont je vous parle, Christophe Antoine, en est l'illustrateur. Aucun rapport avec l'informatique donc, mais c'est l'occasion de vous faire découvrir un dessinateur très doué dans son domaine.

Voici une image tirée du bouquin et le résumé de celui-ci : "Le soleil se couche sur la savane africaine. Timéo le grand lion et Keena la petite souris se blottissent l'un contre l'autre pour dormir. Mais Timéo ne trouve pas le sommeil. Comme tous les soirs, il a peur du noir..."


Le livre est disponible à la Fnac au prix de 12,90 €. Dommage qu'ils n'aient pas jugé utile d'afficher la couverture. N'hésitez pas à l'offrir à vos enfants pour Saint-Nicolas ou même pour Noël.

mardi 10 novembre 2015

[WD20] Remplir plusieurs cellules Excel par OLE

Cette technique permet de gagner en performances lorsqu'on cherche à piloter Excel à l'aide d'OLE Automation. En effet, si par exemple on cherche à alimenter les cellules A1 à B5 (soit 10 cellules, sur deux colonnes distinctes), on va pouvoir utiliser un tableau de variants à 2 dimensions. La solution a été proposée sur les forums de PC SOFT par Jurassic Pork.

Si vous ne vous souvenez plus de la manière dont il faut déclarer les différentes variables afin de piloter Excel, vous pouvez consulter l'article "Pilotage Excel via OLE" sur le blog. Dans notre exemple nous allons déclarer des objets supplémentaires qui représenteront respectivement une feuille spécifique et une plage de cellules.
MaFeuille est un objet automation dynamique
MaPlage est un objet automation dynamique
MonTableauAutomation est un tableau de 5 par 2 Variant

MaFeuille = objXLApp>>Worksheets("Feuil1")
POUR i = 1 A 5
  MonTableauAutomation[i,1]="Donnée_A_" + i
  MonTableauAutomation[i,2]="Donnée_B_" + i
FIN

MaPlage = MaFeuille>>Range("A1:B5")
MaPlage>>Value = MonTableauAutomation
Dans le code ci-dessus on a volontairement supprimé l'ouverture du classeur et le test pour vérifier s'il a bien été chargé. La déclaration de l'objet "objXLApp" n'est d'ailleurs pas présente ici. Bon développement à tous.

mercredi 4 novembre 2015

[Cloud] Microsoft change sa politique OneDrive

C'est ce qui a été décidé pour début 2016 : les nouveaux comptes OneDrive, ainsi que les existants, ne bénéficieront plus des 15 Go gratuits. Il faudra désormais se contenter de 5 Go et même le bonus de 15 Go lié à la "pellicule" ne sera plus attribué. Cela va même plus loin : Microsoft a décidé d'arrêter le stockage illimité pour Office 365 Home, University et Personnal, et de supprimer les options de stockage de 100 et 200 Go pour passer à 50 Go à 1,99 € / mois. Pour plus d'informations vous pouvez consulter la note officielle publiée sur le blog lié à OneDrive. Inutile de dire que ça ne plait pas à grand monde...


Sources

[Info] Mise à jour de la section Logithèque

Si vous ne l'avez pas encore remarqué, j'ai mis à jour la page Logithèque. Désormais, plutôt que de retrouver tous les logiciels sur une page unique, j'ai séparé en différentes catégories. Ainsi il ne sera plus nécessaire de faire défiler toute la page pour trouver ce que l'on cherche. C'est par ici que ça se passe : vers la logithèque. N'oubliez pas que vos commentaires sont les bienvenus : critiques, suggestions d'utilitaires à rajouter, etc.

mercredi 28 octobre 2015

[.NET] Accès à DB2 UDB iSeries + DataGridView

On retrouve dans .NET les mêmes possibilités qu'en Java afin de se connecter à une base de données DB2 UDB sur un AS/400. En effet, lorsqu'on installe IBM i Access sur le PC, un kit de développement est inclus. Dedans on retrouve les assemblages nécessaires pour développer en .NET. Dans le menu démarrer vous devriez retrouver, dans le dossier IBM i, l'aide "Boite à outils de programmation". 

Start Menu \ Programs \ IBM i Access for Windows \ Boîte à outils de programmation.

Intégrer l'assemblage dans le projet

Pour effectuer cette opération il faut ouvrir l'explorateur de solutions, effectuer un clic droit sur la catégorie "Références" et choisir l'option "Ajouter une référence" dans le menu contextuel.


Ensuite, il faut cliquer sur "Extensions" et chercher après "IBM for DB2 i .NET Provider". On peut s'aider du champ de recherche afin de filtrer les résultats. Une fois celui-ci repéré il faut le cocher puis cliquer sur OK.


Lorsqu'on a terminé, si on déroule l'arborescence, on pourra constater qu'un nouvel élément est venu rejoindre les références existantes, à savoir "IBM.Data.DB2.iSeries". On va dès lors pouvoir utiliser les différents objets de l'API.

Connexion et requête

Tout d'abord, il faudra indiquer, à l'aide de la directive "using", qu'on souhaite utiliser des objets et types de l'espace de noms "IBM.Data.DB2.iSeries" sans avoir à le qualifier à nouveau. Pour information nous programmons ici en C#.
using IBM.Data.DB2.iSeries;
Ensuite on va, dans le code d'un bouton par exemple, initialiser la connexion, récupérer des données dans une table, puis fermer cette connexion. On va aussi afficher le nom du job démarré sur la machine AS/400.

C'est en instanciant un objet de la classe "iDB2Connection" qu'on va pouvoir se connecter. Pour cela, on devra renseigner dans le paramètre du constructeur une chaine de connexion (ConnectionString). Pour savoir quelles sont les propriétés qu'on peut renseigner, consultez l'aide ou la documentation en ligne.
iDB2Connection cn2 = new iDB2Connection("DataSource=ADR_IP"+ 
  ";UserID=USER;Password=PASSWD;Naming=SQL");
cn2.Open();
Dans l'exemple ci-dessus, on a spécifié :
  • DataSource : le nom ou l'adresse du serveur à contacter.
  • UserID : le nom d'utilisateur avec lequel on veut se connecter.
  • Password : le mot de passe associé.
  • Naming : indique si on veut utiliser les conventions de nommage SQL.
Ensuite on a utilisé la fonction "Open()" de l'objet créé afin d'ouvrir explicitement la connexion. L'étape suivante consiste à créer une "commande" de type "select" qui sera liée à la connexion précédente.
iDB2Command myCmd = cn2.CreateCommand();
myCmd.CommandText = "SELECT * FROM myLib.myTable";
La propriété "CommandText" contiendra le code SQL de la requête à exécuter. On va remplir ce qu'on appelle un "DataGridView". C'est un contrôle personnalisable qui permet d'afficher assez facilement un tableau, lié à une source de données, ou non.
iDB2DataAdapter da = new iDB2DataAdapter(myCmd);
DataTable ds = new DataTable();
da.Fill(ds);
dataGridView1.DataSource = ds;
Pour cela on va utiliser deux autres types de variables, un "iDB2DataAdapter" et un "DataTable". Le second est une représentation des données de la table. Le premier quant à lui va servir de "pont" entre la base de données et notre objet "DataTable" en question.
  • On crée donc une instance de iDB2DataAdapter en passant en paramètre la commande.
  • On crée un objet DataTable, sans spécifier de paramètre au constructeur.
  • On utilise la fonctionne "Fill()" de notre objet iDB2DataAdapter avec en paramètre, l'objet DataTable
  • Ensuite on lie cet objet DataTable à notre contrôle grâce à la propriété DataSource.
  • Il n'y a rien à faire ; le tableau apparaitra automatiquement.
Voilà ce que ça donne à l'exécution.


Et bien sûr il ne faudra pas oublier de se déconnecter de la base de données une fois que c'est terminé (tout dépend de ce que vous souhaitez faire ensuite).

Afficher le nom du job

Si on veut afficher le nom du job qui a été créé pour la connexion en cours, on peut par exemple écrire le code suivant.
MessageBox.Show(cn2.JobName);
Cela affichera, dans une boite de dialogue, son nom complet (travail, utilisateur et numéro).

Déconnexion

C'est très simple ! Il suffit d'appeler la fonction "Close()" de l'objet Connexion créé au début de ce billet. Cela aura pour effet de mettre fin au job créé sur l'AS/400.

mardi 27 octobre 2015

[VMWare] Un ransomware affecte les datastores

C'est l'histoire que relate Blogmotion. Plusieurs personnes auraient été victimes de ce ransomware bien particulier puisque visiblement cette variante s'amuse à télécharger et supprimer les machines virtuelles de votre infrastructure vCenter. Un fichier texte est alors stocké sur les datastores (voir sur Pastebin) : l'auteur - probablement russe d'après le pseudo utilisé - demande 5 bitcoins par VM à récupérer (soit environ 1250 €) et indique qu'un disque dur sera alors envoyé après réception du paiement. L'auteur ajoute qu'il est aussi possible de passer par un serveur FTP et réclame que la somme soit envoyée avant 2 semaines.


Les versions suivantes d'ESXi et vCenter sont touchées :
  • VMware ESXi 5.5 sans le patch ESXi550-201509101-SG.
  • VMware ESXi 5.1 sans le patch ESXi510-201510101-SG.
  • VMware ESXi 5.0 sans le patch ESXi500-201510101-SG.
  • vCenter Server 6.0 inférieur à 6.0.0b.
  • vCenter Server 5.5 inférieur à 5.5 update 3.
  • vCenter Server 5.1 inférieur à 5.1 update u3b.
  • vCenter Server 5.0 inférieur à 5.0 update u3e.
Il est donc recommandé de mettre à jour au plus vite et surtout d'éviter que vos hyperviseurs ne soient accessibles depuis internet. A consulter aussi : des mises à jour pour ESXi et vCenter sont disponibles afin de corriger des vulnérabilités (bulletin VMSA-2015-0007.2). Les premières victimes ont commencé à se manifester courant juin (également sur la communauté de VMWare).

jeudi 22 octobre 2015

[Linux] Envoyer un fichier à l'aide de PSCP

Si vous souhaitez envoyer rapidement un fichier sur un hôte Linux - depuis un PC Windows -, vous pouvez utiliser l'utilitaire PSCP (que l'on peut obtenir sur la page de téléchargements de Putty). Décompressez l'utilitaire dans le répertoire de votre choix, ensuite ouvrez une invite de commandes en administrateur et saisissez la commande suivante.
pscp.exe FICHIER.EXT UTILISATEUR@HOTE:REP/SUBREP
Vous devez bien sûr remplacer :
  • FICHIER : nom du fichier.
  • EXT : extension (s'il en possède une évidemment).
  • UTILISATEUR : nom d'utilisateur qui permet de se connecter à la machine.
  • HOTE : nom d'hôte de la machine Linux sur laquelle on veut envoyer.
  • REP/SUBREP : destination (peut dépendre de l'utilisateur).
Voici un exemple :
pscp mlocate-0.26-18.2.x86_64.rpm root@mach1:/home/ 
Il faudra alors accepter le certificat lors de la première connexion, et saisir le mot de passe de l'utilisateur. Une fois que l'on est identifié, la progression du transfert s'affiche à l'écran.

mardi 29 septembre 2015

[WD20] Récupérer l'e-mail dans l'AD avec .NET

Si vous avez besoin, pour une raison une autre, de récupérer des informations depuis l'Active Directory pour l'utilisateur déjà connecté sans utiliser les fonctions de la famille LDAP*, alors vous pouvez utiliser l'assemblage "System.DirectoryServices" de .NET. Dans l'explorateur de projets, effectuez un clic droit sur "Assemblages .NET" puis choisissez l'option "Utiliser un assemblage" du menu contextuel.

La première étape consiste à initialiser les variables pour lancer la recherche. Pour cela on a besoin de trois types d'objets :
  • DirectoryEntry : qui encapsule un nœud/un objet dans la hiérarchie de l'AD.
  • DirectorySearcher : pour rechercher à partir d'une position spécifique.
  • Environment.UserName : nom de l'utilisateur authentifié. 
Exemple :   
Ensuite il faut initialiser le filtre de la recherche et indiquer les propriétés que l'on souhaite récupérer. Dans notre exemple nous souhaitons obtenir l'e-mail ("mail") mais également d'autres informations (comme le prénom et le nom).
On doit ensuite lancer la recherche à l'aide de la fonction "FindOne", qui va simplement renvoyer le premier objet répondant aux critères. Si la variable qui en résulte est différente de Null, alors on peut parcourir les propriétés. Pour rappel, Windev ne gère pas les tableaux .NET, il va donc être impossible de récupérer un objet en indiquant la clé ou l'index. Pour contourner nous avons utilisé une boucle de type "POUR TOUT" (équivalent à un "foreach" en C#) afin de parcourir l'ensemble des noms de propriétés. Ensuite, nous avons récupéré une collection d'objets correspondants à la clé "mail" grâce à la procédure "get_Item()". Il ne reste plus qu'à parcourir cette collection pour récupérer la valeur. Normalement il n'y en a qu'une puisqu'on a demandé à ne reprendre que le premier objet correspondant à nos critères de recherche. On stocke donc la valeur dans une simple variable chaine.

Voici un bout de code complet (cliquez sur l'image pour la télécharger) :
        

Bon développement !

lundi 28 septembre 2015

[Divers] Une histoire de logos

En juin la marque Lenovo a décidé d'adopter un tout nouveau logo. Google a fait de même il y a environ un mois. En y regardant de plus près on pourrait dire que la police de caractères utilisée est la même. En effet, si on observe bien la lettre "e" on pourra constater que la forme, les angles, sont identiques. Il s'agit très certainement d'une pure coïncidence. 

Ci-dessous le logo de Lenovo : 


Et celui de Google :


Sources

jeudi 24 septembre 2015

[Exchange] Exporter une boite mail à l'aide d'EMS

Si vous possédez Exchange 2010 SP2 ou supérieur, vous pouvez exporter une boite mail au format PST puis l'importer dans une autre. Cela peut se faire à l'aide d'Exchange Management Shell. Cela nécessite d'abord de créer les permissions pour l'exécution des commandes d'import/export. Vous pouvez vous référer à la documentation Technet #FF45927 pour en apprendre davantage.

Ouvrez d'abord Exchange Management Shell - il s'agit de l'invite de commandes PS dédié -, attendez que la connexion soit établie, puis attribuez les droits pour le rôle d'Import/Export, à l'aide de la commande suivante  : 
New-ManagementRoleAssignment -Role "Mailbox Import Export" 
 -User "Administrateur"
Si vous vous connectez avec un administrateur dans un domaine pour effectuer cette opération, remplacez "Administrateur" par "NOM_DOMAINE\Administrateur". Une fois cette opération effectuée vous devriez voir apparaitre un résumé de ce qui a été attribué. Fermez la fenêtre du shell puis rouvrez-en une.

Exporter

Créez maintenant un dossier partagé sur l'un de vos serveurs (cela peut être un dossier créé en local mais pour lequel on génère un nom de partage). Donnez les droits d'accès complets à l'utilisateur "Exchange Trusted Subsystem". Notre dossier est sur "C:\Export" et a été partagé en tant que \\EWS01\Export\. On y stockera les fichiers *.PST des boites mail.


Une fois le répertoire créé avec les bons droits d'accès, il faut retourner dans l'invite de commandes d'Exchange, et saisir la commande suivante pour lancer une requête d'export. Les paramètres seront le nom d'utilisateur pour lequel on souhaite exporter les données, et le répertoire dans lequel on va stocker le fichier *.PST :
New-MailboxExportRequest -Mailbox JONNY 
 -FilePath \\EWS01\Export\mb_jon.pst
Si la commande aboutit, - cela peut prendre quelques secondes avant qu'elle ne soit validée par le système -, Exchange indiquera que la requête a été "mise en file d'attente" (Statut = Queued). A tout moment on peut obtenir la progression de celle-ci en saisissant la commande suivante, toujours dans l'invite :
Get-MailboxImportRequest
Cette commande va renvoyer le statut en cours : "In Progress" ou encore "Completed" sont les états qui apparaissent généralement. On peut également obtenir plus de détails en complétant la commande comme dans l'exemple ci-dessous :
Get-MailboxImportRequest | fl
Une fois que votre requête est marquée comme "complétée", il faut simplement supprimer la demande dans le système. En utilisant la commande suivante, l'invite vous demandera de confirmer l'effacement. Il faut utiliser la touche "T" suivie de Entrée pour valider.
Get-MailboxExportRequest | where {$_.status -eq "Completed"} 
 | Remove-MailboxExportRequest
Dans l'immédiat on ne sait pas vérifier le contenu du PST, sauf en l'important sur une machine quelconque. Ce qui nous intéresse ici, c'est de l'importer dans une boite mail fraichement créée. Pour cela il va falloir suivre les étapes ci-dessous.

Importer

Une fois le fichier PST créé on peut l'importer dans une autre boite mail. On n'y pense pas mais c'est quand même mieux que de s'amuser à transférer les mails un par un ou de demander à l'utilisateur d'effectuer cette opération qui peut être longue, surtout si la boite contient de nombreux éléments. 
New-MailboxImportRequest -FilePath \\EWS01\Export\mb_jon.pst 
 -Mailbox ALFRED
On va demander au système de créer une requête d'import pour le fichier PST. C'est dans la boite d'Alfred qu'on va importer tous les éléments de Jonny. Il existe de nouveau une commande pour connaitre le statut de la demande. 
Get-MailboxImportRequest
Comme on peut le constater, celle-ci n'est pas très différente de celle utilisée pour l'export. De nouveau on obtient le statut, qui peut être "In Progress" ou encore "Completed". Nous ne connaissons pas tous les états par cœur, mais celui qui nous intéresse est bien sûr le tout dernier. Une fois l'opération signalée comme terminée, il faudra exécuter : 
Get-MailboxImportRequest | where {$_.status -eq "Completed"} 
 | Remove-MailboxImportRequest
De nouveau l'invite demande s'il faut clôturer la (ou les) requête(s). On répond directement à l'aide de la touche "T" pour traiter tous les éléments en une seule fois, puis on appuie sur Entrée. Toutes les requêtes sont alors effacées.

Sources

Exchange Server Pro.

mercredi 23 septembre 2015

[Mémo] Activer Intel Smart Response via CLI

Tout d'abord télécharger les drivers adéquats pour votre chipset, ainsi que l'interface en ligne de commandes qui correspond. Si vous avez activé le RAID dans le BIOS, et si vous avez déjà effectué toutes les manœuvres pour tenter de réactiver le cache avec un SSD mais que rien n'a fonctionné, voici ce que vous pouvez faire... 

On part donc bien sur le principe que le disque est initialisé mais avec aucune partition de créée (unalloced space). Dans l'interface Windows du pilote Rapid Storage, le SSD et le disque dur apparaissent tous les deux en état "Normal" et l'onglet "Technologie de Réponse Intelligente" n'apparait pas. Sur notre machine de test, le système d'exploitation est un Windows 8.1 64 bits.


On commence par créer un volume cache sur le SSD :
rstcli64 --accelerate --createCache 
 --SSD [#ID] --cache-size XX
Pour récupérer l'identifiant du SSD, on peut utiliser l'argument -I de la commande rstcli. Une fois que l'identifiant est connu, on peut remplacer [#ID] par celui-ci. Par exemple, nous avons notre SSD avec l'ID 0-5-0-0. Sa taille est de 30 GB d'après l'utilitaire. La commande donnera ceci : 
rstcli64 --accelerate --createCache 
 --SSD 0-5-0-0 --cache-size 30
Une fois que cette commande a été exécutée une notification apparait dans la barre de tâche pour indiquer que le volume "Cache_Volume" a été créé sur le disque SSD dans le port 5. Nous avons ensuite voulu l'associer avec l'argument --setAccelConfig mais avons eu un joli message d'erreur "Disk has no space for metadata, is not available or is not in normal state". Après plusieurs essais, nous avons tout simplement utilisé l'option "Disassociate", comme dans la commande suivante. Nous avons supposé qu'elle enlève toute liaison existante avec le volume de cache : 
stcli64 --accelerate --disassociate --cache-volume Cache_Volume
La commande retourne alors 0 si tout se passe bien. Si on ferme et qu'on ouvre à nouveau l'interface graphique du pilote Rapid Storage, et qu'on se rend dans l'onglet "Performance" puis "Technologie de Réponse Intelligente", on peut alors choisir le périphérique à accélérer, ce qui n'était pas le cas jusqu'à présent. On peut également exécuter la commande suivante : 
rstcli64 --accelerate --setAccelConfig 
 --disk-to-accel [#ID] --mode enhanced
Le mot-clé [#ID] peut être remplacé par l'identifiant du disque dur qui doit être accéléré. On spécifie également le mode à utiliser, qui dans notre cas est le mode "Amélioré". Il s'agit du cache en lecture seulement. Le mode "Optimisé" doit être utilisé avec précaution.
rstcli64 --accelerate --setAccelConfig 
 --disk-to-accel 0-0-0-0 --mode enhanced
La commande ci-dessus est l'exemple qui a été utilisé sur notre machine où le problème s'était présenté. Le disque dur Hitachi qu'il faut accélérer est installé sur le port 0. Après exécution de la commande, vous devriez voir un popup apparaitre pour indiquer que c'est actif. Idem si vous avez effectué cette opération depuis l'interface graphique.

[Logiciels] Microsoft Office 2016 est disponible

La nouvelle version de Microsoft Office est disponible depuis ce mardi 23 septembre 2015, au prix de 279 € pour la version destinée aux familles et PME. Les abonnés à Office 365 eux, pourront profiter gratuitement des outils mis à niveau. Parmi les nouveautés on pourra noter de nombreuses améliorations liées au Cloud et aux réseaux sociaux...


En effet, le travail collaboratif a été amélioré puisqu'il est possible pour plusieurs personnes d'éditer, en simultané et en temps réel, un document stocké sur OneDrive, à l'image de ce qui se fait sur Google Docs. La fonctionnalité, appelée "co-création", n'est utilisable qu'avec Word, PowerPoint et OneNote. Microsoft a aussi travaillé sur l'intégration de Skype au sein de la suite, en ligne comme hors ligne.

Deux nouvelles applications font aussi leur apparition : Sway vous permettra de créer une page Web de présentation pour y publier du contenu comme des rapports, des lettres, etc, avec un look soigné. Ces éléments pourront être partagés sur les réseaux sociaux comme Facebook ou Twitter. L'application Delve vous permettra d'afficher et de rechercher aisément des personnes avec lesquelles vous collaborez actuellement ou des documents auxquels vous avez accès. Le tout se présentant sous forme de profil avec des fonctionnalités de recherche avancées. 

Les 3 applications principales sont également dotées d'un nouveau moteur de recherche, qui simplifiera notamment l'accès aux différentes commandes. On le sait, il est parfois compliqué de trouver ou retrouver une fonctionnalité, tant la suite s'est étoffée au fil du temps. C'est donc le rôle de Tell Me de guider l'utilisateur jusqu'à la composante voulue. Excel propose également "Prévision en un seul clic" pour avoir un aperçu rapide de vos données et 6 nouveaux types de graphiques.

Sources

mardi 25 août 2015

[Divers] Des routes pour recharger son véhicule?

C'est en tout cas un projet qui est actuellement en cours en Angleterre, lancé par la société Highways England. Le but ? Recharger la voiture pendant qu'elle roule ! D'ici fin 2015 / début 2016 la société souhaiterait mettre en place un test sur quelques routes peu fréquentées. Cette phase de test durera 18 mois et permettra de déterminer s'il est possible d'aller plus loin en exploitant des axes fréquemment utilisés. 


Concrètement la recharge se ferait alors par induction à l'aide de câbles et de bobines situées sous la chaussée.  Cela permettrait donc d'augmenter, si cela fonctionne, l'autonomie des véhicules électriques qui peinent souvent à atteindre 400 km en une seule charge.

Sources

[Mobile] Nouveau feature phone chez Microsoft

Si vous n'êtes toujours pas décidé à adopter un smartphone, quelle que soit la raison, sachez que Microsoft vient de sortir le Nokia 222, un téléphone connecté qui vous permettra d'aller sur internet, Facebook ou d'appeler via Skype. Oui, ce nom de marque n'est pas tout à fait mort ! Le prix annoncé est de 37$ aux États-Unis, il faudra donc compter environ 50 € chez nous.


Parmi les autres caractéristiques, on peut citer sa batterie de 1100 mAh qui permettrait de tenir, selon la fiche constructeur, environ 29 jours en veille. Le modèle équivalent en Dual-Sim permettrait de tenir 21 jours dans les mêmes conditions. Pourvu d'une caméra 2 mégapixels, ce petit engin ne saura guère satisfaire par la qualité de ses photos. Ce GSM propose également le support du Bluetooth 3.0, mais par contre il ne propose que la 2G. Pour connaitre la suite on peut se reporter à la fiche technique sur le site de Microsoft : "Nokia 222 datasheet".

Sources


[Actualités] Une prime pour retrouver et arrêter les pirates d'Ashley Madison

Suite au piratage de leur site, les administrateurs d'Ashley Madison, spécialisé dans les rencontres adultères, souhaitent vivement retrouver le ou les coupable(s) de l'attaque de juillet dernier. Ils offrent 500 000 dollars canadiens - soit près de 380 000 euros - contre des informations qui permettraient de retrouver les responsables de la fuite de données de 32 millions d'utilisateur. Ce piratage a d'ores et déjà causé le suicide de deux personnes au Canada, et nous n'avons certainement pas fini d'entendre parler de celui-ci. 


On apprend également via Kitguru qu'un homme a lancé des poursuites contre le site et la société qui gère ce dernier, à savoir Avid Life Media. Et visiblement, ce n'est pas la première plainte à voir le jour.

Sources

BBC.
Clubic.

[WD20] Envoyer un e-mail

Pour envoyer un e-mail depuis votre application Windev, vous pouvez notamment utiliser la fonction LanceAppliAssociée() qui ouvrira la messagerie par défaut. Le paramètre à préciser est en fait une chaine qui contiendra l'URL "mailto". Celle-ci pourra contenir des champs pré-remplis (sujet, destinataire, fichier à attacher). Bien sûr, pour que cela fonctionne, il faut qu'un logiciel de messagerie soit associé à ce protocole. Pour information la fonction ne peut pas être utilisée dans une application Linux. 

Il y a une autre solution qui peut être mise en place dans Windev : l'utilisation des variables et fonctions Email. Grâce à ces éléments il va être possible d'envoyer un e-mail à travers le protocole IMAP ou SMTP, ou même en utilisant un profil Outlook.

Envoyer à l'aide d'une connexion SMTP

On déclare tout d'abord dans notre code une variable qui sera de type Email. On va appeler celle-ci "eMonMessage". Elle contient de nombreuses propriétés qui permettent de modifier les caractéristiques du message (sujet, contenu, destinataires, etc). L'avantage par rapport à la structure proposée par Windev, c'est qu'il n'est pas obligatoire d'indiquer explicitement le nombre de destinataires (à/cc/cci) avant de spécifier leurs adresses. C'est donc un gain de temps !

Parmi les propriétés qu'on peut spécifier :
  • Sujet : texte contenant le sujet de votre message.
  • Expéditeur : champ "From" de l'en-tête du message ; peut contenir un e-mail ou du texte (exemple : NOM ). 
  • Destinataire : tableau contenant les adresses e-mail des destinataires. On peut ajouter les éléments à l'aide de la fonction Ajoute (eMonMessage..Destinataire, "email")
  • Cc / Cci : tous deux des tableaux, permettent d'ajouter des destinataires en copie conforme (invisible ou non). On peut aussi utiliser la fonction Ajoute() pour les remplir.
  • Message : texte au format brut ; si on ne souhaite pas utiliser de mise en forme  spécifique. Certains destinataires préfèrent en effet recevoir des messages sans formatage.
  • HTML : si on souhaite avoir une mise en forme il faut alors spécifier le contenu en HTML. On pourra l'importer depuis un fichier (avec toutes les images associées) ou saisir directement le code.
              
Exemple :
                

Sur l'image on peut voir qu'on renseigne bien l'expéditeur, le sujet, le contenu du message (texte brut) ainsi que le destinataire. Dans cet exemple vous constaterez que les adresses e-mail sont stockées dans des variables locales.

Attacher un fichier

Il est possible d'attacher un ou plusieurs fichiers à votre e-mail. Vous pouvez soit passer par la variable EmailAttache, soit utiliser la fonction EmailChargeFichierAttaché(). Cette dernière est très pratique car il n'est pas nécessaire de s'occuper de charger le contenu du fichier à l'aide de code supplémentaire ou de définir le type MIME. On passe en paramètre la variable de type Email et le chemin du fichier à attacher.


Bien sûr si vous souhaitez utiliser la variable EmailAttache, vous pouvez toujours consulter l'exemple dans la documentation officielle de PC SOFT. En résumé, il suffit de spécifier les propriétés Nom, Contenu (on utilise fChargeTexte() pour ça), ContentType (type MIME) et ContentDescription, puis de l'ajouter dans le tableau des fichiers attachés de notre message initial.

Ouvrir la session et envoyer le message

On va ici ouvrir la session à l'aide de la fonction EmailOuvreSessionSMTP() qui renvoie un booléen pour déterminer si la connexion a abouti. Les paramètres de cette fonction sont, dans l'ordre :
  • Nom d'utilisateur ; celui-ci sera réutilisé en tant qu'identifiant de session.
  • Mot de passe : lié au compte utilisateur.
  • Serveur : adresse IP ou nom DNS du serveur auquel on se connecte.
  • Port : port lié au serveur (ex : 25 par défaut, 587 pour une connexion TLS).
  • Mode asynchrone : utilisé uniquement pour le web.
  • Options : facultatif, à utiliser dans le cas d'une connexion TLS/SSL.
              
Exemple :
           

Ensuite, comme on peut le voir dans l'exemple ci-dessus, on va appeler la fonction EmailEnvoieMessage() si la session a bien été ouverte. En paramètre on spécifiera l'identifiant de la session SMTP (donc le nom d'utilisateur dans ce cas) et la variable Email qui a été construite lors des étapes précédentes. La fonction renvoie également un booléen pour indiquer si le mail est bien parti ou non. En cas d'erreur, on peut afficher les informations issues de ErreurInfo().

Il faut ensuite fermer la session avec EmailFermeSession(). Le paramètre est de nouveau l'identifiant de la session, qui est dans notre cas, le nom de l'utilisateur. Voilà, c'est terminé, vous savez désormais envoyer des e-mails avec Windev.

mercredi 29 juillet 2015

[Système] Windows 10 est là, mais attention!

Le nouveau système d'exploitation de Microsoft est là. D'après ce qu'on peut lire, il y a des gens contents, mais d'après le test de Clubic, il y a des choses qui pourraient gêner certaines personnes plus que d'autres, dont la suivante.

Ce qui semble inquiéter assez bien les utilisateurs les plus pointilleux, c'est le fait que Microsoft n'ait pas permis de désactiver les mises à jour automatiques de Windows Update pour les pilotes. Ce qui a entrainé chez pas mal de monde des plantages, déjà lors de l'utilisation des versions preview (notamment en ce qui concerne les pilotes graphiques ou les dispositifs de pointage Synaptics).

Microsoft a alors fourni un petit outil, mais espérons que celui-ci ne soit que temporaire et que l'option soit intégrée dans Windows Update dans les jours / mois à venir. Il s'agit d'un utilitaire qui permet de désactiver des mises à jour qui sont proposées. On peut le télécharger sur le site Winbeta. En résumé, il faut tout d'abord désinstaller le pilote qui pose problème, en revenant à l'ancienne version de celui-ci ou en forçant sa réinstallation via le gestionnaire de périphériques. Ensuite après il faudra exécuter l'outil pour sélectionner les éléments à masquer, pour éviter qu'ils soient réinstallés par après.


On verra comment Microsoft compte réagir face à cette situation un peu ennuyeuse. Un conseil : mieux vaut attendre les divers correctifs avant de procéder à la mise à niveau de votre système, afin d'éviter toute mauvaise surprise.

dimanche 26 juillet 2015

[Développement] Google fait le ménage

Si vous utilisez des APIs et des bibliothèques Google pour vos développements, vous apprendrez par l'intermédiaire du site Touraine Verte que certaines d'entre elles ont récemment été déclarées obsolètes et que celles-ci finiront par être inutilisables au delà d'une certaine date.
      

Par exemple on apprend que l'API Google Earth a été déclarée obsolète le 12 décembre 2014. L'API continuera de fonctionner sur les navigateurs compatibles jusqu'au 12 décembre de cette année. L'API Google Maps Engine elle aussi sera désactivée, mais après le début de la nouvelle année, soit à partir du 29 janvier 2016. En revanche on notera l'arrivée de l'API Google Maps Roads (plus d'informations sur la page Google Developers) ainsi que d'une extension pour Chrome permettant d'indiquer si votre site implémente correctement les différentes interfaces de programmation telles que Google Maps Javascript, Static Maps, et Street View Image.

Les bibliothèques Panoramio et Météo ne sont plus disponibles depuis début juin.

jeudi 18 juin 2015

[Preview] Windows 10 build 10130

Alors qu'on se rapproche tout doucement de la sortie de la version finale, Microsoft continue tout de même d'enchainer ses builds. Disponible depuis un moment sur le canal "rapide", la version 10130 du système est désormais disponible sur l'autre canal. En bref, voici la liste des principaux changements apportés.


Au menu des nouveautés on notera le déblocage des options de personnalisation du menu démarrer et de la liste des raccourcis, la correction de la traduction du bouton "Puissance" ainsi que l'apport de quelques ajustements au niveau de l'apparence des icônes. On peut également noter que la barre des tâches n'affichera que les applications actives sur le bureau virtuel en cours, que Cortana peut être activé à l'aide du raccourci Windows + C, et qu'il est possible de forcer l'affichage des volets dans le navigateur Microsoft Edge (dont le nom n'a pas encore été changé dans cette version).


On pourra aussi saluer les correctifs apportés à l'installation de la version. Aucun plantage n'a été constaté, le temps de mise à jour (sur machine virtuelle) était plutôt correct.

mercredi 17 juin 2015

[Divers] Samsung présente son Safety Truck

L'Argentine n'est visiblement pas réputée pour la sécurité de son trafic routier. En effet, d'après le constructeur Samsung on apprend qu'une personne meurt toutes les heures sur les routes du pays. La firme a donc décidé de passer par l'agence Leo Burnett afin d'équiper ses camions de caméras à l'avant et d'écrans à l'arrière afin de permettre aux autres conducteurs de les dépasser sans prendre de risques inutiles. 

Une vidéo de 2 minutes peut être visionnée sur Youtube. Il s'agit d'une présentation de ces fameux camions. Le système est plutôt simple : les écrans - au nombre de 4 - sont fixés sur les portes arrière du véhicule, et sont reliés à une caméra placée à l'avant de ce dernier. Les voitures qui souhaitent alors doubler ne doivent plus se déporter sur la gauche. Cela évitera d'entrer en collision avec une personne qui arrivera en face au même moment. On peut donc saluer l'initiative !


Sources

mardi 16 juin 2015

[WD19] Filigrane sur un PDF déjà généré

Ayant des fichiers PDF déjà générés, je cherchais une solution pour rajouter un filigrane du style "Duplicata" pour une réimpression. Travaillant en Windev, je suis tombé sur la solution de Jurassic Pork sur les forums de PC SOFT, où il conseille d'utiliser ITextSharp, un assemblage .NET qui permet en gros de générer des PDF ou de les manipuler (séparer en plusieurs documents, fusionner, ajouter un filigrane ou un tampon, remplir des formulaires, etc).

Pour une question de licence, il recommande d'utiliser une ancienne version, soit la 4.1.6 (qu'on peut télécharger à l'adresse suivante via nuget : https://www.nuget.org/packages/itextsharp.4.1.6.0) et qui est sous licence MGPL/LGPL... Mais attention, d'après plusieurs sources, celle-ci est deprecated (considérée comme obsolète). Si vous souhaitez travailler avec une version plus récente, vous retrouverez l'assemblage sur Sourceforge (projet ITextSharp). Notez que la version 5 est passée sous licence AGPL. Pour savoir ce que cela implique, consultez le site GNU.org, section "Licences". 

Intégrer l'assemblage .NET 

Si vous ne vous rappelez pas comment intégrer un assemblage dans votre projet, voici comment il faut procéder : 
  • Dans l'explorateur de projets, clic droit sur "Assemblages .NET". 
  • Choisissez l'option "Utiliser un assemblage .NET dans le projet".
  • Cliquez sur le bouton "Parcourir" dans la fenêtre qui s'ouvre.
  • Sélectionnez le fichier "itextsharp.dll" puis cliquez sur OK.
  • Validez et recompilez le projet.

Procédure pour ajouter le filigrane

La procédure écrite par "JP" recevra en paramètre trois éléments : l'emplacement du fichier source, l'emplacement (complet - avec le nom de fichier et l'extension de celui-ci) pour le fichier de destination, et le texte qu'on souhaite afficher.


En début de procédure on va déclarer les premières variables :
  • Une variable de type entier pour contenir l'index de page, qui sera en fait utilisée dans une boucle en partant de la valeur 1. Il sera nommé "pageIndex".
  • Un objet de type PdfReader, qui va servir à charger le fichier source (on passe l'emplacement du fichier en paramètre du constructeur). Il sera nommé "MonFichierPDF".
  • Un objet de type FileStream pour initialiser un flux pour la création du fichier de destination (les paramètres du constructeur, sont, dans l'ordre : l'emplacement du futur fichier, et le mode de création - ex : FileMode.OpenOrCreate). Il sera nommé "fluxSortie".
  • Un objet de type PdfStamper qui sera utilisé pour ajouter du contenu supplémentaire au fichier source. Les paramètres du constructeur sont : l'objet PdfReader précédemment instancié, et le flux de sortie). Il sera nommé tout simplement "pdfStamper".
La fameuse boucle dont il était question ci-dessus est de type "POUR variable = x _A_ y". Dans ce cas-ci on réutilise notre entier - nommé "pageIndex" qu'on initialise à 1 en début de boucle, pour aller jusqu'à "MonFichierPDF.NumberOfPages"(inclus).


Ensuite dans la boucle il va falloir effectuer plusieurs choses :
  • D'abord la création d'un objet dynamique de type "itextsharp.text.rectangle". Il s'agit d'une représentation d'une forme géométrique. Dans ce cas-ci l'objet contiendra la représentation géométrique d'une page. Cela nous permettra de récupérer sa longueur et sa largeur afin de plus tard, placer le filigrane au bon endroit.
  • On va instancier un objet dynamique de type "PdfContentByte". Il va en fait contenir les images et le contenu textuel de la page renvoyée par notre objet "pdfStamper". Pour obtenir cela on appelle la fonction GetOverContent() en passant en paramètre le numéro de la page.
  • On va configurer la police et la taille pour le futur filigrane.

Mais ce n'est pas tout !


Toujours dans la boucle qui parcourt les différentes pages de notre document PDF, on va commencer à créer le filigrane. Tout d'abord à l'aide d'un objet "PdfGState" - qu'on va nommer "graphicsState" -, on va définir son opacité (à 0.4 dans l'exemple). Pour cela il faut écrire :

graphicsState.FillOpacity = 0.4

Ensuite, à l'aide de la fonction SetGState() de l'objet "PdfContentByte", on va appliquer cette caractéristique d'opacité au contenu existant. On définit ensuite la couleur de l'écriture - à l'aide de SetColorFill() -, puis on indique qu'on va commencer à saisir du texte - en utilisant BeginText().

La méthode suivante - ShowTextAligned() - va recevoir en paramètre la position du texte (ex : Element.ALIGN_CENTER), le texte à afficher, sa position sur la page - qui sera calculée en divisant respectivement la hauteur et la largeur par 2, et la valeur de la rotation. Si vous avez bien compté, cela fait au total 5 paramètres.

Dernière ligne de la boucle, il faut appeler la fonction EndText() de notre objet "PdfContentByte". Tous ces traitements se répéteront donc pour chacune des pages présentes dans le PDF. Cela peut prendre du temps en fonction du nombre de pages à traiter.


Ensuite il faut appeler la méthode Close() sur nos deux objets, "pdfStamper" et "fluxSortie". C'est très important pour que le fichier soit correctement sauvegardé et pour que le programme libère tous les descripteurs de fichiers ouverts.

Bon développement !

Sources

Forums PC-SOFT