Changer la langue de tout le contenu d’un PowerPoint

Option Explicit   
Public Sub ChangeSpellCheckingLanguage()   
    Dim j As Integer, k As Integer, scount As Integer, fcount As Integer 
    scount = ActivePresentation.Slides.Count 
    For j = 1 To scount 
        fcount = ActivePresentation.Slides(j).Shapes.Count 
        For k = 1 To fcount 
            If ActivePresentation.Slides(j).Shapes(k).HasTextFrame Then 
                ActivePresentation.Slides(j).Shapes(k) _ 
                .TextFrame.TextRange.LanguageID = msoLanguageIDFrenchCanadian 
            End If 
        Next k 
    Next j 
End Sub

Codes de langues

msoLanguageIDFrenchCanadian
msoLanguageIDEnglishUS
msoLanguageIDEnglishCanadian

Exporter historique TFS en CSV

using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
 
using Microsoft.TeamFoundation.Client; // NuGet
using Microsoft.TeamFoundation.VersionControl.Client; // GAC
 
namespace TFSHistory
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            var tpp = new TeamProjectPicker(TeamProjectPickerMode.SingleProject, true);
            var result = tpp.ShowDialog();
            if (result != DialogResult.OK) return;
 
            var tpc = tpp.SelectedTeamProjectCollection;
            var versionControl = tpc.GetService<VersionControlServer>();
 
            var tp = versionControl.GetTeamProject(tpp.SelectedProjects[0].Name);
            var path = tp.ServerItem;
 
            var q = versionControl.QueryHistory(path, VersionSpec.Latest, 0, RecursionType.Full, null, new ChangesetVersionSpec(1), VersionSpec.Latest, Int32.MaxValue, false, true, false, false);
           
            using (var file = new StreamWriter(@"fichier.csv", true, Encoding.UTF8))
            {
                file.AutoFlush = true;
                file.WriteLine("CS, Date, User, Comment");
 
                foreach (Changeset cs in q)
                {
                    if (cs.Committer.Contains("Elastic")) continue;
                    if (string.IsNullOrWhiteSpace(cs.Comment)) continue;
 
                    var comment = cs.Comment;
                    comment = comment.Replace(',', ' ');
                    comment = comment.Replace(Environment.NewLine, " ");
 
                    file.WriteLine(string.Format("{0},{1},{2},{3}", cs.ChangesetId, cs.CreationDate, cs.Committer, comment));
                }
            }
        }
    }
}

Ajuster le compte des commentaires et des catégories sous WordPress après importation

<?php
// Place this file in your root directory and navigate to it.  Script will correct counts for comments and categories.
include("wp-config.php");

if (!mysql_connect(DB_HOST, DB_USER, DB_PASSWORD)) {  die('Could not connect: ' . mysql_error());  }
if (!mysql_select_db(DB_NAME)) {  die('Could not connect: ' . mysql_error());  }

$result = mysql_query("SELECT term_taxonomy_id FROM ".$table_prefix."term_taxonomy");
while ($row = mysql_fetch_array($result)) {
  $term_taxonomy_id = $row['term_taxonomy_id'];
  echo "term_taxonomy_id: ".$term_taxonomy_id." count = ";
  $countresult = mysql_query("SELECT count(*) FROM ".$table_prefix."term_relationships WHERE term_taxonomy_id = '$term_taxonomy_id'");
  $countarray = mysql_fetch_array($countresult);
  $count = $countarray[0];
  echo $count."<br />";
 mysql_query("UPDATE ".$table_prefix."term_taxonomy SET count = '$count' WHERE term_taxonomy_id = '$term_taxonomy_id'");
		}

$result = mysql_query("SELECT ID FROM ".$table_prefix."posts");
while ($row = mysql_fetch_array($result)) {
  $post_id = $row['ID'];
  echo "post_id: ".$post_id." count = ";
  $countresult = mysql_query("SELECT count(*) FROM ".$table_prefix."comments WHERE comment_post_ID = '$post_id' AND comment_approved = 1");
  $countarray = mysql_fetch_array($countresult);
  $count = $countarray[0];
  echo $count."<br />";
  mysql_query("UPDATE ".$table_prefix."posts SET comment_count = '$count' WHERE ID = '$post_id'");
		}
?>

Certificats Windows sous Java

Sous Java, la procédure normale pour utiliser des certificats PKI SSL est de les importer dans le Trust Store et Key Store en utilisant l’outil keytool disponible dans le JDK. Un autre bon outil pour manipuler les keystore est Key Store Explorer (KSE)

Par contre, sous Windows, les certificats sont installés dans Windows Certificate Store. Est-il réellement nécessaire de les exporter (ce qui implique avoir accès à la clé privé), les transformer (avec OpenSSL) et de les importer dans les fichiers JKS de Java?

Bien, il s’avère que non, puisqu’il soit possible de lancer une JVM avec les paramètres suivants pour utiliser les certificats de Windows directement:

java -Djavax.net.ssl.trustStoreType=Windows-ROOT -Djavax.net.ssl.keyStoreType=Windows-MY

Ceci est rendu possible grâce au SunMSCAPI JCE Provider et cela fontionne bien pour des certificats générés à partir d’un crypto basée sur RSA.

Par contre, pour des certificats générés en utilisant la crypto moderne, bien Java 8 supporte les certificats de la nouvelle génération stockés dans les fichiers JKS, SunMSCAPI, qui n’a pas évolué, ne supporte pas CNG (CryptoAPI Next Generation).

Ainsi, avec Java 8 et des certificats moderne, de retour à la case départ…

À quand une nouvelle génération du provider SunMSCAPI (ou une alternative) permettant d’aller lire directement les certificats CNG dans le Microsoft Certificate store? Car, pour l’instant, il semble qu’il existe au moyen outre codé soi-même en JNI / JNA une interface à CNG.

Pheox JCAPI offre bien une alternative à SunMSCAPI, mais ce produit commercial n’a pas évolué avec le temps et ne supporte pas CNG.

Changer la clé de produit Microsoft Office 2013 sur VM Azure

Après un certain temps, à force de changer d’adresse IP, la licence d’Office 2013 sur une VM Azure finit par détecter un changement de matériel et se désactive. Si on a une licence MSDN ou BizSpark sous main, on peut contourner ce problème en changeant sa clé de produit en ouvrant une ligne de commande: (Windows-R, CMD) en lancer la commande:

cscript « C:Program FilesMicrosoft OfficeOffice15OSPP.VBS » /inpkey:NOUVELLE-CLÉ

ou

cscript « C:Program Files (x86)Microsoft OfficeOffice15OSPP.VBS » /inpkey::NOUVELLE-CLÉ

Selon sa combinaison de Windows et Office 32 ou 64 bits.

 

Macro pour dévérouiller un fichier Excel par la méthode « Brute Force »

Sub PasswordBreaker()
Dim i As Integer, j As Integer, k As Integer
Dim l As Integer, m As Integer, n As Integer
Dim i1 As Integer, i2 As Integer, i3 As Integer
Dim i4 As Integer, i5 As Integer, i6 As Integer
On Error Resume Next
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
ActiveSheet.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If ActiveSheet.ProtectContents = False Then
MsgBox « One usable password is  » & Chr(i) & Chr(j) & _
Chr(k) & Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
Exit Sub
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
End Sub

Kasparov vs. Deep Blue – Un bug permet la victoire !

En 1997, le super ordinateur Deep Blue d’IBM bat le champion mondial d’échecs  Garry Kasparov, alors que celui-ci s’était vanté de ne jamais pouvoir se faire battre pour une machine. Un mouvement en particulier que la machine a fait, le sacrifice d’une pièce, aurait déstabilisé Kasparov, croyant que ça laissait présager à une stratégie de longue haleine. On avait à l’époque pensé qu’une telle stratégie était trop sophistiquée pour une machine, et qu’un  humain avait sûrement intervenu pendant la partie. En fait, 15 ans plus tard, la vérité éclate au grand jour. Le mouvement en question était en fait le résultat d’un bug informatique! La machine n’aurait pas su quoi jouer et en aurait donc choisit un au hasard…

 

TrensQuébec refait surface

Ça faisait un bout que je n’avais pas entendu parler du projet de monorail  TrensQuébec (Transport Rapide Électrique National Suspendu), mais voilà qu’on a en entrevue à la Première chaîne de RC Jean-Paul Marchand, coordonnateur du projet, où on annonce une rencontre avec Investissement Québec. C’est un projet innovateur qui utilise le fameux moteur-roue inventé en 1994 par à Hydro-Québec. Le moteur-roue, presque 20 ans plus tard, semblait avoir pris le même chemin qu’un autre belle oeuvre du génie québecois/canadien: le fameux Avro Arrow. Ce projet, soit dit en passant, lui vieux de près de 60 ans, a aussi refait surface récemment comme alternative au F35! Mais, le moteur-roue a sûrement plus de chance de réssuciter, on l’espère, puisque les besoins en transport en commun sont plus criants et que la construction d’un tel monorail plutôt qu’un TGV serait 3 fois moins coûteux, sans compter qu’il serait plus flexible et mieux adapté à nos besoins.

IE enfin sur Xbox!

J’ai reçu récemment une invitation à me joindre au Fall 2012 Xbox LIVE Beta. Une version version de IE pour Xbox y est maintenant proposée. Enfin pouvoir naviguer sur Internet directement sur sa télé avec le Xbox, comme le permettait déjà depuis longtemps le PlayStation. Évidemment, pas de plugin Flash, alors pas de tou.tv ni autre contenu vidéo qui en dépend… Que nous réserve le prochain modèle de Xbox? Au minimum, du matériel rehaussé selon cette fuite.