Le cycle en cascade

Quand j’ai créé ce blog, j’ai écrit des articles sur différentes méthodes de gestion de projets (cycle en Vitératif, agile, …). Bizarrement, je n’ai jamais pris le temps d’en écrire un sur la méthode la plus simple, la gestion en cascade. Je pensais à l’époque que tout le monde connaissait cette manière de travailler, mais il se trouve que ce n’est pas le cas et que cela mérite qu’on s’y attarde un peu.

Principe

Le principe du cycle en cascade est assez naturel. L’organisation du travail est découpée en étapes qui se succèdent les unes aux autres.

Continuer la lecture de « Le cycle en cascade »

Utiliser GSuite pour envoyer des emails depuis un serveur

Imaginons la situation suivante :

  • Vous avez souscrit à l’offre GSuite de Google, et vous utilisez ainsi Gmail avec votre propre nom de domaine.
  • Vous avez un serveur Linux, depuis lequel vous souhaitez pouvoir envoyer des emails.

(Si vous n’êtes pas encore client GSuite, n’oubliez pas que j’ai proposé des coupons de réduction)

Il existe plusieurs raisons pour lesquelles vous avez tout intérêt à ce que les emails soient en fait envoyés par les serveurs de Google plutôt que par le votre : Dans la mesure où votre domaine est géré (au moins pour les emails) par Google, votre serveur n’apparaîtra pas comme étant légitime pour ce domaine, et donc les messages qu’il enverra risquent d’être classés en spam. De plus, vous pourrez retrouver la trace de tous les messages envoyés dans Gmail, ce qui peut être très pratique.

Côté serveur, j’ai l’habitude d’utiliser Exim. Historiquement, c’était le seul serveur SMTP qui pouvait intégrer complètement le filtre anti-spam SpamAssassin (pas en l’appelant comme un filtre externe, mais bien en l’intégrant à Exim, ce qui est bien plus efficace). J’ai gardé l’habitude de l’utiliser, car il est au moins aussi bon que Postfix ou Qmail.

Configuration GSuite

Pour commencer, nous allons créer un compte GSuite dédié à ces envois. Pour cela, il faut aller dans l’interface d’administration, puis dans Utilisateurs. Cliquez sur l’icône « Créer un utilisateur » en bas à droite. Enfin bon, si vous utilisez GSuite, vous devez savoir comment créer un utilisateur et comment lui assigner une ou plusieurs adresses email.

Continuer la lecture de « Utiliser GSuite pour envoyer des emails depuis un serveur »

Les valeurs en entreprise

Je préparais depuis quelque temps l’écriture d’un article sur la question des valeurs en entreprise. Je me décide après avoir lu récemment un article sur les valeurs des startups.

L’article parle principalement du syndrome qu’ont certaines startups, misant sur leur “coolitude” (avoir des beaux locaux, un baby-foot, …) au détriment des valeurs fondamentales qui permettent d’avoir un environnement de travail sain et efficace.

J’ai connu plusieurs entreprises dans ma carrière, qui véhiculaient des valeurs bien différentes les unes des autres. La plupart du temps, les valeurs d’une entreprise n’ont rien d’explicite : elles sont le résultat de la personnalité des fondateurs (ou des managers, si les fondateurs ont déjà quitté le bateau), de la manière dont ils gèrent l’entreprise et ses salariés, mais aussi de la personnalité de tous ceux qui travaillent dans l’entreprise.

Netflix a une approche très pragmatique des valeurs d’entreprise. Ces slides l’illustrent très bien :

 

 

Comme ils le font remarquer, il est assez facile de placarder de grandes valeurs générales. Ils donnent l’exemple d’Enron dont la première valeur officielle est l’intégrité… ce qui est amusant quand on sait que les malversations des dirigeants de l’entreprise ont mené à mettre la clé sous la porte (et les ont conduits derrière les barreaux).

Petite parenthèse : Plutôt que de s’intéresser à Enron, on pourrait parler de l’exemple de Google, plus proche de nous. L’entreprise a été condamnée à verser une amende de 500 millions de dollars à l’état américain en 2011. Officiellement, des petits malins se seraient amusés à contourner une limitation et à faire afficher dans AdWords des publicités pour des pharmacies canadiennes (cf. cet article). La chose paraît presque anodine. Sauf que la réalité semble un peu plus moche (lisez ce long article de Wired paru en 2013). Ajoutons qu’il semblerait que certains aspects de cette instruction sont cachés avec soin (d’après cet article anglais). Et je ne sais pas pour vous, mais quand je tape «google amende 500 millions drogue» dans Google, je n’ai aucun résultat qui parle de cette affaire… Ce qui est bien différent sur Yahoo!, Bing ou Qwant. Je rappelle qu’à l’époque la devise de Google était «Don’t be evil» et que leurs 10 principes fondamentaux incluent «Il est possible de gagner de l’argent sans vendre son âme au diable» (cf. Wikipédia). Ah c’est beau et important, d’avoir des valeurs…
Fin de la parenthèse

Ce point de vue est particulièrement intéressant. Parce qu’il est assez facile de proclamer une liste de valeurs, mais il est beaucoup plus difficile d’en tirer quelque chose de concret au quotidien.
Surtout qu’on tourne toujours autour des mêmes concepts d’Excellence, d’Esprit d’équipe, d’Intégrité, de Communication, d’Agilité, …
Pour ceux qui connaissent la série How I Met Your Mother, ces valeurs grandiloquentes et déconnectées de la réalité ont à peu près autant d’utilité que les posters motivationnels de Barney Stinson

En la matière, je préfère de loin le «Make mom proud» vu dans les locaux de Box.

Je vous suggère la lecture de l’article Your Company’s Culture is Who You Hire, Fire & Promote. Il présente l’idée que les employés d’une société s’intéressent à ce que font leurs patrons, pas à ce qu’ils disent. Ça paraît évident, dit comme ça, mais la réalité montre bien que le «faites ce que je dis et pas ce que je fais» est encore bien présent dans les entreprises. Ce sont donc les actes et le comportement général des managers qui façonnent les valeurs et l’image de l’entreprise.

Dans les notions abordées par cet article, il y a le «No Asshole Rule», qui pourrait être comparé à une tolérance zéro envers les comportements toxiques. La difficulté est évidemment de détecter de tels comportements, car une personne qui ne peut pas travailler en équipe (ou en tout cas avec l’équipe en place) n’aura pas un comportement problématique en permanence.
Il parle aussi du fait que bien des entreprises se trouvent des excuses pour ne pas se débarrasser des personnes qui ne sont pas en phase avec les valeurs. Bien souvent il s’agit des performances de ces personnes, et cela peut être encore plus criant lorsqu’elles centralisent des compétences uniques dans la structure.

Pour revenir aux slides de Netflix, le message important est donc (je me contente de traduire comme je peux la slide n°6) :

Les vraies valeurs d’une entreprise, par opposition aux valeurs qui font bien, sont celles affichées par ceux qui sont récompensés, promus ou qu’on laisse partir.

Oui, ce sont les personnes qui composent l’entreprise qui en font les valeurs au final. Récompenser un manager qui hurle sur son équipe, c’est envoyer un message clair sur les techniques de management autorisées. Ne pas virer un employé qui sabote son travail et celui des autres, parce que c’est un narcissique qui pense tout savoir mieux que les autres, cela ne motive pas le reste de l’équipe. Accompagner vers la sortie quelqu’un de bonne volonté qui n’a pour seul défaut que sa jeunesse et son inexpérience, c’est là encore une erreur basique.

Il faut aussi remarquer une chose : En Amérique du Nord, il est assez facile de virer quelqu’un rapidement si cette personne a un comportement qui n’est pas aligné avec les valeurs de l’entreprise (mais aussi si elle n’est pas performante). Je ne vais pas débattre sur les avantages sociaux que nous avons en France, mais je pense personnellement que c’est une bonne chose que l’on ne vive pas continuellement avec la crainte de se faire virer du jour au lendemain et/ou sans bonne raison. Il faut reconnaître que j’ai croisé des assholes (j’aime le terme en anglais, il exprime bien la chose) qui savaient très bien donner le change pendant leur période d’essai ; j’en ai même connu qui le sont devenu au fur et à mesure d’un long et lent processus s’étalant sur plusieurs années.

Toutefois, j’ai déjà vu des grilles d’évaluation des employés, réalisées par les services RH, qui servaient à définir lesquels étaient les éléments à récompenser, ceux à accompagner et ceux dont il fallait se séparer. Ces grilles sont toujours avec deux axes : la performance (les connaissances, les compétences) d’un côté, et le potentiel de l’autre (la capacité à apprendre, progresser, s’améliorer).
Dans l’article dont je vous parle, l’auteur propose une grille dont les axes sont la performance et l’alignement avec les valeurs de l’entreprise. C’est intéressant parce que ça mène à prendre en compte ce facteur, à voir les collaborateurs sous un angle différent.
Mais il n’en reste pas moins qu’il est très compliqué de se séparer de quelqu’un au motif que cette personne ne respecte pas les valeurs de l’entreprise. C’est n’est pas tout blanc ou tout noir ; et si le doute doit bénéficier à l’employé, il sera néfaste pour l’entreprise à terme.

Dans les comportements qui ne sont compatibles avec aucune valeur d’entreprise, il y a l’utilisation du rire pour déstabiliser les individus et les organisations. Ce type de comportement est difficile à détecter, car l’humour est quelque chose de positif ; c’est ce qui détend les gens, fait relâcher la pression, génère de la cohésion. Mais c’est à double tranchant : le rire peut devenir moquerie et devient alors une arme de manipulation.
À ce sujet, je vous suggère de lire Le rôle du rire dans les organisations. Très intéressant, il explique notamment le lien entre rire et pouvoir (extrait : «Le pouvoir de celui qui sait faire rire les autres tend donc continuellement à augmenter, parce qu’il draine vers lui la sympathie et l’admiration des autres, et parce que, confusément, il se fait craindre.»).
J’ai vu comment le rire pouvait apporter du pouvoir à celui qui le générait… et comment le fait d’avoir du pouvoir rend les gens drôles (car si générer le rire donne du pouvoir, rigoler est alors un moyen de s’inféoder et de reconnaître implicitement le tenant du pouvoir). Évidemment, dans une entreprise, le rire est d’autant plus utilisé comme arme de pouvoir quand il se fait aux dépens d’autres personnes de la même organisation ; la moquerie rabaisse de manière proportionnelle au nombre de personnes qui rient.
Pour surfer sur l’actualité, on peut voir le même rapport entre rire et pouvoir avec les agissements de Cyril Hanouna (extrait : «Moquer quelqu’un (…) c’est “pas pour rire”, c’est “pour dominer”»). Que penser alors des amuseurs en entreprise qui se réclament du rire d’Hanouna ?

Comme le dit Frédéric Mazzella (co-fondateur de Blablacar), les valeurs − quand elles sont exprimées et vécues réellement − sont importantes pour les entreprises, et pour plusieurs raisons.
Premièrement, elles différencient les entreprises les unes des autres. Vivre certaines valeurs peut être un argument réel pour faciliter le recrutement, soit parce qu’elles sont réellement positives (au contraire de ce qui est vécu dans les autres sociétés), soit parce qu’elles définissent l’ADN de l’entreprise et orientent donc les profils des gens qui pourront s’y épanouir (sans pour autant porter de jugement sur la qualité intrinsèque de ces valeurs).
Elles servent aussi à remettre l’humain au centre de l’activité de l’entreprise, redonnent de la valeur et du sens au travail. Elles définissent les règles et donnent une direction, ce qui permet à tous de comprendre ce qu’il peut apporter à son niveau, et ce qu’il peut attendre des autres.

Ce dernier point m’évoque un parallèle avec les concepts de gamification. Plus que de motiver les gens en leur faisant gagner des cadeaux virtuels, ces concepts sont appréciés de certaines personnes parce qu’ils offrent une lecture simple et rapide du travail qu’on attend d’eux (et donc aussi du comportement qu’on attend d’eux, si on élargit ça aux valeurs). Lorsqu’il y a une règle du jeu claire, il est facile de s’y conformer.

The Galion Project (un think tank qui réunit des entrepreneurs de la french-tech) a publié un document PDF téléchargeable sur le sujet des valeurs d’entreprise. Je vous invite à le télécharger, mais je vais essayer de résumer quelques points-clés.
Les valeurs ont un triple impact : Sur le recrutement (évoqué plus haut), le management et la prise de décision (donner de l’autonomie en montrant la direction voulue par l’entreprise, ce qui rejoint le message de Netflix).
Il y a plusieurs événements qui peuvent déclencher le besoin d’exprimer les valeurs : Quand la taille de l’entreprise dépasse 10 à 15 personnes, quand le travail est délocalisé ou le déploiement international.
L’appropriation des valeurs par les équipes est absolument nécessaire, et le meilleur moyen pour y arriver est de les créer de manière collaborative, en s’assurant qu’elles soient communes à tous, exprimées de manière formelle, et qu’elles correspondent à la réalité de ce qu’est l’entreprise au quotidien.
Les valeurs doivent être revues tous les 3 à 4 ans.

J’ajouterais personnellement que les valeurs, ainsi que les moyens déployés pour les mettre en œuvre dans l’entreprise, doivent être au cœur des préoccupations du top-management. Du PDG. Sinon ça ne fonctionne pas.

Coupons de réduction Google Gsuite

Comme je l’ai dit dans mon précédent billet, j’utilise Google Gsuite, aussi bien de manière personnelle que professionnelle. On connait tous Gmail, Google Drive, Google Docs, Google Calendar, … Ils sont disponible gratuitement avec certaines limitations (la principale étant l’espace disque de “seulement” 15 GO).

Pour 4€ par utilisateur et par mois (ou 40€ par utilisateur en payant à l’année), vous passez à 30 GO de stockage par utilisateur et vous pouvez utiliser vos propres noms de domaine. C’est ce qui m’a amené à l’utiliser même pour mes besoins perso.

Je vous en parle parce que j’ai 2 coupons de réduction à vous proposer. Ils vous offrent une réduction de 20% la première année, ce qui n’est pas négligeable pour une entreprise (et toujours bon à prendre pour un particulier).

1er coupon : L9K7C3C43LNMEJF

2ème coupon : 499VR4V47LUXXM3

(Edit : ces deux coupons ont été utilisés, j’en ai mis d’autres en commentaire)

Pour utiliser ces coupons, cliquez sur ce lien : https://goo.gl/QYnpKS
Petite précision : Cette promotion n’est valable qu’en France…

Pour être complètement transparent, chaque utilisation de coupon me fait gagner 12€, soit 3 mois gratuits pour mon usage personnel. Je ne cours pas après, c’est plus pour rendre service à ceux à qui ça pourrait être utile.

Travailler seul : quelques trucs pratiques

Je suis actuellement dans une phase de création de startup, et j’ai été amené à me poser quelques questions d’ordre pratique. Très concrètement, comment faire pour travailler dans des conditions propres à garantir une certaine efficacité, alors qu’on n’a pas beaucoup de budget ?

Ordinateur

La première chose à faire, c’est d’avoir un ordinateur suffisamment performant pour ne pas avoir l’impression de perdre du temps à cause de lui. Ça paraît évident, mais j’ai longtemps eu des ordinateurs “juste suffisants“ ; je suis maintenant bien content d’avoir une machine assez puissante pour que le sujet de me vienne même plus à l’esprit (plus d’info à ce sujet dans l’article que j’avais écrit).

Prévoyez un ordinateur portable que vous pourrez emporter facilement partout où vous aurez besoin de vous déplacer, tout en vous offrant un bon confort de travail. Pensez que la plupart du temps vous devrez vous contenter de l’écran, du clavier et du trackpad de votre ordinateur, sans possibilité de le brancher à un écran, clavier ou souris externe.

Prenez aussi un ordinateur avec un système d’exploitation que vous maîtrisez ; ne perdez pas de temps à vouloir apprendre un nouveau système, votre productivité serait catastrophique pendant trop longtemps.

J’utilise actuellement un Lenovo Yoga 2 Pro âgé de 2 ans (qui n’est plus au catalogue, remplacé par les Yoga 700 et Yoga 900) équipé d’un processeur Core i7, 8 GO de RAM, 512 GO de SSD, et un écran 13,3 pouces 3200×1800 tactile, pour 1,4 kg ; le tout sous Ubuntu Linux.

Téléphone portable

Là encore ça paraît évident, mais ça va mieux en le disant. Parce qu’il faut être réactif, il faut pouvoir être alerté lorsqu’on reçoit un message, même si on n’est pas devant son ordinateur. Et il faut pouvoir envoyer des emails, gérer son calendrier, surfer sur Internet, etc. sans avoir besoin d’ouvrir son ordinateur à chaque fois.

Donc il est important d’avoir un téléphone portable de bonne qualité. Cela veut dire avec un écran assez grand, non seulement pour pouvoir surfer dans de bonnes conditions, mais surtout pour pouvoir utiliser le clavier virtuel sans appuyer sur plusieurs touches à la fois. Cela veut dire aussi avec un processeur assez puissant et une mémoire assez large pour pouvoir passer d’une application à l’autre sans attendre pendant des heures à chaque fois.

Comme pour l’ordinateur portable, vous serez plus efficace avec un système d’exploitation mobile que vous connaissez. Ce n’est pas le moment de switcher entre iOS, Android, Windows Mobile, ou un autre système plus exotique que vous souhaiteriez tester…

J’utilise un Google Nexus 5X sous Android (évidemment). J’aimerais parfois bénéficier d’un écran plus grand, mais je pense que c’est un bon compromis avant de tomber dans la phablet.

Batterie externe

Ça n’a l’air de rien, mais l’autonomie des smartphones est globalement très mauvaise. Impossible de pouvoir compter dessus pendant une journée entière de travail (à surfer, envoyer et recevoir des messages, téléphoner, utiliser le GPS et écouter de la musique). La mauvaise surprise guette toujours à partir de la fin de l’après-midi.
Pour ma part, j’ai toujours deux petites batteries externes dans mon sac, au cas où. Et pensez bien à les recharger régulièrement…

Mais pour aller plus loin, j’ai aussi une batterie externe plus grosse, qui peut alimenter un ordinateur portable. C’est très pratique lorsqu’on doit se retrouver loin d’une prise électrique pendant un bon moment : dans le train ou l’avion, mais aussi lorsque vous allez travailler dans un bar qui ne propose pas de prise − ce qui m’est arrivé un bon nombre de fois l’air de rien…

J’utilise une Maxoak 50000 mAh achetée l’été dernier, et qui semble être toujours au top. Elle peut recharger téléphones, tablettes et ordinateurs portables (prises compatibles avec plusieurs fabricants de PC mais pas pour Apple) et pèse juste 1,3 kg.

Forfait mobile

Un accès à Internet est quelque chose de fondamental de nos jours. Difficile de travailler sans cela. Même quand on code en local, il faut vraiment être dans un avion ou dans un train pour supporter la sensation d’être coupé du monde. Même s’il devient de plus en plus facile de trouver un réseau wifi, je ne compte plus les fois où j’ai été sauvé par mon abonnement mobile 3G/4G, en utilisant mon téléphone comme passerelle.

Tant qu’à faire, un forfait qui permette de surfer en 3G partout dans le monde (ou en tout cas dans les pays où vous êtes susceptibles de vous rendre) est une bonne idée.

Je ne parle même pas du fait d’avoir un forfait illimité, nous sommes maintenant habitués en France à ne plus avoir besoin de faire attention à notre consommation téléphonique. Pour un usage professionnel, c’est absolument nécessaire.

J’utilise le forfait mobile de Free depuis bien longtemps, car c’était l’un des premiers à permettre l’usage en tant que modem pour un prix raisonnable, ainsi qu’à offrir l’illimité dans des pays étrangers où je vais régulièrement.

Si vous avez besoin de plusieurs numéros de lignes différents sur le même téléphone, vous pouvez essayer les applications OnOff ou Grasshopper.

Des outils numériques de base

La base, ce sont des emails, un calendrier, un carnet d’adresse et un stockage de fichiers en ligne. Il existe plusieurs solutions ; si vous voulez échapper aux très connues Google Gsuite ou Microsoft Office 365, vous pouvez essayer Zoho.

Pour l’organisation du travail avec d’autres personnes, la combo gratuite à la mode est actuellement Trello (kanban-board) + Slack (communication temps-réel).

Personnellement, j’utilise Google Gsuite qui s’intègre particulièrement bien avec Chrome et Android, et auquel j’étais déjà habitué à titre personnel. J’ai aussi utilisé Trello et Slack quand le besoin s’en faisait sentir, ils sont efficaces.

Un lieu pour travailler

Certaines personnes sont capables de travailler chez elles. Personnellement ce n’est pas trop mon cas. Je l’ai déjà fait et je continue à le faire régulièrement, mais je sais que ce n’est pas l’endroit où je suis le plus efficace.
Du coup, j’ai testé plusieurs choses : Travailler dans des cafés, dans des restaurants « worker-friendly », dans des espaces de coworking, dans des bibliothèques municipales, dans des bibliothèques universitaires, chez des co-homers, …

Avec le temps, j’ai pris l’habitude de pouvoir travailler à peu près n’importe où. Mais il n’empêche que les cafés et les restaurants sont souvent très bruyants. Les bibliothèques municipales ont des horaires peu compatibles (pas ouvertes tous les jours, ou juste par demi-journées). Les bibliothèques universitaires ont des règles très variables ; en France, elles sont souvent réservées aux étudiants et aux professeurs, ce qui en limite l’usage (alors que j’ai apprécié travailler à la bibliothèque de l’Université de Montréal, qui est ouverte à tous).

Les espaces de coworking ne sont pas tous sur le même modèle. Certains se rapprochent d’un bar/resto et peuvent alors être assez bruyants. Certains se payent à l’heure, d’autres ne proposent qu’un abonnement mensuel, d’autres font les deux.
Sans abonnement, le prix se situe souvent autour de 4 €/heure, ce qui fait un coût élevé si vous comptez y travailler 8 heures par jour, 5 jours par semaine. Les abonnements mensuels en placement libre (sans un bureau dédié) vont habituellement de 250 à 400 € HT/mois.

Sur Paris, il faut remarquer la création récente de La Permanence dans le 5ème arrondissement ; ouverte 24/7, avec des prix extrêmement compétitifs : 1 € à 1,5 € de l’heure, ou 80 € par mois.

Le co-homing consiste pour sa part à aller travailler chez des gens qui mettent leur habitation à disposition. Pour un prix défiant toute concurrence (de 1 à 11 € par jour), ces offres sont souvent proposées par des gens qui travaillent de chez eux et qui préfèrent être entourés d’autres personnes travaillant elles aussi.
Les avantages sont évidents (prix très bas, meilleure concentration qu’en travaillant seul chez soi, rencontres professionnelles), mais il y a aussi des inconvénients : Tout le monde n’aime pas travailler à quatre dans un petit studio ; les disponibilités sont variables suivant la personne chez qui on va travailler, et on peut se retrouver à devoir jongler entre plusieurs co-homers et des espaces de coworking.

Une salle de réunion

Parfois on a besoin de se réunir, que ce soit pour travailler avec un client, avec un fournisseur ou encore un investisseur. Difficile à faire dans un bar ou même dans un espace de coworking, mais heureusement il existe des salles faciles à trouver sur des sites comme BirdOffice. Les prix sont extrêmement variables, mais il est possible de trouver des salles à partir de 20 € de l’heure, moins de 100 € la demi-journée et moins de 200 € la journée.

Un abonnement musical

Bon, ça c’est un peu anecdotique. Mais si vous êtes comme moi et comme beaucoup de gens, vous travaillez souvent avec de la musique dans les oreilles. Il existe un certain nombre de services qui permettent d’accéder à des catalogues impressionnants (Spotify, Deezer, Google Play Music, Apple Music, …) pour un prix assez général de 9,99€/mois.

Pour votre confort et celui des gens qui travaillent autour de vous, pensez à acheter de bons écouteurs ou un bon casque, ce qui non seulement vous isolera bien des bruits extérieurs (ainsi vous aurez moins besoin de monter le volume, vos tympans vous remercieront) mais en plus limitera le risque de gêner les autres.
Chose indispensable de nos jours : Pensez bien à prendre des écouteurs ou un casque avec un micro, ça vous évitera de jongler lorsque vous aurez à prendre une communication audio ou vidéo.

Pour ma part, je me suis abonné à Deezer, après avoir testé Spotify (dont la version web consommait une quantité de ressources mémoire et processeur incompréhensible pour un tel service). J’y trouve la quasi-totalité des groupes que je veux écouter − même les groupes de death-metal mélodique suédois… Et l’application Android fonctionne très bien, donc tout va bien.
Au bureau j’utilisais avant un gros casque Sennheiser Momentum qui offrait un très bon confort d’écoute. En situation nomade, je me contente maintenant des écouteurs intra-auriculaires livrés avec le Nexus 5X.

Génération de tokens

Je suis en train de travailler sur une application qui nécessite l’utilisation de tokens. Certains doivent avoir une durée de vie assez courte, d’autres n’ont pas de péremption. Tout l’enjeu autour de ces tokens est de s’assurer qu’ils ne soient pas devinables facilement, ni qu’ils soient attaquable par force brute. Mais en même temps, certains tokens sont destinés à être copiés-collés, et il est alors préférable qu’ils puissent être saisis à la main par un être humain ; il faut donc qu’ils ne soient pas trop longs et qu’ils soient intelligibles.

À une époque, on aurait généré un hash MD5 à partir d’un nombre aléatoire, éventuellement en utilisant la date courante comme sel. En PHP ça donnait ça :

$token = md5(time() . mt_rand());

Simple et plutôt efficace. Sauf qu’il y a plusieurs soucis avec cette solution :

  • Le résultat est une chaîne de 32 caractères hexadécimaux, ce qui correspond à un message de 128 bits. C’est bien d’un point de vue cryptographique (plus le message est long, plus il est difficile à craquer par force brute), mais c’est un peu long à taper à la main.
  • MD5 est un algorithme aujourd’hui considéré comme insuffisamment sécurisé.

Pour le premier point, on peut changer la base du message ; en passant d’une base 16 (caractères hexadécimaux) à une base 36 (tous les caractères alphanumériques, aussi appelée base hexatridécimale, hexatrigésimale ou sexatrigésimale), on diminue la taille du token à 25 caractères.
Pour le second point, il est recommandé de passer à l’algorithme SHA256.

En PHP, cela donne ceci :

$token = base_convert(hash('sha256', time() . mt_rand()), 16, 36);

Cette fois-ci, on a un message de 256 bits, ce qui est encore mieux d’un point de vue cryptographique, généré par un algorithme bien plus robuste. Et grâce à la base 36, on a un message de 50 caractères au lieu de 64.
Il y a toutefois deux choses qui pourraient être améliorées. Le message est encore trop long à mon goût ; personne n’a envie de taper à la main un hash de 50 caractères, donc il faut trouver un moyen pour le raccourcir. Et il y a des caractères trop similaires (les lettres i et l, et le chiffre 1 ; le chiffre 0 et la lettre o) pour qu’un être humain normal puisse les recopier sans se poser la moindre question.

Continuer la lecture de « Génération de tokens »

Gestion des dates et heures dans les bases de données

Je vais vous parler d’une réflexion que j’ai en ce moment, causée par un développement sur un produit qui se veut à destination d’utilisateurs répartis autour du globe.

Jusqu’ici, je n’avais jamais vraiment été confronté à de véritables problèmes de gestion des dates dans mes applications. Je stockais les dates et heures en base de données dans des champs de type DATETIME (avec MySQL). Les dates enregistrées l’étaient en partant du principe qu’elles étaient valables en France, et donc au moment de lire les dates pour les afficher cela ne posait pas de soucis pour des utilisateurs situés en France là encore.

Notez bien que j’utilise MySQL, qui a la très mauvaise idée de stocker les dates sans la moindre information de timezone. Donc quand vous enregistrez la valeur ‘2011-04-12 11:04:12’, il l’enregistre telle quelle, sans plus d’information. À vous de vous débrouiller avec ça. Encore une fois, tant que vous êtes dans le même pays pour la lecture et l’écriture, cela ne pose aucun problème. Ça devient plus délicat quand ce n’est pas le cas.
Je vais m’expliquer en détail, mais sachez qu’avec d’autres moteurs de base de données, comme PostgreSQL par exemple (je ne connais pas les autres ; j’ai travaillé un peu avec Oracle il y a 10 ans, mais je n’ai pas de souvenir à ce niveau), il y a des champs permettant de gérer les timezones, ce qui évite bien des soucis la plupart du temps.

Le cas d’utilisation problématique apparaît lorsque vous devez lire une date et l’afficher pour un utilisateur situé dans un fuseau horaire différent de celui qui a été à l’origine de l’enregistrement.
Ce qui est normalement prévu, c’est de convertir la date depuis sa timezone de départ vers la timezone d’arrivée. Si on part du principe que la timezone utilisée par le serveur n’a pas été modifiée, on peut se baser dessus pour faire la conversion. Pour cela, on peut utiliser la fonction CONVERT_TZ(). Par exemple, pour lire une date enregistrée en France et l’afficher pour un utilisateur québécois, on peut écrire ceci :

SELECT CONVERT_TZ(date, @@session.time_zone, '-5:00') FROM MaTable;

Le résultat est que la date stockée dans le champ date est convertie, depuis la timezone définie par le système (ou éventuellement dans la configuration de MySQL), vers une date dont la timezone a 5 heures de retard sur le fuseau zéro.
Donc si la date en base est ‘2011-04-12 11:04:12’, que le système a une timezone par défaut configurée pour être celle de la France, qu’on est actuellement en hiver (donc la timezone serveur est ‘+01:00’), le résultat sera ‘2011-04-12 05:04:12’.

C’est parfait !

Oui mais non. En Europe, le passage à l’heure d’été se fait le dernier dimanche de mars, alors qu’en Amérique du Nord il se fait le deuxième dimanche de mars ; les passages à l’heure d’hiver se faisant respectivement le premier dimanche de novembre et le dernier dimanche d’octobre. Il y a donc 3 semaines dans l’année pendant lesquelles il n’y a plus que 5 heures de décalage horaire entre la France et le Québec, au lieu des 6 heures habituelles.

Imaginons que je convertisse la date ‘2010-03-21 15:27:10’, par la même manière que précédemment, que se passe-t-il ?

CONVERT_TZ('2010-03-21 15:27:10', @@session.time_zone, '-05:00')

Il faut comprendre que le premier paramètre est indépendant des deux suivants. Le deuxième paramètre prend la valeur de la timezone locale, définie par le système ; ce qui me donne ‘+01:00’ (décalage en France en hiver) ou ‘+02:00’ (décalage en France en été). Mais pour le troisième paramètre, j’ai donné une valeur fixe, qui va s’ajouter au paramètre précédent.
Donc, suivant que je fasse cette conversion en été ou en hiver (et donc suivant la valeur du second paramètre), le décalage horaire qui va être calculé sera de 6 ou de 7 heures.

Ce n’est pas bon du tout ! Il n’y a jamais 7 heures de décalage horaire entre la France et le Québec !

Il faudrait donc que je sache moduler le troisième paramètre, pour lui donner une valeur différente en fonction de la date en cours (‘-05:00’ en hiver et ‘-04:00’ en été). Ainsi, le décalage sera toujours bien de 6 heures…
Sauf que la date en question (21 mars) tombe pile sur l’un des créneaux pendant lesquels il n’y a plus que 5 heures de décalage horaire entre la France et le Québec ! Comment faire pour interpréter cela correctement, et obtenir la bonne valeur (‘2010-03-21 10:27:10’, pour info) ?

Après avoir pas mal cherché, il semblerait qu’il ne faille pas faire confiance à MySQL. Du tout. Il ne sait pas gérer les timezones et encore moins les passages heure d’été/heure d’hiver ; donc quand il enregistre une date, il la stocke telle quelle et il vous laissera vous débrouiller quand vous voudrez l’afficher.
Pour ne pas faire confiance à MySQL, le plus simple est de stocker toutes les dates telles qu’elles sont sur le temps UTC, donc sans décalage par rapport au temps universel. Au moment de la lecture, les dates doivent alors être récupérées de la même manière (temps UTC), puis converties au moment de l’affichage, en fonction des préférences locales de l’utilisateur.

Pour être plus clair, il suffit de faire la conversion au moment de l’écriture :

INSERT INTO MaTable SET date = CONVERT_TZ('2017-05-06 05:49:00', @@session.time_zone, '+00:00');

Au moment de la lecture, plus besoin de faire de conversion quand on lit les données en base. Par contre, il faudra convertir au moment de l’affichage, comme je l’ai dit plus haut.

Mais cette requête utilise la timezone locale du serveur, pour calculer le décalage horaire (ici ‘+01:00’ ou ‘+02:00’ si le serveur est en France, suivant qu’on soit en été ou en hiver au moment où la requête est exécutée). Si c’est un utilisateur qui fournit une date et heure, il va falloir récupérer sa timezone locale (‘-05:00’ ou ‘-04:00’ s’il est au Québec, suivant la période de l’année).

Par contre, si les seules dates que vous enregistrez sont les date et heure courantes, en utilisant la fonction NOW(), il peut être plus simple de configurer le serveur pour qu’il reste sur l’UTC.
Cela peut être fait en modifiant le fichier de configuration (‘/etc/mysql/my.cnf) :

default_time_zone = '+00:00'

Ou en modifiant le paramètre de la connexion en cours :

SET @@session.time_zone = '+00:00';

Quelques liens sur le sujet :

Normes utiles

Lorsqu’on développe ou simplement que l’on conçoit un système ou une application, il y a parfois des choses pour lesquelles il convient de faire des choix de manière éclairée. Ce qui est bien, c’est que des gens intelligents prennent du temps à normaliser tout un tas de concepts, et qu’il devient assez simple de bénéficier de cette intelligence.
Voici les quelques normes qui m’ont semblé importantes. Continuer la lecture de « Normes utiles »

La compassion au travail

Je suis récemment tombé sur l’émission Brain Games, et l’expérience que j’ai vue m’a semblé intéressante à partager. L’épisode tournait autour de la compassion.

L’expérience se déroulait en trois parties.

Première partie

La première partie avait pour but de définir si les êtres humains sont compatissants de nature.

Des candidats sont conviés un à un dans une pièce. Une fois assis, le candidat peut voir une autre personne assise dans la pièce d’à côté, à travers une glace sans tain. Un scientifique lui explique d’un ton neutre (c’est-à-dire froid, factuel, «scientifique» ; c’est important pour la suite) que la personne en face recevra une somme d’argent s’il peut manger un bol de soupe en entier. Le bol de soupe en question est posé devant le candidat, qui doit y ajouter une sauce ; il a devant lui trois flacons de sauce, étiquetés « doux », « moyen » et « mortel ».

Sur un échantillon assez large pour être représentatif, la grande majorité des candidats choisissent la sauce douce. Par défaut, ils font preuve de sympathie et d’empathie pour la personne qu’ils ont en face d’eux, et même si cette personne ne peut pas les voir à travers le miroir, ils n’ont pas de raison de lui faire un coup vache. Continuer la lecture de « La compassion au travail »