Manipulating filenames in Excel or Access, or VB/A

Development, VBA

Do you often need to manipulate filenames in VBA ?
Here’s a small set of very useful functions that I regularly use:

  • GetFileExt(), ChangeFileExt()
  • StripFileName(), StripFilePath() and StripFileExt()

Please see the code comments for more details and specifics on how to use them.

 

0 comments

A simplified sprintf function for VBA

Development, VBA

Did you ever need to quickly replace some placeholders in a string with a variable number of literals or variable values ?

Here’s a ssprintf() VB/A variant of C’s sprintf() function.
Let’s say that the first “s” in the name stands for “simplified”.
We’re – of course – far away from the full fledged power of the C function, but this may nonetheless come in handy or just be a starting point for your own custom implementation.

Check the comments for details.

 

0 comments

The case for the accented characters

Development, VBA

Do you want of the get rid of the accented characters when you convert a string to upper case in VBA ?

Sure, if you’re developing an Access (or another Office – Excel, Word, etc… – or VB/A) application targeting french, you’ll want to sometimes avoid the À for Ucase$(“à”).
I’m speaking of the default behavior of VB/A’s Ucase$() function:

This UUCase() function may spare you some time (talking about minutes, of course):

Voilà.

0 comments

Comment Chuck Norris m’a aidé à répondre à une arnaque email

Actualités, Entertainment, Internet, Security

Ca vient de se passer, une arnaque dont l’email d’hameçonnage est simple et n’attire pas forcément la suspicion immédiate.

Voici le message:

Bonjour,
Pourrai-je te parler par mail ?
<<nom et prénom connus>>
<<fonction correspondante>>

La (vraie) personne aurait toutes les bonnes raisons de me parler ainsi; on a une situation professionnelle un peu délicate en cours.
Evidemment, je regarde l’expéditeur avant de prendre au mot le message.
Bien sûr, je suis quelque peu sceptique en voyant qu’Outlook présente l’expéditeur ainsi “<<adresse email>>@gmail.com de la part de <<nom et prénom connus>> <<adresse contenant le nom d’une entreprise française très connue>>fr@gmail.com>>”.

La personne est française et travaille en suisse; je me dit qu’il me contacte depuis l’Outlook d’un copain d’une grande boîte, et que ce dernier a aussi son gmail privé configuré dans son Outlook (d’où le “De la part de”).
Je sais, ça fait beaucoup d’assomptions, mais il y a sa fonction (écrite de façon dont on a l’habitude le l’abréger, pas courant), et l’endroit où il l’exerce. Ceci juste en dessous de son nom.

Ma première réponse

Bonjour <<prénom>>,

Bien sûr.

Tu peux aussi m’appeler sur mon portable perso (<<n° de portable>>)
si tu préfères discuter à un moment qui t’arranges mieux
(parfois ça évite les malentendus des écrits).

Salutations,
Francesco.

Aie, aie, aie, j’y ai glissé mon numéro de portable privé !

Le deuxième message

Merci pour ton mail. Je vais très mal après avoir oublié mes affaires ( mon téléphone, carte de crédit, argent)
dans un taxi ici où je suis actuellement pour 2 jours. Je souhaite également que tu gardes ce mail pour toi
uniquement pour ne pas inquiéter mon entourage. Y’a t’il un bureau de tabac ( Buraliste) non loin de toi ?

Bon ben là, compris, il habite dans un taxi de puis deux jours ;-P

Ok, let’s have some fun !

Allez, mon temps est perdu, autant en profiter un peu. Ca sera moins agréable après, si ça prends d’autres proportions.
Je Google “adresse tabac paris”.
Voici ma deuxième réponse:

Ouh là là, pas de soucis.
Rejoins-moi au tabac du 22 Avenue George V, c’est à côté du pont de l’Alma (c’est à côté de ma résidence ici à Paris).
Je garde cet échange entre nous.
Francesco.

(Je réside à Genève en Suisse).

La réponse ne se fait pas attendre:

Je suis à Nantes
Je voudrais recharger ma carte afin de pouvoir régler mes frais de déplacement et assurer mon retour .
J’aimerais s’il te plaît, que tu me viennes en aide en m’achetant dans les kiosque à tabac, station services ou les supermarchés
4 coupons de rechargement Transcash MasterCard de 250 €, puis transmets moi les codes RECH je te rembourserais dès mon retour. (1000€) .
En attente de ton aide

J’ai le sourire qui se dessine gentiment sur mes lèvres, et je continue le jeu:

OK, t’inquiète pas, je m’en occupe.

Si tu as besoin d’hébergement à Nantes, dis-moi, j’ai un appartement disponible là-bas.
Tu peux appeler mon ami, M. Norrisse C., au +33 6 45 98 54 75, qui arrangera ton séjour;
tu peux y rester autant que besoin.

S’il te faut autre chose fais-moi signe.
Je prends une photo des codes avec mon portable et te les fais suivre
dans quelques minutes.

Francesco

(J’ai pas de résidence ailleurs que mon modeste appartement familial genevois).

La réponse ne se fait pas attendre:

Ok pas de soucis je compte sur toi pour les recharges.
Je reste en attente des codes RECH de chaque coupons par mail.
Merci encore pour ton aide

E là, à la fin de l’envoi, je touche:

Voilà,

Avec ce coupon du devrais pouvoir obtenir facilement l’aide dont tu as besoin.

Si tu as besoin d’autre chose, n’hésite pas.

Cordialement,
Francesco.

Il y a une pièce jointe, la photo des “coupons”:

La tête de chuck norris, trouvée sur Internet…

J’ai pas encore reçu de réponse…
Et je cache pas que j’avais déjà prévu d’envoyer un autre genre de photo (genre paysage lunaire, si vous voyez ce que je veux dire), mais comme je voulais partager ce moment publiquement…

Moralité, une attaque bête et simple, mais au bon moment.
Robot automatique ?
Script ajusté par un opérationnel dans une batterie d’élevage de scammers  ?
Malveillance ciblée ? – Que sais-je.
Mais, au final, quand même une information privée qui a fuité + mon email qui est confirmé (pas que ce soit vraiment difficile à déterminer autrement).

Restez vigilants!

0 comments

Comment garantir la sécurité des communications avec ses visiteurs sur son site Internet ?

Internet, IT Infrastructure, Security

Apprenez tout sur le protocole de sécurité SSL en quelques minutes, et protégez votre réputation en offrant aux visiteurs de votre site Internet une image de qualité adéquate en choisissant en connaissance de cause le juste certificat SSL.

Comment peut-on garantir la sécurité des informations qui sont échangées entre un site Internet et un navigateur web ?

Les informations qu’on échange avec un site web peuvent être particulièrement sensibles. Il peut s’agir de données qui concernent notre vie privée, des informations concernant des transactions bancaires ou des numéros de cartes de crédit, ou encore des identifiants de connexion à des parties administratives du site.

De notre côté, qu’on soit des amateurs de Firefox, Chrome ou d’une autre marque de navigateur Internet, c’est à partir de cet outil qui nous interface directement avec le réseau, qu’il faut agir.

Du côté du serveur Internet, c’est en forçant un protocole de communication sécurisé, SSL (Secure Sockets Layer) et en utilisant des certificats de sécurité SSL conformes qu’on va faire le nécessaire.

Dans une communication Internet normale, une personne qui se place au milieu de la conversation, en se branchant sur le réseau entre notre navigateur et le serveur, peut intercepter les paquets de données qui s’échangent. Elle peut ensuite interpréter et recomposer l’information morcelée qu’elle a capturée. C’est une attaque de type “man in the middle”, possible grâce aux techniques d’ “eavesdropping” ou écoute clandestine.

On utilise donc un protocole de communication sécurisée comme SSL, autant pour établir la communication entre le navigateur et le site Internet que pour chiffrer les données que les deux s’échangent. Ainsi, même si elles sont interceptées par un attaquant, elles resteront indéchiffrables pour lui.

Comment savoir si ma communication est sécurisée ?

On a tous pris l’habitude avec nos navigateurs Internet de voir les indices visuels qui indiquent une communication sécurisée entre le navigateur et le site qu’on consulte. Ca va du petit cadenas à côté de l’adresse du site, jusqu’ à la fameuse “barre verte” qui est une indication qui apparaît en vert pétant, avant l’adresse du site, et qu’on ne peut pas rater. Ce retour visuel du navigateur a un impact important sur l’image de confiance que reflète un site Internet, notamment en termes de qualité de service et de prise en considération de la sécurité des informations données par le visiteur.

Le certificat SSL

C’est le certificat SSL, un élément essentiel du protocole de communications sécurisées SSL, qui permet au navigateur d’afficher les éléments visuels de sécurité qui correspondent au mieux au type de certificat SSL que le site lui envoie, lors de l’établissement de la communication chiffrée.

Parmi les types de certificats SSL, le plus sophistiqué et contrôlé est le certificat SSL de type “EV”, “E” pour “Extended” et “V” pour “Validation.

Voici le retour visuel du navigateur de Google sur un site muni d’un certificat SSL standard:

francescofoti.com

Voici le retour visuel du même navigateur sur un site muni d’un certificat SSL de type “EV”:

devinfo.net green bar

La différence se perçoit nettement et on peut remarquer que l’identité du propriétaire du certificat SSL est clairement et sans équivoques mise en avant, dans le cas du certificat EV, c’est la “barre verte”.

Qu’y-a-t-il dans un certificat SSL ?

Un certificat SSL est une sorte d’enveloppe. C’est un document digital qui contient des informations d’identification de son propriétaire comme le nom de son organisation, ou celui d’une personne dans cette organisation, le département concerné, etc…

On y trouve également le ou les nom(s) de domaine(s) du(des) site(s) pour lequel(s) le certificat est sensé être valide, etc…

L’ensemble de ces informations du propriétaire est ce qu’on appelle le sujet du certificat.

Le chiffrement symétrique et asymétrique

Le certificat contient une clé de décryptage, qu’on appelle la clé publique.

Elle va permettre au navigateur de déchiffrer l’information que lui envoie le serveur. Le serveur chiffre les données avant de les envoyer avec une autre clé de cryptage, la clé privée.

Les algorithmes de chiffrement qui utilisent une paire de clé différentes (clé publique / clé privée), sont des algorithmes de cryptage dit asymétrique. La particularité des clés dans le chiffrement asymétrique, c’est que la clé publique, qui permet de déchiffrer un message chiffré (avec la clé privée), n’est pas secrète et est distribuable sans mesures de confidentialité particulières, aux navigateurs Internet. Il n’y a pas de danger au cas où la clé publique est interceptée par un tiers malveillant.

Le cryptage symétrique, beaucoup plus performant que le cryptage asymétrique, permet de chiffrer et déchiffrer un message avec une même clé, la clé secrète. Par contre, les deux parties communicantes doivent connaître et donc s’échanger cette clé. Or, à l’instant où le site distribue son certificat SSL, la communication n’est toujours pas chiffrée. Il serait insensé d’échanger la clé secrète en clair, à ce moment-là.

Voilà pourquoi on a recours au cryptage asymétrique à l’établissement de la communication sécurisée dans le protocole SSL.

Comment un obtient-on un certificat SSL à utiliser pour son site ?

C’est le propriétaire du nom de domaine d’un site Internet qui peut en faire la demande et obtenir son certificat SSL auprès d’un organisme spécialisé, qualifié d’autorité de certification – “certificate authority” ou CA en anglais. Vous en connaissez certainement quelques uns comme Digicert, Verisign, Google, ou encore le nouveau “Let’s encrypt” (ie, Mozilla).

A partir du serveur qui va héberger le site Internet, le webmestre génère une paire de clés de cryptage asymétrique (publique/privée). La clé privée doit être sauvegardée et gardée secrète avec le plus grand soin.

On constitue ensuite un document électronique qui contient les informations de “sujet” du certificat, qu’on aimerait y retrouver (nom de l’organisation, département, etc…), c’est la CSR : “Certificate Signing Request”, ou, la demande de signature électronique.

On envoie cette demande et la clé publique qu’on vient de générer, à la CA (l’autorité de certification) de son choix.

La CA a maintenant tout ce qui lui faut pour générer le certificat SSL dans lequel elle va inclure:

  • La clé publique qui lui a été communiquée;
  • Un autre certificat qui permet d’authentifier la CA elle-même, c’est le certificat intermédiaire;
  • La période de validité du certificat.

La CA signe numériquement le certificat qu’elle crée (d’où le nom CSR pour la demande) et le délivre finalement au propriétaire du site, qui peut l’installer sur le serveur. Le certificat intermédiaire (identifiant la CA) doit aussi être installé sur le serveur. Les deux certificats sont en fait envoyés au navigateur lors de l’établissement de la connexion sécurisée.

A propos de la signature numérique

Une signature numérique c’est une empreinte digitale qui est calculée par rapport à un contenu et à un algorithme de chiffrement asymétrique, de sorte que si la moindre information de ce contenu est modifiée, par exemple par un attaquant capable d’intercepter et de retransmettre le contenu altéré, l’empreinte n’est plus valide. Lorsque le receveur d’un document numériquement signé, dans notre cas le navigateur Internet, vérifie l’empreinte numérique que devrait avoir le contenu signé, dans notre cas de figure un certificat SSL, avec la clé publique de déchiffrage transmise, il s’aperçoit d’une éventuelle supercherie et peut alors considérer le contenu comme n’étant plus digne de confiance.

https://fr.wikipedia.org/wiki/Signature_num%C3%A9rique

Les certificats racine

Comme un système de poupées russes, un certificat émis contient le certificat de son émetteur qui permet de l’authentifier. Le certificat contenu est un certificat intermédiaire, lui-même contenant un certificat qui l’authentifie, et ainsi de suite. C’est ce qu’on appelle la “certificate chain”, pour désigner cette imbrication qui prend fin lorsque le certificat contenu est le certificat racine de la CA.

Le certificat racine d’une CA n’a pas besoin d’être authentifié par un certificat contenu car ces certificats sont intégrés dans des bases de données propres aux navigateurs Internet ou aux systèmes d’exploitation (Mac, Windows, Linux, …) auquel le navigateur peut accéder. Les certificats racine des CAs ne sont donc pas envoyés par le serveur Internet du site consulté, mais sont déjà présent dans le système du visiteur.

On utilise des certificats intermédiaires pour minimiser l’impact sécuritaire, au cas la clé privée de l’un de ceux-ci est compromise (généralement par vol, typiquement lorsqu’une CA se fait pirater ses bases de données). La clé privée du certificat racine n’est pas compromise si celle d’un certificat intermédiaire s’échappe. Dans ce cas, la CA peut simplement révoquer le certificat intermédiaire, en produire un autre à partir de son certificat racine, et continuer à fournir des certificats SSL.

Une CA qui s’est fait pirater ses clés privées, celles de ses certificats racine, c’est possible et c’est déjà arrivé. Disposer de la clé privée d’un certificat racine signifie être en mesure de se faire passer pour la CA compromise et distribuer des certificats SSL frauduleux.

La validité des certificats

C’est au navigateur de s’assurer de la validité des certificats qu’il reçoit. Déjà par rapport à sa période de validité. Mais aussi, chaque navigateur a d’une manière ou d’une autre accès à un catalogue de certificats racine et à des listes de certificats révoqués (racine, intermédiaires ou autres), soit dans sa propre base de données, soit dans un répertoire maintenu par le système d’exploitation (Mac, Windows) auquel il a accès. C’est ce qu’on appelle parfois le certificate store, le magasin de certificats.

Firefox par exemple utilise son propre magasin de certificats (reconnus et révoqués), alors que chrome et internet explorer sur Windows utilisent le magasin de certificats fourni par le système d’exploitation.

Si vous êtes sous Windows vous avez peut-être vu passer parfois des mises-à-jour du système dans “Windows Update” qui sont libellées avec quelque chose comme “mise-à-jour des certificats racine”; c’est justement des mises-à-jour de ces listes de certificats racine des CA, car ces derniers ne sont pas envoyés par les serveurs.

Le processus d’établissement de la communication

On peut maintenant s’intéresser au processus d’établissement de la communication sécurisée.

C’est ce qu’on appelle le “SSL handshake”, ou la poignée de main SSL, qui est une phase initiale du protocole qui se passe très rapidement. En 5 points, on a:

  1. Le navigateur demande l’accès sécurisé au site en spécifiant “https” comme protocole avant le nom de domaine, demandant ainsi au site de s’identifier;
  2. Le serveur renvoie une copie de son certificat SSL, la clé publique avec;
  3. Le navigateur vérifie la validité du certificat, en utilisant notamment le magasin de certificats racines auquel il a accès, pour valider le certificat intermédiaire inclus dans le certificat SSL. Il vérifie les certificats par rapport aux listes de révocations. Il vérifie que le nom de domaine et bien celui du site auquel on se connecte et qu’il fait partie de ceux couverts par le certificat. Il crée et chiffre avec la clé publique du serveur, une clé de cryptage symétrique qui sera utilisée pour le chiffrage symétrique de la suite de la communication; c’est la clé de session;
  4. Le serveur déchiffre la clé de session et renvoie une confirmation chiffrée avec la clé de session pour commencer la session de communication cryptée;
  5. Le server et le navigateur communiquent maintenant en cryptant les données transmises avec la clé de session que les deux connaissent.

L’importance suprême des certificats EV

On utilise SSL pour chiffrer les communications dans le but créer un environnement de confiance perceptible, entre le visiteur et potentiel client d’un site Internet et l’organisme propriétaire qui l’opère, et qui engage ainsi sa réputation.

Il s’agit de convaincre et rassurer les personnes qui accèdent aux services proposés par le site que les mesures et précautions de sécurité nécessaires à protéger la communication d’informations sensibles (transactions commerciales ou bancaires, échanges de données médicales, etc…) sont en vigueur.

Le propriétaire du site Internet est quelque part à la merci des navigateurs, qui sont ceux qui s’occupent de rendre perceptible cette sécurité. La seule chose qu’il peut faire pour communiquer une image sécuritaire respectueuse, c’est de montrer qu’il s’est porté acquéreur d’un certificat EV; une étiquette qui se paie cher dû au travail additionnel qu’effectue la CA pour authentifier le propriétaire du site. La CA, entre autres:

  • Vérifie l’existence légale, physique et opérationnelle de l’organisation,
  • Effectue les contrôles de validité des identités des personnes concernées,
  • Vérifie le droit exclusif du propriétaire d’utiliser le nom de domaine,
  • Vérifie que l’organisation a explicitement autorisé la délivrance du certificat,

Ce qui revient par exemple à vérifier l’inscription à un registre du commerce local officiel ou à valider les documents officiels d’identité des personnes concernées, etc… C’est là également que les CA se démarquent de leur concurrent, par la rapidité et la profondeur des validations qu’ils déroulent pour l’authentification du propriétaire.

Mozilla’s Let’s encrypt!

La fondation Mozilla (qui nous a apporté Firefox) est devenue une CA d’un type particulier.

Mozilla propose un système automatique de génération et renouvellement de certificats SSL de bonne qualité et ils sont gratuits. Il suffit pour cela que l’hébergeur implémente les programmes nécessaire sur ses serveurs.

Cette étonnante et innovante initiative contribue à la propager rapidement et à moindre coût, l’implémentation des communications sécurisées sur Internet; pourquoi rester sur un protocole http non sécurisé, lorsque le HTTPS – disponible partout – est immédiatement abordable ?

Seul inconvénient, mais il est de taille, il n’y a pas de certificats Let’s encrypt de type EV.

SSL c’est fini ! Maintenant, c’est TLS…

Surprise! En particulier si vous êtes arrivés jusqu’à la fin de ce billet avec les idées claires…

Dans son histoire, le protocole SSL a été révisé à cause de vulnérabilités multiples, jusqu’à ce qu’il atteigne sa version 3. Il a ensuite changé de nom, et de spécifications internes, pour s’appeler désormais (depuis 2001) TLS (Transport Layer Security), qui lui a atteint sa version 1.2. Ceci dit, toute l’information exposée ici reste valable, seul le nom du protocole change. Ouf !

https://fr.wikipedia.org/wiki/Transport_Layer_Security

S’équiper et sécuriser ses communications avec les certificats digitaux, DigiCert® et devinfo.net

Dans ma société, devinfo.net, j’ai sélectionné DigiCert® comme CA partenaire pour fournir des certificats SSL adaptés et de qualité à mes clients et partenaires.
Ils ont une équipe compétente et réactive et entre eux et moi, vous serez efficacement assistés dans les démarches administratives et techniques nécessaires.
Votre certificat SSL DigiCert® saura valoriser sérieusement la démarche sécuritaire dans laquelle vous vous engagez, en particulier dans l’image qui sera reflétée auprès de vos visiteurs et clients.

Au delà du certificat lui-même, je dispose également de solutions pour intégrer le cryptage et les communications sécurisées SSL ou PGP dans vos développements web, votre CMS comme WordPress(r) ou Joomla(r), et les applications bureautiques ou mobiles en PHP, C#, VB/VBA, C et C++ entre autres.

Toutes les informations nécessaires à me contacter professionnellement se trouvent sur devinfo.net.

0 comments

How to measure any text with Word, vba code included

Software

If you’re trying to put up a nice document template with Microsoft Word® you’ll probably have to precisely position different elements of your composition. When these elements are text, it may help to know precisely how much space you need to preserve for their layout.

Sometimes, this can even be tricky. My previous post is the starting point of this discussion, as we were wondering how much space would a date expression take on a document.

With a more generic solution, here is a new Word document with a VBA macro that will compute the length of any text in your unit of choice (millimeters, inches or centimeters).
You can use the document straight out of the box by simply opening it and following the on-screen instructions.
You can also access the code by pressing [ALT]+[F11] if you’re curious to see how it’s done.

Download this template from devinfo.net: [Text Width Calculator.docm]

Cheers.

0 comments

How do I compute the length of the longest text for a date in Word ?

Microsoft, Office, Software, Word

A Word document to compute the length of the longest text for a date in Word.

Working on the layout of a Microsoft Word French and English versions of a document template with a customer, we were trying to determine where to position a tab, so that we had the document date appear on the right of the page, near the right border. We put a tab and wrote the date, Monday 18 January 2016, as an example, to have some visual feedback. “Do you think that our tab position is far enough on the left, so that our date text will not horribly wrap on the next line ?” (that’s me translating the customer’s question). Good point !

In our template, the date of the day is expressed in the format <day name> <day number> <month name> <year>, meaning we have: Tuesday 19 January 2016 for the 1.19.2015.

We’re dealing with proportional fonts (an “i” takes less space than a “c” to print), so how can we know the maximum space to reserve for our date text, or at what distance from the right border of the page should we position our tab to avoid letting the date text wrap ?

Espace à réserver et tabulateur

Illustration – Where should I put the tab ?

Solution for French and English

To determine the space we have to preserve for the text of the date, we’re simply going to compute the length in centimeters (Europe here guys!) of the date texts for all the dates of the current year (we could have gone further on 10 years but that would be an overkill here). We then keep the length of the last of the longest texts.

To compute this length, for date texts in English or French, you can download this Word document (this is a zip archive, you can extract it with 7zip). Double click it and follow the instructions on the page.

Free download and unlimited use. Download this template from devinfo.net: word_longest_day.zip

Note on our Word documents containing macros

This Word document templates contains macros. Which means that it comes bundled with executable code. Such downloadable documents that we post on devinfo.net are numerically signed with our code certificate. This ensures that you got a valid copy that has not been tampered with malicious code. When you open the document for the first time, you’ll see the Word standard dialog for numerically signed documents, where you’ll be able to trust our publisher certificate.

Dialogue signature numérique

Word dialog for signed documents

To compute other text lengths

Need to have the same feature for any other text ? – Drop me a comment to see what I can do for the next update.

How is it done ?

I’ll post source code along with my comments in a future post.
But I’ll need you to motivate me, so drop me an inspiring comment to speed up the next post, thanks 😉 !

Enjoy !

1 comment

Comment connaître la longueur du plus long texte de la date du jour de l’année avec Word ?

Microsoft, Office, Word

Je travaillais hier matin avec un client sur son modèle de lettre Word.
Sur ce modèle de lettre que l’on veut décliner en français et en anglais, la date est positionnée grâce à un tabulateur, vers le bord droit de la page. On a naturellement écrit la date du jour, lundi 18 janvier 2016, pour avoir un visuel concret du modèle. “Pensez-vous que la date est positionnée suffisament en retrait et laisse assez d’espace pour accomoder le texte d’une date un peu plus longue ? – Ce serait embêtant que la date passe à la ligne…”. Ouf (!), question pertinente !

Dans le modèle en question, la date du jour est exprimée dans le format <jour> <numéro du jour> <mois> <année>. Autrement dit, pour le 19/01/2016, nous avons l’expression suivante de la date: mardi 19 janvier 2016.

Etant donné que nous sommes sur une police de caractères à espacement proportionnel (le caractère “i” ne prends pas la même place que le caractère “c”), comment savoir quel est l’espace maximal à réserver, ou autrement dit à quel distance de la marge de droite positionner notre tabulateur pour éviter le problème de retour à la ligne intempestif ?

Espace à réserver et tabulateur

Illustration – Espace à réserver et tabulateur (Les bulles sont en anglais, mais pointent les éléments en question)

Solution pour le français et anglais

Pour connaître la largeur de l’espace à reserver, préférablement en centimètres, il faut “simplement” calculer la largeur de toutes les dates de l’année exprimée dans le format souhaité (on pourrait aller jusqu’à 10 dans le futur si on pinaille) et retenir simplement la dernière des plus longues des expressions mesurées.

Pour découvrir cette valeur, pour les textes de date en français ou en anglais, vous pouvez téléchargez ce document word (archive zip à décompresser, utilisez par exemple 7zip), double-cliquez le et suivez les instructions affichées à son ouverture.
Télécharger et utilisez gratuitement le document sur devinfo.net: word_longest_day.zip

Remarque sur les documents avec macros

C’est un document Word avec une macro, autrement dit qui exécute un programme lorsque vous appuyez sur le bouton proposé. Je veille à ce que le code des documents VBA en provenance de devinfo.net (là où se trouve ce document) soit signé numériquement, ce qui garantit qu’il arrive chez vous sans modification malicieuse, mais vous devez autoriser explicitement l’exécution de ces macros à l’ouverture du document.
Lorsque Word vous propose une boîte de dialogue similaire à celle-ci, choisissez la dernière option (faire confiance à l’éditeur) et cliquez sur le bouton [OK] :

Dialogue signature numérique

Boîte de dialogue de signature numérique

Pour calculer d’autres largeurs de textes

Avez-vous besoin de la même fonction pour calculer d’autres largeur de textes ? – Laissez un commentaire avec vos remarques pour la prochaine mise-à-jour.

Comment c’est fait ?

Je dévoilerai et expliquerai volontiers le code source de cette macro dans un post futur.
Mais j’ai besoin de vous, aidez-moi en posant un commentaire motivant, Merci 😉 !

Enjoy !

0 comments

Tracking active directory user logon/off for the just cause – Part 1

IT Infrastructure, Microsoft, Software

Doing some work remotely, typically using a VPN to access our customer(s) network, or some other type of remote access software (like GotoAssist, ScreenConnect or – God forbids – TeamViewer) is unavoidable when we’re maintaining our customers infrastructures.

The recurring problem I encounter and that initially got me started on tracking user logons and logoffs is to determine a convenient moment where I can interrupt my customer’s business, typically to reboot a server or a shared resource.

That’s where it comes in very handy to know if someone is still working on his PC or has left a session open, before firing an unscheduled interruption. Rebooting a Windows SBS 2011 server can take it out for 15 minutes, or even more if it has to apply everlasting updates (#fearDotNetUpdates).

I’m gonna give you two cool methods to track users sessions and see who’s logged on.

These two methods require that you have a hand in the administration of the Active Directory server that manages your domain, because we’re going to implement a group policy to help us do that.

For this first method, we’ll simply use two batch files. One that is run for each user at his/her logon time, and the other for the logoff.

You just need to use a location either on the server file system or a network shared directory where the scripts must have write access. I do use a shared directory on a NAS box and I set the “hidden” property of the shared directory to true (like ending the shared resource name with ‘$’ on windows).

Let’s say we use a NAS named “MYNAS” and the shared directory “loggedon”. Then:

At user logon, we execute:

@echo %DATE% %TIME% > \\MYNAS\loggedon\%USERNAME%-%COMPUTERNAME%.txt

And at logoff, we execute:

@del \\MYNAS\loggedon\%USERNAME%-%COMPUTERNAME%.txt

So, with that, you end up with a directory full of text files for each currently open user session.
You can peek into that directory to know who’s logged on.

How do you setup these scripts on your Windows server ? Here, on technet

Cool, but wouldn’t it be cooler if we had a mobile app where we can select a customer domain and see a list of all last logons and logoffs ?
Sure, wait for it, that’s coming on part 2.

0 comments

A pure (windows) “C” version of urlencode

Internet, Software

This is a windows pure C language version of a urlencode() function.
Sometimes, when I need simple tools and self contained windows EXEs (“just run it”, no “dll”s to copy or register), I find it simpler to code in C than in other languages. Particularly when you want to link with specialized libraries available only in C. So, I scavenged the web for a ready to use urlencode routine and found nothing really useable out of the box. Although this one is largely inspired by what I found.

// Warning !! caller must free the string TCHAR pointer
// source (NOT endorsed; that anyway doesn't work): http://www.silverwolf.co.kr/4890?ckattempt=1
TCHAR *urlencode(TCHAR *str)
{
  TCHAR *encstr, buf[2 + 1];
  TCHAR c;
  int i, j;

  if (str == NULL) return NULL;
  if ((encstr = (TCHAR *)malloc((_tcslen(str) * sizeof(TCHAR)* 3) + sizeof(TCHAR))) == NULL)
    return NULL;

  for (i = j = 0; str[i]; i++)
  {
    c = (TCHAR)str[i];
    if( ((c >= '0') && (c <= '9')) || ((c >= 'A') && (c <= 'Z')) ||
        ((c >= 'a') && (c <= 'z')) || ((c == '@') || (c == '.') || 
         (c == '/') || (c == '\\') || (c == '-') || (c == '_') || 
         (c == ':') || (c == '~'))) {
      encstr[j++] = c;
    }
    else
    {
      wsprintf(buf, _T("%02x"), c);
      encstr[j++] = _T('%');
      encstr[j++] = buf[0];
      encstr[j++] = buf[1];
    }
  }
  encstr[j] = _T('\0');

  return encstr;
}

Example:

//...
  lpEncodedURL = urlencode(lpURL);
  if (NULL == lpEncodedURL) {
    // return AAARGH, memory problem with malloc();
  }
//...
  free(lpEncodedURL);
//...

Enjoy !

0 comments