Comment réduire les dépenses de votre département IT

reduire depense dep TIBeau titre, n’est-ce pas ?

C’est quotidiennement mon défit au boulot que de réduire les dépenses, faire plus avec moins, rendre mon équipe la plus rentable possible, etc…

Voici donc des trucs pour économiser de l’argent dans votre entreprise grâce au département IT !

Je vous promets que vous risquez d’économiser des centaines de milliers de dollars (disons 10% de votre masse salariale) si vous réalisez les prochaines étapes comme il faut.

Classez les employés

Je vais vous proposer un exercice: Classez vos employés.

Cela peut avoir l’air très discriminant, mais la tâche vaut la peine d’être faite.

Allez-y: classez-les par catégorie. D’un côté: ceux qui prodiguent des conseils, ceux qui doivent innover constamment, ceux qui doivent réfléchir dans le cadre de leur travail.

De l’autre côté, mettez tous ceux qui ne tombent pas dans la première catégorie, et ajoutez tous ceux qui tomberaient dans la première catégorie mais qui ont au moins une tâche quotidienne à faire qui ne nécessite pas de réfléchir ardemment.

Vous allez voir, on va travailler sur les tâches du deuxième groupe !

Déterminez un objectif

Évaluez grossièrement le temps passé par jour à faire des tâches répétitives. En effet, ce sont les plus faciles à régler !

C’est facile: les tâches répétitives sont les tâches qui sont détestées des employés. En effet, un humain préfère diversifier son travail que de toujours exécuter la même tâche ad vitam aeternam.

Pensez à la facturation, tri des emails, la paie, réponses faciles, réception, expédition, publipostage, emballage, tri, copier-coller, etc…

Ce sera le premier objectif.

Ensuite, regardez les autres tâches, celles qui ne demandent pas à son exécutant de réfléchir réellement. Celles-là sont dangereuses car elles ne sont pas évidentes à voir et coûtent très cher en ressources humaines.

Aussi, elles peuvent vous coûter votre croissance !

Pensez par exemple à un centre d’appel: si votre chiffre d’affaires double, il y a de fortes chances pour que vous soyez obligé de doubler les effectifs. Pourtant, très souvent les mêmes questions sont posées (+ de 50% des appels). Cette partie devrait donc être votre deuxième objectif.

Il est beaucoup plus difficile, mais ô combien important !

Pensez au recouvrement, à la recherche, à la production de rapports, à la comparaison de vos compétiteurs, planification des horaires, réception, expédition, production, questions des clients qui reviennent souvent, fidélisation des clients, etc…

Faites évaluer

Vous aurez sans doutes besoin d’un « outsider » pour évaluer la situation et vous dire quoi faire, en combien de temps et dans quel ordre. Cette tâche devrait prendre quelques jours, tout au plus.

C’est vraiment l’étape capitale: il vous faut un professionnel qui connaît la technologie et qui a une bonne vision d’ensemble, et une vision d’avenir.

Montrez-lui ce que vous avez trouvé: les tâches répétitives. Expliquez lui comment fonctionne en gros la logistique de votre entreprise et surtout, vos plans de croissance.

Il pourra vous conseiller de prioriser certaines choses en fonction de vos objectifs de croissance !

Exécutez

C’est l’étape finale.

Ce n’est pas la plus coûteuse, au contraire. Vous dépensiez bien davantage à faire travailler vos employés pour rien ! C’est un investissement sur le long terme, qui sera sans doute rentabilisé en moins de 6 mois !

Il vous faut un programmeur (une ressource IT). Que ce soit à l’interne ou à l’externe, elle doit être dédiée à la tâche d’automatisation des processus.

Cette personne implémentera les ressouces recommandées par le consultant, et élaborera les processus plus techniques.

Au final

Économisez des centaines de milliers de dollars !

Vous verrez, vous ne pourrez plus jamais implémenter une nouvelle fonctionnalité dans votre entreprise sans immédiatement chercher à automatiser les processus humains afin d’éviter les erreurs, rentabiliser votre personnel et optimiser globalement vos ressources !

 

Comment lier son compte Gmail ou Google Apps à son iPhone (avec la double authentification – validation à deux étapes)

Voici les instructions pour lier votre compte Gmail ou Google Apps à votre iPhone ou iPad si vous utilisez la double authentification de Google (aussi connue sous le nom validation à deux étapes ou authentification à deux étapes).

D’abord, il faut créer un mot de passe pour l’application. Pour faire cela, vous aurez besoin de votre ordinateur. Suivez ces instructions:

Ensuite, dans la gestion de votre compte:

Ensuite, il faut créer un mot de passe spécifique pour votre application ou votre périphérique. Profitez-en donc pour nettoyer les mots de passes inutilisés !

 

Ensuite, rendez-vous sur votre iPhone ou iPad.

Puis Ajouter un compte.

Puis Exchange.

Le prochain écran ne vous présentera pas sur le champ tous les champs, vous devrez d’abord en entrer quelques uns, puis entrer le mot de passe que vous avez créé sur votre ordinateur un peu plus tôt.

Comment entretenir 6 réseaux sociaux et avoir une carrière en même temps

entretenir 6 reseaux et carriereHier, je me délectais dans un déjeuner de bienfaisance pour le Club des Petits Déjeuners du Québec.

Comme je suis un gars de web, et que la conversation de ma table s’est dirigée vers les réseaux sociaux, j’ai pu donner mon opinion et des conseils.

Le problème qu’avaient tous les membres de la table était de se tenir à jour, et de tenir à jour tous les réseaux sociaux. Ils se sentaient dépassés !

Moi, je maintiens plusieurs réseaux sociaux de l’entreprise pour laquelle je travaille. Mais je tiens à jour et nourris énormément et très activement 5 réseaux sociaux différents, et je nourris également mon blogue. Tout cela, en ayant une carrière plutôt prolifique et en ayant une famille. C’est possible ! Continue…

4 trucs : ou comment je fais pour garder la tête vide

J’ai un gros problème de migraines depuis des années. Je ne connais pas la raison. Est-ce le stress ? une maladie ? ou est-ce plutôt parce que j’ai des millions de choses qui tournent dans ma tête ?

J’ai trouvé une nouvelle stratégie pour m’éviter d’avoir trop de pensées et pouvoir me concentrer sur les choses qui comptent vraiment. Continue…

How NOT to Depend on GoDaddy For Your DNS Servers

Today, GoDaddy has been hacked.

Thousands and perhaps millions of websites were unreachable. Because they were hosted on GoDaddy’s servers, or because their DNS servers were hosted there. The now-epic tweet announced


Continue…

Médiane du 4ième facteur premier des nombres naturels

Ce billet s’adresse aux mathématiciens et adeptes très intéressés. J’ai retrouvé récemment mon algorithme (ou une partie de celui-ci).

À l’Université, j’ai travaillé momentanément pour Jean-Marie De Koninck afin de programmer un algorithme permettant de découvrir la médiane du 4ième facteur premier des nombres naturels en un temps raisonnable. C’est un problème en théorie des nombres, et dont la solution pourrait être utile à ceux faisant de la recherche en cryptographie ou en factorisation des grands nombres premiers.

J’ai égaré beaucoup de documentation (notamment la formule découverte par Jean-Marie De Koninck), mais comme je viens tout juste de retrouver mon algorithme, je me disais que je me devais de le publier pour la prospérité.

Ma découverte, le nom 5 737 580 066 077 (de mémoire) a été publié dans un livre de Jean-Marie De Koninck que vous pouvez vous procurer ici sur Amazon.

Qu’est ce que ce nombre représente ?

Le nombre est la médiane du 4ième facteur premier. Je vais vous expliquer ce que représenterait le 1er facteur premier.

Prenons tous les nombres naturels supérieurs à 1. Décomposons-les en leurs facteurs premiers (^ veut dire exposant). Exemple:

2=2
3=3
4=2^2
5=5
6=2*3
7=7
8=2^3
9=3*3
10=2*5

Prenons le premier nombre premier de chaque décomposition (en ignorant son exposant) et faisons une statistique dessus. On obtiendra:

2, 3, 2, 5, 2, 7, 2, 3, 2, …

Ordonnons-les en ordre croissant

2, 2, 2, 2, 2, 3, 3, 5, 7, …

Clairement, la médiane (le nombre du milieu) est 2. C’est plutôt trivial car la moitié des nombres naturels sont pairs. On obtiendra donc 2 comme premier facteur premier de la moitié des nombres.

Ce que mon algorithme a permis de trouver, c’est la médiane du 4ième facteur premier (la statistique obtenue en ne prenant que les 4ièmes facteurs, pour les nombres ayant 4 facteurs ou plus, cela va de soi).

L’algorithme trivial

Il était facile de construire un algorithme permettant de résoudre l’équation découverte par Jean-Marie De Koninck. Par contre, cet algorithme devait être exécuté sur chacun des nombres premiers jusqu’à ce que la valeur de l’équation dépasse une certaine valeur.

Mon algorithme initial aurait pris, selon mes calculs, plus de trois mois avant d’arriver au nombre. Trois mois, si seulement il ne s’arrête pas, et s’il ne rencontre pas d’obstacle !

J’ai donc dû trouver une meilleure solution. J’ai optimisé chaque commande IF, la librairie de calculs en grands nombres (car un nombre de cette taille ne se gérait pas avec les ordinateurs 32 bits de l’époque et il était impossible de faire des calculs avec les nombres) mais malgré tout, l’exécution était fastidieuse. Le problème résidait aussi dans la grande quantité de mémoire requise pour trouver les nombres premiers.

J’ai utilisé le crible d’Ératosthène pour prévoir d’avance une certaine plage de nombres premiers (20 000, de mémoire).

Le code de l’algorithme

J’ai programmé le tout en language C, en 2006 lorsque j’étais moins avancé en programmation qu’aujourd’hui. Je vous demande donc d’être indulgent :-)

Aussi, je n’ai pas ré-exécuté mon code depuis, ni même avant d’écrire ce billet. Je ne sais pas s’il est partiel ou complet, et s’il fonctionne bien avec cette version.

J’ai utilisé une librairie de « bigDigits » que vous trouverez ici, accompagnée de l’archive de mon algorithme. Cliquez ici pour tout télécharger

Voici le coeur de l’algorithme principal:

Comment accélérer la vitesse de mon site web ?

vitesse site webVous avez un site web, commercial ou pas, et vous le trouvez lent. Il existe plusieurs solutions.

Cet article est pour tous les auditoires: il est simple, mais on entre aussi dans la technique. Mettez vos efforts à réaliser ce que vous comprenez d’abord.

 

Optimiser ce qui est déjà là

Comment est programmé votre site ? S’il ne s’agit que de pages HTML statiques, vous lisez cet article pour rien car votre site est probablement déjà rapide et le problème se trouve dans la connexion du client (la personne qui accède à votre site) ou dans la connexion du serveur (là où est hébergé votre site).

Si votre script est programmé en PHP ou ASP et qu’il utilise des bases de données, cet article vous concerne.

Ce qui est plus facile, d’abord, c’est de minimiser les opérations en PHP. Il y a toujours plusieurs manières de faire: plus compliqué et plus simple. Assurez-vous d’utiliser toujours la manière simple. Je sais, c’est facile à dire :-).

Mais bon, le site est programmé et vous n’avez pas envie de relire votre code entièrement pour tenter de l’optimiser, et ainsi créer des bugs. Concentrons-nous alors seulement sur les requêtes de bases de données.

Optimiser les requêtes de base de données

D’abord, le B.A.-BA: assurez-vous que votre base de données est sur le même serveur que votre site web, et non sur un serveur situé ailleurs physiquement. Si le serveur n’est pas le même, assurez-vous tout de même que la connexion entre les deux machines est optimale.

Ensuite, assurez-vous d’initier la connexion à votre base de données au début de l’exécution du script et de ne pas l’initier à nouveau dans le script. Si vous n’utilisez pas de Framework ou de MVC qui s’occupe de ça, c’est d’autant plus important de le vérifier. Quand je parle de connexion à la base de données, je parle d’une ligne qui ressemble à ça:

Le truc, c’est de mettre ceci seulement dans le header.php, si vous en avez un.

Optimiser le nombre de requêtes à la base de données

L’étape suivante est d’observer toutes les requêtes à la base de données que votre script fait. Faites-en l’inventaire (ça vaut la peine) et assurez-vous d’en faire le moins possible à chaque exécution de script.

Par exemple, si vous avez une requête qui va chercher tous les utilisateurs, et une boucle ensuite qui va chercher la liste des numéros de téléphone de chaque utilisateur dans une autre table, peut-être vaudrait-il mieux faire une seule requête avec un JOIN. Pour plus d’informations sur les JOIN, lisez ceci. Cette étape est cruciale car elle peut drastiquement changer le temps d’exécution de votre script.

Ce que vous ne voulez pas, c’est avoir une requête qui se trouve dans une boucle comme:

Optimiser les index de la base de données

Si vous avez des tables dans votre base de données qui ont une taille considérable (plus de 1000 entrées dans la table), il est possible que vous commenciez à voir un ralentissement sur votre site.

Pour contrer cela, les bases de données disposent d’index. C’est comme un dictionnaire: si vous devez parcourir toutes les pages pour chercher un mot en particulier, ce n’est pas optimal. Vaut beaucoup mieux faire une recherche dichotomique (voir la définition de dichotomique). C’est un peu de cette manière que fonctionnent les index.

L’inventaire de vos requêtes de base de données complété, regardez tous les noms de champs que vous avez dans des JOIN ou dans des WHERE. Voici quelques exemples:

Vous allez devoir créer des index pour chacun de ces champs. Attention cependant, l’idée n’est pas d’avoir un million d’index par table. Il faut avoir les bons. Si vous vous ramassez avec autant d’index que de champs dans votre table, c’est qu’elle est mal bâtie ou que vos requêtes sont mal bâties.

Avoir trop d’index a l’effet inverse: chaque mise-à-jour de la table ou nouvelle entrée dans la table prend davantage de temps.

Pour plus d’informations sur comment créer des index dans des tables MySQL, cliquez sur ce lien.

Utiliser la cache au maximum et Gzip

Cache, cache, cache, cache. Tout site web d’importance (avec une grande quantité de données ou de pages) a de la cache quelque part.

Qu’est-ce que le cache, exactement ? C’est un stockage temporaire de données pour ne pas avoir à faire trop de requêtes à une base de données ou à autre chose. Il existe donc 2 sortes de cache:

Le cache client

Le client, c’est l’utilisateur qui visite votre site web. S’il recharge à répétition une page, peut-être voudriez-vous dire d’une certaine manière à son navigateur qu’elle n’a pas changé et qu’il est inutile de faire des appels répétés à votre serveur. Il peut aussi être inutile d’avoir à charger à répétition le logo de votre compagnie s’il apparaît de la même manière sur chaque page.

Pour gérer la cache client, il existe plusieurs manières de le faire. Ma préférée est d’utiliser Mod_Expires dans Apache. Voici davantage d’instructions à ce sujet (en anglais).

Le cache serveur

Ce cache est plus important encore que le cache client. Il se décline de plusieurs manières.

D’abord, vous pourriez mettre en cache une forme de compilation de votre code PHP en utilisant APC. Voir plus d’informations concernant la mise en place de APC (en anglais).

Ensuite, vous devriez consulter l’inventaire de vos requêtes à la base de données, et trouver celles qui semblent le plus complexes à réaliser. De là, vous pouvez les mettre en cache dans Memcached (cache dans la mémoire vive) ou en fichier. Cliquez ici pour davantage d’information pour la mise en cache dans Memcached sous PHP.
En passant, il est possible de mettre plusieurs autres choses en cache dans Memcached. Amusez-vous !

Finalement, les pages les plus sollicitées et les plus complexes pourraient être générées en tant que fichier HTML statique. Par exemple, le script vérifie si le fichier HTML de la page d’accueil est généré récemment, et sinon, il l’efface et le regénère. C’est une logique plutôt complexe à mettre en place. Il vous faudra possiblement utiliser la fonction ob_start() en PHP, par exemple.

Tant qu’à parler de cache serveur, je vous recommande d’utiliser un programme qui minimifie (dans le language de développeur !) vos fichiers statiques CSS et Javascript.

En effet, une bonne pratique est d’avoir plusieurs fichiers Javascript afin de bien diviser le code. Je vous recommande ce programme pour le faire « on-the-fly » !

Tant qu’à y être, il pourrait être très intéressant d’utiliser Mod_gzip ou Mod_deflate. Ces deux extensions compressent les données sur votre serveur avant de les envoyer au client qui lui les décompressera à son tour. Le transfert de données est donc minimal, mais le coût en CPU est légèrement augmenté. Pour plus d’informations sur ces deux extensions, cliquez ici.

Optimiser les images

Ensuite, vous voudrez tenter d’avoir des images le moins grosses possible en poids. Si vous utilisez des JPG, c’est facile de les compresser en les créant, mais on perd de la qualité.

Si vous utilisez des PNG (très à la mode par les temps qui courent), il se peut que les dégradés ne soient pas du bon bord.

Passez toutes vos images dans le programme ImageOptim pour économiser de précieux kilo-octets ! Si vous êtes sous Windows, vous pouvez essayer PNGout.

Vérifier vos efforts et trouver d’autres pistes…

À ce points, vous en avez déjà fait beaucoup. Mais réduire la taille de nos pages est une vraie drogue. Je vous recommande d’utiliser l’extension Yslow pour Firefox ou Yslow pour Google Chrome qui vous donnera davantage de conseils et aussi de tester votre site avec l’outil PageSpeed de Google.

Également, j’utilise moi-même très régulièrement l’outil « Inpecter l’élément » de Google Chrome et son onglet « Network ». Pour ce faire, cliquez sur votre page avec le bouton droit de la souris, puis cliquez sur « Procéder à l’inspection de l’élément ». Ensuite, cliquez sur l’onglet « Network ».
Vider la cache de votre navigateur et faites recharger la page. Vous pourrez ainsi voir la taille totale de tous les éléments composant votre page, ainsi que ce qui est chargé et l’ordre dans lequel c’est chargé.

Si vous rechargez la page sans vider votre cache, vous verrez ce qui est servi par la cache client de votre navigateur. Très pratique !

Finalement, je vous laisse sur une note plutôt technique: vous pourriez investiguer l’utilisation de Nginx ou LightHttpd pour votre programme. Il pourrait être intéressant de servir les fichiers statiques au client directement par des processus qui demandent moins de mémoire et laisser les tâches ardues à Apache. Aussi, revoyez votre configuration d’Apache et modifiez-la au besoin. Mais ça, ça sera dans un autre article plus avancé !

Why You Should Put All Your Data in the Cloud

put all in cloud« Data in the Cloud » is not a new concept: Wikipedia says it’s been existing since the 1950s. But for the people in general, it is a pretty new concept.

If you are not familiar with « could computing » (like most of the population), Gmail, Hotmail, Yahoo Mail, DropBox, Google Drive, Google Contacts &  Calendar, iCloud, Amazon S3, Flickr are examples of cloud computing services.

Putting pictures in the cloud has always seemed a good idea for everyone wanting to share pictures. Flickr.com was founded in 2004 and everyone started to put their pictures there. Sharing pictures online really is an interesting innovation !

Cloud Security

Picture: http://dougkimball.wordpress.com/2011/08/22/the-cloud-are-security-standards-coming/

But nowadays we hear stories of important website leaks, or accounts hacking and people start to think putting your personal data off-site might not be clever… I think it is clever to do so, but only if you do it cleverly.

First of all, one can note a lot of advantages to put their data online: having contacts on multiple devices at the same time, all synced, having heavy files and pictures online for sharing, emails located offsite saving gigabytes of disk space and allowing for a fast search…

Among all inconvenients, security seems to worry some people. I’m asking this very simple question: what is more secure between:

  1. Having your contacts or emails managed by Google with thousands of engineers and billions of dollars of servers, security and R&D or;
  2. Having your contacts or emails located on your personal PC at home, that probably is not protected by a password, probably doesn’t have an up-to-date antivirus and anti-spyware, and using some random email server hosted by your small ISP ?

Because no matter how insecure you think the cloud is, and how true that is: your computer is even less secure !

Of course I am not stating that it is more secure to store all your data online, but I’m saying that if you do it – and you should – you have to do it properly.

Gather Your Information in the Least Number of Providers Possible

Make the complete inventory of all your stuff that is not located on your computer: pictures, movies, contacts, emails, large files, backups, music, calendar…

Then try to find providers that can host the most of it, while having the least providers as possible. Why ? because you want to concentrate your efforts into securing each provider independently.

Try to pick the most trustful providers.  For example, Google has Double Authentication (I’ll explain that later in this post).

Also, the least providers you have, the easier it will be for you to remember where your stuff is, and where to remove it from if you ever need to.

Finally, try to pick providers that offer « export » features. You sure want to trust them and be loyal to them, but another company might have a better offer someday and if you want to switch, you must be able to.

Two-Factor Authentication

two-factor authentication

Picture: http://lifehacker.com/5932700/please-turn-on-two+factor-authentication

What is it ? It means that a single password is not enough to access your data. In the old days (and even nowadays with most of the websites), you only needed a username/email and a password to get into an account, and therefore get access to the data.

Two-Factor Authentication means you need two pieces to get access. A password  + a code sent by SMS, for instance. That means a hacker would have to know your password while being in the presence of your cell phone to log into your account. The concept is « something that you know » + « something that you have », Wikipedia says.

There are other ways to have Two-Factor Authentication: an App on your cell phone or a physical token-generator for example.

Lifehacker.com also says you really should turn-on this feature.

Client-Side Encryption

If you put large files in the cloud, chances are you use DropBox or an equivalent.

Usually, this kind of service, although very practical, transfer the data between your computer and their server unencrypted. Someone could capture the data in the process…

If you do it for unimportant files, that’s fine. But if you backup sensitive data, or things you would prefer to keep for yourself, you should have another strategy.

I strongly recommend to encrypt the data on your computer directly (that’s the Client-Side Encryption I was talking about) and then transfer it to the cloud.

You could use a small software called SecretSync, for example. Try it !
Or you could also use an encrypted Mac DMG and put it on DropBox directly.

Note: if you use USB keys, you could also use TrueCrypt which does kind-of the same thing.

Transfer Data On HTTPS – a Private & Wired Lan If Possible

On Wifi, your data may be captured by hackers. Same on 3G.

Try to use services that use HTTPS, and try to use a wired lan, at home, if possible.

Backup & Export

If you put your data in the cloud, you will depend on the provider’s service. If it’s not available, your data will not be available. If they get hacked, your data might be hacked or worse: lost.

You should select providers that have « export » features and make sure to always backup your data securely somewhere else.

Use Multiple Passwords

Use a tool like 1Password and make sure the passwords you use for each different service are distinct and extremely strong. Chances are no hacker is going to attempt an attack on your specific account, but if the provider’s database is compromised, you don’t want the hacker to get access to you accounts elsewhere.