★ État et violence

Cette autonomie du politique se caractérise, comme l’a dit Max Weber, par le fait que la loi particulière de l’État moderne, c’est la violence. […] Dans le monde actuel, l’État n’est pris au sérieux que s’il est menaçant, et que s’il se défend dans une lutte à mort contre ce qui le met en question.

[…]

Le fait singulier de l’État, c’est que la violence est pour lui devenue monopole. « L’État moderne est un groupement de domination de caractère institutionnel qui a cherché à monopoliser dans les limites d’un territoire la violence… » ; L’État exclut la violence des autres groupes : il n’est plus convenable qu’un syndicat, qu’un parti, qu’un clan agisse par la violence ; cela est encore moins convenable de la part d’un individu : il ne serait plus qu’un criminel. Il y eut pendant longtemps hésitation à l’égard des groupes. Mais de nos jours nous voyons bien que précisément parce que des groupes prétendent utiliser encore ce moyen, la réaction de l’État se fait plus dure, plus rigoureuse. La police devient un élément décisif, et nécessairement incontrôlé. […] La violence est donc contrainte légitime lorsqu’elle est exercée par l’État légitime, mais l’État est légitime lorsqu’il se maintient aussi par la violence.

[…]

Le droit est observé par l’État lorsqu’il ne se passe rien, sans quoi sera proclamé l’état d’urgence, ou de tension, etc., pendant lequel sera créé un droit d’exception ! […] Autrement dit quand l’État est mis à même par les circonstances d’employer la force, il ne tient plus jamais compte du droit, et nous nous trouvons en présence de la violence nue, quitte, bien entendu, à légitimer par la suite l’usage de cette violence.

[…]

Oui, mais enfin, dit-on, il y a quand même la réaction du citoyen sur laquelle on doit pouvoir compter. C’est justement le devoir politique du citoyen de s’élever au nom de la morale… et du droit en face de cette attitude de l’État ; c’est lui qui doit être la limite vraie de la violence ! Nous pouvons ici seulement dire : Ce citoyen, c’est celui dont nous avons parlé au chapitre précédent, plongé dans l’actualité, déconcerté, incapable d’une réflexion politique véritable, etc. Qui plus est, ou bien ce citoyen ne s’intéressera pas aux problèmes politiques, auquel cas il ne sera pas limite envers l’État, mais simple objet, ou bien le citoyen entre dans le jeu politique, et il est alors de nos jours, bien plus qu’un citoyen, un partisan, un militant.

[…]

Dire que l’État ne devrait pas employer la violence, c’est simplement dire qu’il ne doit pas être l’État. C’est le même problème avec la guerre. […] Les lois de la guerre s’imposent en réalité quand il n’y a pas de guerre. Car la seule loi de la guerre, c’est de la gagner. Dans ces conditions, et sans entrer dans la discussion, nous pourrons donc dire que toute guerre est injuste, toute violence condamnable. Mais cela est l’affaire du moraliste, de l’individu, l’État ne peut absolument pas juger ainsi. Il se condamnerait simplement à disparaître, et serait remplacé par un autre État qui n’hésiterait pas. Rappelons la pensée de Marx sur la démocratie, qui n’est un régime acceptable que parce qu’elle n’ose pas employer ses moyens de violence, étant paralysée par ses scrupules. Et donc, dit Marx, c’est l’État le plus facile à renverser.

[…]

Car nous pouvons poser comme un principe décisif que plus la puissance grandit, plus les valeurs se dissolvent.

L’illusion politique, Jacques Ellul.

L’extrait est long et malgré sa publication en 1965 encore incroyablement pertinent. Il y a des auteurs dont je pressens l’importance dans mes réflexions et que j’essaye de ne pas approcher trop tôt malgré les multiples recommandations, Jacques Ellul en fait partie et je suis content de pouvoir l’aborder aujourd’hui grâce à Thomas.

Comment créer des communautés à une échelle qui permette de conserver les valeurs bien présentes ?

La quête d’une vie de non-violent.

Poursuite de réflexion quelques jours plus tard à la lecture d’un commentaire chez calimaq (cache) :

Le capitalisme n’aurait jamais pu éclore dans le cadre de la disparition de la société agraire. Celle-ci est un besoin pour ce système, mais c’est essentiellement les nouvelles technologies liées aux armements, notamment le canon, qui ont permis l’essor de ce système car il a fallu dans le cadre d’une armée de métier pourvoir aux besoins de cette armée ; besoins alimentaires et industriels. La disparition des communs s’est fait dans ce cadre-là.

L’initiateur du capitalisme ne serait donc pas « Le premier qui, ayant enclos un terrain » mais « Le premier qui, ayant voulu défendre un terrain » d’où la nécessaire violence intrinsèque de cette protection du capital par un enclos humain qu’il a fallu alimenter qui remonte à ses origines… mais ce sera l’objet d’un futur billet.

★ Domaines et expatriation

Unsurprisingly, the nameservers for top-level TLDs don’t actually change all that often. 98% of the requests root DNS servers receive are in error, most often because of broken and toy clients which don’t properly cache their results. This became such a problem that several root DNS operators had to spin up special servers just to return ‘go away’ to all the people asking for reverse DNS lookups on their local IP addresses.

The TLD nameservers are administered by different companies and governments all around the world (Verisign manages .com). When you purchase a .com domain, about $0.18 goes to the ICANN, and $7.85 goes to Verisign.

The History of the URL: Domain, Protocol, and Port (cache)

C’est une question que je m’étais déjà posée en allant au Japon et la solution temporaire avait été d’utiliser larlet.com pour publier mes pensées en anglais (réunifiées ici depuis). Dans le cas du Canada, la problématique est légèrement différente car le départ est a priori définitif, ou en tout cas pour une durée indéterminée. Or les .fr doivent être détenus par des résidents français croyais-je avant de tomber sur :

L’AFNIC ouvre aujourd’hui le .fr aux français résidents à l’étranger. Jusqu’à présent le titulaire d’un nom de domaine en .fr devait posséder une adresse en France. Le processus actuel d’enregistrement et de vérification des personnes physiques est conservé : Il n’y a pas de nouveaux tests techniques lors de la saisie, ceci afin d’alléger au maximum les vérifications géographiques des titulaires des noms de domaine ; La vérification d’éligibilité est réalisée par l’AFNIC auprès des bureaux d’enregistrement en charge du nom de domaine : le contact administratif a une obligation de présence sur le territoire ; cette vérification d’éligibilité est déclenchée sur plaintes extérieures et dans le cadre de vérifications aléatoires. Cette nouvelle mesure était déployé sur le banc de test depuis le 2 mars. Dorénavant sur le banc de production, le code pays à renseigner pour un titulaire personne physique n’est plus limité aux codes pays français (FR, RE, MQ, GP etc.). Si vous rencontrez des difficultés, n’hésitez pas à nous contacter à support@afnic.fr La charte de nommage a été modifiée afin d’intégrer cette nouvelle disposition : Charte de nommage pour les noms de domaine .fr (200 Ko)

Français résidents à l’étranger sur le banc de production

Qui date malheureusement de 2010 et dont la charte n’est plus liée… et qui nécessite toujours d’avoir un contact administratif résidant en France. Dans l’article 5.1 de la charte de l’AFNIC actuelle (qui ne semble pas posséder de version HTML !) on peut y lire :

88. Peuvent demander l’enregistrement ou le renouvellement d’un nom de domaine, dans chacun des domaines de premier niveau, toutes personnes physiques résidant et toutes personnes morales ayant leur siège ou établissement principal :

  • sur le territoire de l’un des états membres de l’union européenne ;
  • sur le territoire des pays suivants : Islande, Liechtenstein, Norvège, Suisse.

Charte de nommage de l’Association française de nommage internet en coopération (cache)

Du coup je me demande bien dans quelle mesure ma détention du domaine larlet.fr reste légale si je deviens résident permanent canadien. Peut-être que Stéphane saurait m’éclairer sur le sujet. Quoi qu’il en soit, les extensions génériques sont moins problématiques si vous avez la bougeotte :-).

Au passage, il est intéressant d’aller voir les conditions d’accès à un .quebec :

Tout le monde peut obtenir un .QUEBEC. Pour vous enregistrer, renouveler ou transférer un nom de domaine .QUEBEC, vous devez être une personne physique ou une personne morale ayant un lien avec la communauté du .QUEBEC. Ceci signifie que vous, tout comme votre registraire, devez être en mesure de démontrer un lien ou un intérêt raisonnable envers la communauté, au moment de l’enregistrement et tout au long de sa durée de vie utile. Le lien à la communauté peut être de nature linguistique, culturelle, touristique, commerciale ou de toute autre nature, dans la mesure où il est favorable et non préjudiciable à la collectivité québécoise. Contactez votre registraire pour plus d’informations ou consultez la liste des registraires accrédités.

Qui peut obtenir un .QUEBEC ?

Et Gandi — qui le propose à 31,90€ par an — affiche :

Les .QUEBEC sont ouverts à toute personne ayant un lien avec la communauté québécoise, ce lien peut être de nature linguistique, culturelle, touristique, commerciale ou de toute autre nature dans la mesure où il est favorable et non préjudiciable à la communauté québécoise.

Lors de l’enregistrement, vous devez indiquer la raison de votre enregistrement et l’utilisation projetée de votre nom de domaine, vous pouvez également expliquer votre lien avec la communauté québécoise.

Une infobulle sur Gandi.net

Je serais curieux de savoir qui est en mesure de juger de ce lien ou intérêt et avec quelle fréquence. Quoi qu’il en soit, l’appartenance à une nationalité me semble de plus en plus désuète et dommageable.

Me considérant comme un citoyen du monde, je n’envisage plus une extension qui ne reflète pas cette motivation.

L’envie de publier en anglais me reprenant de manière cyclique, je ré-envisage l’usage du .com mais il faudrait que je le transfère sur Gandi auparavant. Nomad URIs do change!

★ Code reviews croisées

« Le processus de rationalisation donne ses pouvoirs à l’expert, mais les résultats de la rationalisation les limitent. Sitôt qu’un domaine est sérieusement analysé et connu, sitôt que les premières intuitions et innovations ont été traduites en règle et programme, le pouvoir de l’expert tend à disparaître. En fait les experts n’ont de pouvoir social réel que sur le front du progrès, ce qui signifie que ce pouvoir est changeant et fragile… », et leur pouvoir serait de plus en plus fragile « dans la mesure où les méthodes et programmes auxquels science et technologie parviennent peuvent être utilisés et dirigés par des gens qui ne sont plus des experts… »

Jacques Ellul dans L’illusion politique citant Crozier dans Le phénomène bureaucratique

J’ai fait appel à Anthony pour faire une revue de code sur un bout de JavaScript que j’estimais de faible qualité. La semaine précédente, Stéphane nous demandait avec David d’effectuer une revue de code plus haut niveau sur le code de MultiBàO. Ces code reviews croisées permettent d’augmenter la qualité d’un code de façon impressionnante. La pratique de la revue de code dans le cadre d’une collaboration technique au sein d’une équipe peut mener à une certaine monotonie mais le simple fait de demander à quelqu’un d’externe permet de prendre du recul sur la pertinence de ce que l’on a développé, sur sa compréhension par un nouveau venu et sur la façon que l’on a de le tester. Je vois cela comme de la pollinisation technique, un moyen de faire monter en compétence et en curiosité ses pairs.

La revue de code en elle-même m’a permis d’identifier certains patterns dans ma façon de coder et d’être plus vigilant sur ces points à l’avenir. C’est une chose qui est déjà identifiable au sein d’une équipe mais qui tend à être moins remontée à la longue par habitude et manque d’attention. Autre problématique que l’on a en interne, on est trop peu nombreux pour pouvoir imposer plusieurs revues par pull-request ce qui endommage la qualité, idéalement je pense qu’il en faudrait deux ou trois. Enfin un œil nouveau permet de revoir la façon de documenter le pourquoi ce qui est difficile lorsque toute l’équipe sait de quoi est-ce qu’il est question.

Ces expériences me donnent envie d’aller plus loin dans ces échanges croisés. Est-ce qu’il faut vraiment essayer de passer à l’échelle ? Est-ce qu’il faut une charte (bienveillance, respect, etc) ? Est-ce qu’une monnaie virtuelle est nécessaire pour ce troc ? Est-ce qu’il faut un service pour centraliser l’index ? (DAO (cache) ? :-p) Est-ce que d’autres personnes seraient intéressées ? Est-ce que d’autres projets auraient le même besoin ? J’ai encore beaucoup de questions sur le sujet mais je sais que je peux déjà m’engager à titre personnel sur 2 à 3 revues Python/ES6 sur ces prochaines semaines si vous êtes motivés. Un bon moyen de tester la formule. La seule contrainte que je me mets c’est de pouvoir le faire sur du code en open-source sur cette première itération. Envoyez-moi vos PR/MR/autres ! :-)

Mais M. Crozier me semble assimiler à tort l’expert et le technicien. Sans doute l’expert est appelé, incidemment, pour donner son avis dans une situation d’incertitude. Mais le rôle du technicien, qui d’ailleurs peut aussi être appelé comme expert, ne se limite pas à cela. Or, ce n’est pas parce que la situation cesse d’être incertaine que l’influence du technicien diminue. Et nous sommes très loin d’une diffusion aisée et simple des techniques !

Ibid.

Anthony me signale en meta-review ce qu’avait fait Tarek à ce sujet (cache).

★ JavaScript, promesses et générateurs

Conceptually that’s a much cleaner and easier to understand process than what happens when promises are chained multiple times. If you’ve ever tried to understand just how a promise chain is wired up, or explain it to someone else, you’ll know it’s not so simple. I won’t belabor those details here, but I’ve previously explained it in more detail if you care to dig into it.

The sync-async pattern above wipes away any of that unnecessary complexity. It also conveniently hides the then(..) calling altogether, because truthfully, that part is a wart. The then(..) on a promise is an unfortunate but necessary component of the Promise API design that was settled on for JS.

Promises: All The Wrong Ways (cache)

À la lecture de cet article et utilisant fetch avec son polyfill sur les projets Etalab, j’ai décidé d’expérimenter ce qui pouvait être fait à base de générateurs pour éviter d’enchaîner les promesses. Ce billet technique sur JavaScript (encore !) n’est pas une introduction à l’objet Promise mais un usage possible, si vous n’avez jamais manipulé ça risque d’être un peu difficile à comprendre. Si vous êtes familier avec les générateurs Python ça peut aider :-).

Prenons un exemple classique où vous voulez récupérer des données depuis une API HTTP :

const url = 'http://httpbin.org/get'
fetch(url)

Jusqu’ici tout va bien mais dès la prochaine ligne ça se complique car il va falloir gérer les codes d’erreurs à la main :

function checkStatus (response) {
  if (response.status >= 200 && response.status < 300) {
    return response
  } else {
    const error = new Error(response.statusText)
    error.response = response
    throw error
  }
}

Ici on ne retourne la réponse que si elle est en 2XX et sinon on lève notre propre erreur. On peut maintenant enchaîner l’exécution de cette fonction au retour de notre fetch :

.then(checkStatus)

Puis récupérer la réponse sous forme de JSON :

.then((response) => response.json())

Et enfin faire quelque chose d’utile avec :

.then((jsonResponse) => {
  // Do something with the jsonResponse.
})

Si vous en restez là en cas d’erreur vous n’avez pas de moyen de savoir ce qu’il se passe, il ne faut jamais oublier d’ajouter un catch à vos chaînes de promesses :

.catch(console.error.bind(console))

Ici on fait le minimum en affichant un message dans la console. Investiguer des bugs liés à de l’asynchrone peut rapidement s’avérer être prise de tête si vous ne prenez pas ces précautions. Au même titre, ne mélangez jamais différentes implémentations des promises sous peine de devoir re-standardiser ensuite toutes vos promesses via Promise.resolve(promesse)

Donc au final notre promesse chaînée complète ressemble à :

fetch(url)
  .then(checkStatus)
  .then((response) => response.json())
  .then((jsonResponse) => {
    // Do something with the jsonResponse.
  })
  .catch(console.error.bind(console))

Ça reste lisible mais c’est loin d’être idéal, je vous laisse aller lire l’article en intro (cache) pour les différentes raisons.

En utilisant un générateur, je suis arrivé à ce résultat :

run(fetchJSON, url)
  .then((jsonResponse) => {
    // Do something with the jsonResponse.
  }, console.error.bind(console))

Qui est finalement la seule logique métier qui m’intéresse. Un seul .then() permettant de gérer le fulfilled/rejected directement en paramètre sans passer par le .catch(). Ensuite notre fetchJSON est un générateur * :

function * fetchJSON (url) {
  const rawResponse = yield fetch(url)
  const validResponse = yield checkStatus(rawResponse)
  return validResponse.json()
}

Proche de la syntaxe Python, on retrouve le mot-clé yield qui sert à récupérer les différents éléments de l’itérateur généré. Ici il y a exactement le même traitement que précédemment de manière un peu plus explicite à mon goût. Il reste à définir notre runner :

function run (generator, ...args) {
  const iterator = generator(...args)
  return Promise.resolve()
    .then(function handleNext (value) {
      const next = iterator.next(value)
      return (function handleResult (next) {
        if (next.done) {
          return next.value
        } else {
          return Promise.resolve(next.value)
            .then(
              handleNext,
              (error) => {
                return Promise.resolve(iterator.throw(error))
                  .then(handleResult)
              }
            )
        }
      })(next)
    })
}

Ici c’est la gestion des erreurs qui rend le script un peu velu mais en gros ça suit l’itérateur créé à partir du générateur de manière récursive en retournant des promesses (de promesses (de promesses (etc))). C’est là où se cache maintenant la complexité de vouloir faire de l’asynchrone séquentiel. L’avantage c’est que c’est localisé et réutilisable ensuite pour toutes vos séquences. En attendant async/await (cache). Ou pas (cache).

Le gros point noir dans tout ça, c’est lorsque vous tentez la conversion en ES5 avec Babel. Vous devez utiliser babel-polyfill qui rajoute immédiatement 300Kb à votre joli code… ce qui est envisageable côté serveur ou pour une application complète devient rédhibitoire pour une simple bibliothèque. Même si on ne va au final pas l’utiliser pour cette raison là, ça aura été une incursion intéressante dans l’univers asynchrone de JavaScript en attendant que les fonctionnalités d’ES6/ES7 soient davantage implémentées nativement.

Je suis un débutant en JS donc n’hésitez pas à me faire vos retours si j’ai raconté des bêtises !

★ Instantané Scopyleft

L’avenir des entreprises est d’être en réseau, de proposer des services en pair à pair, d’être des plateformes distribuées et autogérées. La nature change plus lentement que la culture, la gouvernance ou la technologie. Les entreprises connectées sont appelées à être agiles, “glocales”, basées sur l’humain… Les institutions de demain doivent devenir des systèmes vivants. Elles doivent se penser comme des systèmes d’exploitation avec lesquels les gens peuvent contribuer… Elles doivent coder leurs valeurs dans leur mode d’organisation même.

Reste à savoir comment. Dans cette présentation qui déroulait tous les mots clefs attendus… chacun pouvait surtout piocher ce qu’il voulait entendre, sans pour autant partager les mêmes valeurs.

A la croisée des économies collaboratives (cache)

J’ai beaucoup de questions relatives à scopyleft lors des évènements et rencontres. Il s’agit de quelques réponses valides à cet instant t et j’insiste sur l’instantanéité car cette coopérative est un cadre de travail vivant.

Ce qui suit n’est pas un guide mais un exemple de ce qui peut être fait. Je ne sais pas si c’est généralisable ni même reproductible, encore moins si c’est souhaitable.

Emploi

Il y a souvent confusion sur ce qu’est scopyleft pour moi et on me demande si je suis passé par la SCOP pour travailler avec Mozilla puis Etalab ou indépendamment en direct. Scopyleft est ma seule entreprise et je suis content de participer à ce projet. Ce n’est pas un regroupement d’indépendants ou une structure artificielle pour faire plus gros dans les appels d’offres.

C’est notre coopérative que l’on cultive depuis plus de trois ans, elle est le reflet de notre perception du travail.

Quotidien

Vincent est travailleur itinérant depuis plus de deux ans, Stéphane a franchi le pas cette année. Autant dire que l’on ne se croise pas tous les jours :-). On profite des conférences comme Mix-IT ou SudWeb dernièrement pour se retrouver physiquement et passer du temps ensemble. C’est l’occasion de se synchroniser sur les projets et de s’aligner sur certaines décisions. Le reste du temps on utilise d’autres moyens de communication (messagerie instantanée et visioconférence).

Notre quotidien n’est pas pour autant exclusivement solitaire sachant que l’on coopère pas mal avec des personnes extérieures à la SCOP : Etalab, UT7 ou Claude Aubry par exemple.

Argent

C’est souvent cette question qui fait vriller l’interlocuteur alors je vais essayer de détailler. Tout ce que l’on facture atterri dans un pot commun qui est là pour faire vivre la coopérative et ses membres. Cette entrée d’argent — parfois personnelle (voir paragraphe suivant) — est indépendante des salaires. Les salaires sont consentis par les trois employés à hauteur de leurs besoins ressentis. Nous avons longtemps été à salaires égaux mais ce n’est plus du tout le cas, les rémunérations peuvent évoluer dans le temps et les dividendes (lorsqu’il y en a) tentent d’équilibrer cela. Nous ne nous épuisons pas à capitaliser plus.

Une relation saine à l’argent ne peut se faire que dans la confiance et la bienveillance.

Collaboration

Je travaille actuellement avec Vincent sur certains projets, j’ai participé à des conférences avec Stéphane, je maintiens un autre projet en solo et on expérimente chacun dans nos domaines respectifs pas forcément rémunérateurs (accompagnement, enseignement, bien-être, etc).

On n’essaye plus de s’imposer la collaboration mais on l’encourage en fonction de la motivation et de l’énergie à ce moment là. C’est assez éloigné de ce que l’on a cherché à faire par le passé en travaillant tous ensemble régulièrement.

Horaires

On ne comptabilise pas les heures de travail ou les vacances. Ça peut sembler être une entorse violente au code du travail mais on préfère s’en référer à notre bien-être ressenti. Si l’un de nous a besoin de prendre une semaine ou un mois off il les prend. Si l’un de nous a besoin de passer une année à mi-temps pour découvrir son fils il le fait. Si l’un de nous souhaite explorer un pays sans être sûr d’y trouver une connexion on fait avec.

Tout cela indépendamment de la rémunération que l’on estime être un besoin non indexé sur la force de travail.

Inspiration

A les entendre témoigner, on voit bien que ces formes organisationnelles se cherchent en avançant, qu’elles expérimentent, testent, essayent. C’est certainement lié au fait que ces “nouvelles méthodes” sont peu documentées, nécessitent d’être adaptées et qu’elles ne sont pas si simples à mettre en place et à faire perdurer face à des organisations qui évoluent sans cesse, notamment quand elles sont petites et qu’elles veulent demeurer agiles.

Travailler de manière collaborative, oui ! Mais comment s’organiser ? (cache)

On me demande régulièrement aussi si ça ne se rapproche pas de X (X pouvant être l’Holacratie, le salaire à vie ou autre). Peut-être. Les sources d’inspiration sont nombreuses mais l’on n’essaye pas d’appliquer une méthode à la lettre. Au même titre que l’on n’applique pas Scrum mais on expérimente dans une culture agile. On itère et on recrée le cadre s’il le faut. La différence permet de chercher ses propres solutions.

Voilà certaines raisons pour lesquelles j’ai du mal à envisager de quitter scopyleft même si c’est pour m’intégrer dans une nouvelle culture. J’ai l’impression d’être allé beaucoup trop loin dans ma relation au travail pour pouvoir revenir en arrière sans faire une dépression ! C’est aussi pour cela que je me sens très loin de certaines discussions et relations liées au travail que je ne peux (mal)heureusement plus vivre. Il n’y a plus de bouc-émissaires autres que nos propres contradictions, le travail devenant une matière à part entière que nous explorons ensemble.

Il faudra que je vous parle d’éducation un de ces jours, j’ai le sentiment d’être dans le même type de dimension parallèle…

★ SudWeb 2016

Beaucoup d’inventions utiles n’ont pas été le fruit d’un problème. Penser « positif », c’est peut-être juste ça : laisser tomber les problèmes et rêver un peu…

4 changements qui émergent dans les projets (cache)

Les éditions de cette conférence se suivent mais ne se ressemblent pas si ce n’est dans leur recherche de singularité. Chaque intervention donne envie d’aller interagir avec l’orateur pour échanger plus que d’ouvrir son laptop. Derrière ces sujets non-techniques se cachent des réflexions plus profondes qui n’interrogent plus le comment mais le pourquoi et de plus en plus le pourquoi pas ?

Les sujets des élaboratoires en format Forum Ouvert sont assez révélateurs d’une communauté qui devient plus mature (c’est la façon polie de dire vieille :-p).

  • J’ai eu le plaisir de m’initier au handlettering avec Hellgy pour éventuellement s’amuser en duo.
  • J’ai initié une discussion sur l’enseignement et le web qui a permis de vérifier la diversité des expériences et des méthodes employées. Beaucoup de discussions ont finalement été relatives au ratio théorie/pratique et à la pertinence du contenu transmis. Bien que les questions aient été posées, on n’a pas tenté de définir ce qu’était le Web ni si une culture pouvait être enseignée. De quoi alimenter ma réflexion :-).
  • J’ai participé à une discussion sur Progresser dans son métier qui soulevait des pratiques intéressantes. Je retiens qu’un domaine en perpétuelle évolution demande de progresser même lorsqu’on souhaite simplement rester à niveau. Personne dans la salle n’a mentionné les formations traditionnelles pour progresser, c’était assez surprenant.
  • Enfin, j’ai assisté au retour d’expérience de Vincent sur son travail itinérant ou néomadisme. Il faudrait que je fasse un billet sur le fonctionnement actuel de scopyleft car j’ai eu beaucoup de questions à ce sujet au cours des deux jours. Instantané publié depuis.

Je vais terminer sur le témoignage de Roxanne qui se pose des questions sur son entrée dans le monde professionnel et sur les relations entre son futur emploi rémunéré et ses travaux bénévoles actuels. Cette articulation est tout à fait possible et rejoint pas mal de réflexions que nous avons eues au cours de la création et de l’évolution de scopyleft. Par contre, il s’agit clairement de la face nord car cela nécessite un alignement des bonnes énergies des bonnes personnes au bon moment. Ou pas, il faut expérimenter pour le vérifier ;-).

★ Enseigner le Web

Teaching will make you more humble, because it will painfully show you how limited your knowledge is. Teaching is the best way to learn. Only by testing your knowledge against others are you going to learn properly. This will also make you more respectful regarding other developers and other technologies; every language, no matter how humble or arcane, has its place within the Tao of Programming (cache), and only through teaching will you be able to feel it.

Being A Developer After 40 (cache)

Contexte

Le titre est clairement pompeux, plus qu’enseigner le Web il s’agit d’un retour d’expérience sur ces deux dernières années où j’ai tenté de transmettre les concepts du Web et mes expériences de développeur à une cinquantaine d’étudiants. Ces apprenants étaient alors en troisième année de licence dans le domaine du Web mais n’avaient pour la plupart jamais fait de programmation. Ayant eu beaucoup de confiance et de liberté de la part de la responsable de la licence, j’ai pu essayer des choses.

J’ai eu cette proposition un peu par hasard et par bouche à oreille suite au désistement d’un intervenant, un premier coup de fil mi-septembre et un premier cours mi-octobre. Cela m’a laissé peu de temps pour préparer quoi que ce soit ce qui s’est révélé être intéressant pour la suite. Il s’agissait initialement de faire une initiation à HTML/CSS et cela s’est étendu à JavaScript et PHP au cours de l’année. La seconde année, j’ai réussi à écarter PHP pour me focaliser sur le web mobile. Au final, cela a représenté 150 heures d’enseignement.

Détail qui n’en est pas un, les promotions étaient composées à 80% d’étudiantes. J’avais besoin de vérifier à titre personnel à quel moment cette tendance s’inversait dans les équipes de développement web et si les études pouvaient être en cause (réponse : non, il faut donc remettre en question ce qu’il se passe ensuite mais ce n’est pas l’objet de cet article).

Attentes

J’avais une contrainte d’espace et de temps avec les créneaux horaires fixes et les salles de classe peu adaptées à l’accompagnement d’une acquisition de savoirs. J’avais aussi une contrainte au niveau des thématiques du contenu mais celle-ci était surtout guidée par mon expérience professionnelle. La responsable était consciente du décalage actuel entre ce qui était enseigné et la réalité du marché ce qui me conférait une grande liberté autant sur le fond que sur la forme, ses attentes portaient sur la pertinence des savoirs transmis.

De mon côté, je voulais voir ce que j’étais capable de partager en ayant été complètement autodidacte dans le domaine. Je voulais pouvoir essayer des choses et l’introduction de l’agilité dans des cours me motivait. Je trouvais important de documenter ces expériences afin de partager mes apprentissages et de constituer une mémoire de mon ressenti à ce moment là.

En ce qui concerne les étudiants, ils avaient vraiment du mal en début d’année à formuler leurs attentes qui se focalisaient beaucoup sur des technologies et/ou des connaissances superficielles. C’est assez déroutant au début et cela m’a fait réaliser à quel point l’apprentissage est guidé par le besoin, le rôle de l’enseignant devenant en quelque sorte de créer artificiellement ce besoin.

Je retiens toutefois qu’ils souhaitaient globalement devenir plus autonomes et améliorer la qualité de leurs productions ce qui est encourageant !

Valeurs

  • rendre possible l’Autonomie
  • encourager la Bienveillance
  • éveiller la Curiosité.

ABC de l’apprentissage

Je n’ai réussi à publier ces valeurs qu’à la fin de la première année et elles m’ont guidé lors de l’année scolaire suivante. Elles sont difficiles à mettre en pratique car elles sont assez éloignées de ce qui est mis en valeur lors d’un cursus scolaire.

Si le motto de Maria Montessori est « aide-moi à faire seul », j’ai essayé d’aller plus loin vu leur maturité et leur niveau de connaissances en allant vers le : Accompagne-moi pour faire ensemble.

Cela signifie changer de paradigme en passant de la compétition à la collaboration, ce qui pose notamment certains problèmes en matière d’évaluation.

Co-construction

A lot of what beginning programmers need isn’t just good learning materials, but confirmation that not knowing is normal.

@hcatlin sur Twitter

Il était important pour moi que les étudiants soient acteurs dans l’acquisition de leurs savoirs. Autant dans l’expérimentation que dans les choix de la matière qu’ils souhaitaient travailler. J’essayais de lister avec eux les différents sujets que nous étions capables d’aborder et nous établissions ensuite un ordre de priorité dans ces technologies/concepts.

C’était loin d’être évident car ils (on ?) avaient du mal à évaluer leur niveau collectif et l’inertie du groupe. Mais ce n’est pas grave, on s’autorisait à se planter comme lorsqu’on a voulu aborder Angular avant de comprendre JavaScript. D’autres fois, il était difficile pour moi de leur faire prendre conscience des bienfaits d’une bonne pratique car sa pertinence requerrait du temps de vie et de complexité. Tant pis, ils s’en rendront peut-être compte plus tard.

J’ai trouvé très intéressant de creuser avec eux le pourquoi de leurs choix. J’essayais dans la mesure du possible d’adopter une position de pair plus qu’une relation hiérarchique prof/élève. Je leur ai toujours dit que la somme de leurs savoirs et expériences dépassaient la mienne (cache) de plusieurs ordres de grandeur. Sans compter leur puissance de recherche et de réflexion. J’ai réussi à leur démontrer cela plusieurs fois.

Itérations

Je suis souvent intervenu par demi-journées que je découpais en six moments :

  • Un quart d’heure pour se remémorer ce que l’on avait fait la fois précédente et échanger sur nos veilles respectives ;
  • quatre sessions de 45 minutes sur lesquelles je reviendrai ensuite ;
  • un quart d’heure pour prendre du feedback sur ce cours et décider ensemble de ce que l’on va faire et améliorer la fois suivante.

Les sessions étaient effectuées en groupe ou seul, avec plus ou moins de contraintes artificielles de ma part. Elles consistaient généralement en un concept technique à travailler avant une courte période théorique/magistrale pour mettre tout le monde au même niveau. Cette théorie pouvant être effectuée par un étudiant.

L’avantage de procéder par itérations est de pouvoir expérimenter de très nombreuses choses en un temps réduit. La prise de risque devient bien moindre lorsqu’on sait qu’elle sera limitée dans le temps et collectivement améliorée lors de l’itération suivante.

Un autre avantage est d’introduire de la répétition favorisant l’apprentissage. L’introduction de légères variations sur un même exercice permet de voir la classe progresser par paliers au cours d’une même session.

Agilité

  • Prescriptive → Iterative
  • Content → Culture
  • Evaluation → Visible Feedback & Reflection
  • Control → Trust
  • Competition → Collaboration

Agile In Education (cache)

Tout ce travail itératif prend bien sûr ses sources dans les pratiques agiles et empreigne peut-être les élèves d’une autre culture. Une culture où l’échec est permis et où l’on essaye de travailler ensemble pour que l’intelligence collective du groupe fasse progresser chacun individuellement. Une culture où la réaction est plus importante que la défense.

C’est un vrai défi car les apprenants manquent cruellement d’outils pour collaborer. J’aurais aimé prendre le temps de les initier à Kanban ou Git(hub) mais notre capacité à assimiler de nouvelles choses est limitée et je ne voulais pas introduire trop de nouvelles notions qui ne pouvaient qu’être survolées.

Aussi les pratiques agiles ont davantage été des expérimentations agiles. Il y avait l’inspiration bien sûr mais après cela tout était à découvrir ensemble car ces approches sont peu employées/documentées par ailleurs.

Notation

Je suis contre les notations/classements mais il s’agit d’une contrainte forte dans l’univers scolaire. Aussi j’ai essayé de mettre les étudiants dans des situations qui pourraient leur servir rapidement à travers des candidatures spontanées, des critiques de sites ou des compte-rendus d’expérimentations techniques. Les résultats étaient parfois assez surprenants et les discussions suivant ces exercices toujours passionnées.

Ils avaient globalement du mal à faire le lien entre ce qu’ils avaient appris/expérimenté et la valeur qu’ils pouvaient apporter à une entreprise, se contentant de faire des lettres/CV génériques pour arroser le plus de boîtes possibles (ils font un stage de fin d’année). J’ai essayé de leur montrer qu’une autre voie est possible en ciblant quelques entreprises dans lesquelles ils voulaient vraiment travailler et en personnalisant leur approche : audit de performance, problèmes de validité, d’ergonomie, d’accès mobile, etc.

Ici j’avais beaucoup de mal à être pertinent car je n’ai jamais eu à faire cette démarche de recherche d’emploi/stage donc il était difficile de les accompagner. J’ai plutôt essayé de me mettre dans la peau de quelqu’un d’expérimenté qui recevrait une telle candidature par exemple.

Holisme

Ce qui m’a cruellement manqué au cours de ces années c’est l’impression de faire partie d’un tout au sein d’une formation cohérente qui permet à chaque étudiant de s’accomplir dans sa singularité. Mettre en pratique l’agilité d’un côté et voir qu’à la session suivante ils ont de la gestion de projet des années 90 c’est dur. Expliquer les failles de sécurité et regarder ce qu’ils codent en PHP par ailleurs c’est flippant. Si la communication est difficile entre élèves, elle est catastrophique entre enseignants.

Cela soulève tout un tas de problématiques sur la mise à jour des compétences, le financement de ces moments d’échanges, l’alignement dans les valeurs et les motivations, etc etc. Il y aurait beaucoup de choses à expérimenter dans ce domaine également. De la co-construction d’un programme cohérent à l’accompagnement d’étudiants dans leurs projets professionnels.

Peut-être aussi que cela demande de pouvoir suivre les étudiants pendant plusieurs années pour mieux les connaître et adapter les interventions en fonctions de leurs motivations.

Confiance

Years later, when I did well in programming classes in high school and college, a part of me was dismissive of those results. Because of that initial experience programming, I was subconsciously held back by the fear of finding another brick wall concept that I wouldn’t be able to grasp. It’s taken a decade to reverse this thinking and stop having a fixed mindset about my engineering abilities, but it’s been worth the effort. Now, because I believe that I can grow as an engineer, I’m motivated to invest in myself. The intrinsic belief that I can get better keeps me confidently striving in my career for more responsibility and new challenges.

On Confidence (cache)

Établir un climat de confiance au sein d’une promotion est difficile. Les groupes sociaux se forment rapidement et ajouter la contrainte de les mélanger à celle de collaborer demande parfois un effort trop important. C’est compréhensible et c’est le genre de moments où je ne sais pas s’il faut forcer la diversité qu’ils retrouveront peut-être dans leur futur emploi (ce n’est pas mon cas donc c’est difficile à imposer…).

A team is not a group of people that work together. A team is a group of people that trust each other.

Simon Sinek sur Twitter

En revanche, j’ai toujours essayé d’encourager les réflexions et les échanges de la part de tous les apprenants. Parfois une simple remarque fait l’objet de l’itération suivante pour confirmer ou réfuter une hypothèse en groupe. Je ne voulais pas forcément qu’ils aient confiance les uns envers les autres mais qu’ils aient de l’attention pour les questionnement de leurs pairs.

J’ai aussi été surpris du manque de confiance en eux qu’ils pouvaient avoir vis-à-vis de la programmation, ce qui m’a fait beaucoup réfléchir aux abstractions possibles. Je suis encore en plein doute sur le sujet.

Prise de recul

Le fait de donner des cours m’a permis de réaliser à quel point nos outils sont complexes et élitistes. L’expression japonaise 「灯台下暗し」 (tōdai moto kurashi) prendre du recul pour avoir de la lumière (littéralement : il fait sombre sous la lanterne) me semble appropriée, ce sont les étudiants qui sont arrivés avec leurs lanternes et ont commencé à me faire sérieusement douter. Je leurs suis extrêmement reconnaissant de m’avoir ouvert les yeux et d’avoir pu creuser ensemble quelques approches possibles pour simplifier l’apprentissage des briques du Web.

Simplicité par défaut

Les cours ont clairement été moteurs dans ma réflexion sur le minimalisme et l’esthétique puis la simplicité. Le fait de transmettre permet de se remettre en question sur l’intérêt de perpétuer certains concepts ou pratiques. J’ai dû reprendre certaines lignes de code caractère par caractère pour vérifier leur bien-fondé.

Ce qui m’a amené à une approche dirigée par le validateur pour ce qui est du HTML par exemple. À partir de quel moment une page s’affiche dans un navigateur ? À partir de quel moment devient-elle valide ? Est-ce qu’il y a vraiment besoin de plus ? Etc.

J’ai aussi pu reprendre JavaScript depuis zéro, questionner les abstractions et bien creuser ES6/2015/Next car je souhaitais leur enseigner le Web d’aujourd’hui et demain sans forcément leur mettre le fardeau de la rétro-compatibilité tout de suite.

Contraintes spatiales

La salle de formation est une cellule eucaryote : un noyau contenant l’ADN-livres, des ribosomes-élèves transformant l’information-ADN en connaissances-créations-protéines.

D’une sélection artificielle à une sélection naturelle dans un écosystème complexe (cache)

Là où Christian den Hartigh organise sa classe comme une cellule eucaryote, il faut bien voir que les élèves de l’IUT sont par défaut dans une configuration qui leur fait regarder un écran qui est adossé au mur. Autant dire qu’ils me tournent tous le dos ! On fait mieux en matière d’échanges (et de position de travail) à la fois avec moi mais aussi et surtout avec les collègues.

Pour inverser la tendance et essayer de recréer un centre d’intérêt j’essayais au moins de prendre un moment pour qu’ils viennent présenter leur travail au groupe de manière répétée et interactive. J’ai aussi ré-agencé les postes de travail lorsque c’était possible, les salles ayant des machines qui sont généralement boudées (à juste titre vu les limitations) par les étudiants qui préfèrent amener leur propre ordinateur.

Digital na(t)ives

Le niveau de votre classe est celui de la personne la plus faible techniquement. [Paraphrase]

Giving better code reviews (cache)

Les articles (cache) ne manquent pas (cache) pour rendre compte d’une génération qui utilise le Web comme de l’électroménager. J’ai malheureusement pu le vérifier également lors de mes interventions. Savoir enregistrer un fichier avec une autre extension que celle proposée par défaut ou un autre encoding n’est pas évident du tout. Jongler avec des navigateurs et des résolutions non plus. Taper certains caractères correctement peut même révéler quelques surprises…

La difficulté vient du grand écart de niveau qu’il y a entre les étudiants qui ont déjà des difficultés à savoir se servir d’un ordinateur et ceux qui font déjà des sites en auto-entrepreneurs !

Attention toutefois, ceux qui arrivent avec un certain bagage technique vont potentiellement mettre plus de temps à oublier certaines mauvaises habitudes. Ou à essayer de comprendre certaines de leurs lignes de code qu’ils copient-collent depuis un moment et qui marchent. Le désapprentissage est parfois douloureux.

Capitalisation

Teams are immutable. Every time someone leaves, or joins, you have a new team, not a changed team.

Richard Adalton sur Twitter

Pour une classe, c’est pareil, sauf qu’il y a 25 personnes qui partent. Autant dire que la capitalisation est bien maigre d’une année sur l’autre et ça a probablement été l’une de mes erreurs de partir un peu trop confiant la seconde année. La confiance acquise aurait davantage dû me motiver à expérimenter plein de nouvelles choses plutôt que de reproduire certains patterns qui avaient bien fonctionné la première fois.

Là où ça devient intéressant, c’est sur les différentes approches que j’ai pu tester.

Mémoire

Misleading headlines notwithstanding, no one really has the slightest idea how the brain changes after we have learned to sing a song or recite a poem. But neither the song nor the poem has been ‘stored’ in it. The brain has simply changed in an orderly way that now allows us to sing the song or recite the poem under certain conditions. When called on to perform, neither the song nor the poem is in any sense ‘retrieved’ from anywhere in the brain, any more than my finger movements are ‘retrieved’ when I tap my finger on my desk. We simply sing or recite – no retrieval necessary.

Your brain does not process information and it is not a computer (cache)

La façon de retenir des informations est encore très difficile à comprendre (cache). On dispose de quelques pistes via la discussion (cache) ou le jeux (cache) mais elles restent ténues. Ce constat est génial, il y a tout à tester !

Notre profession est particulière car on a le savoir technique à portée de clavier. Cela ne signifie pas que l’on sache l’exploiter pour autant ni en connaître toutes les applications pratiques mais c’est un bon début. Une fois que l’on considère que la technique est externalisée sur le web, il nous reste à assimiler les concepts pour assembler ces notions. Je pense que les mécanismes de mémorisation d’un développeur web sont très différents d’autres professions car il a affaire toute ses journées à des liens. Je me souviens bien souvent d’une chose que je sais pouvoir retrouver et cette simple croyance me suffit pour considérer cela comme une mémorisation. Il faudrait que je développe dans un futur billet.

Jeux

On a joué à Flexbox Froggy, Starwars ou Flexbox Defense qui ont été assez appréciés des étudiants. J’ai découvert plus tard Python Tutor qui n’est pas limité au langage Python. Une visualisation très intéressante de ce qu’il se produit au niveau de l’affectation des variables. Un bon candidat pour une prochaine expérience.

Pour des jeux que l’on qualifie de plus sérieux, j’ai tenté des Remember the future et je terminais régulièrement les cours — voir les itérations — par des rétrospectives pour identifier les points d’amélioration.

Après pour moi le Web est un jouet convivial par excellence. Mais ce n’est pas forcément partagé :-).

Disposition

Toute ma démarche est de les faire passer de la chaise au tableau, de l’écoute passive au partage actif. Pour favoriser cela, il faut briser la barrière entre la position assise de l’apprenant et celle debout du sachant. J’ai tenté de les faire participer en inversant souvent les rôles : si tu prends ma place, je prends la tienne, physiquement. J’ai tenté de changer la disposition de la salle. J’ai fait des rétrospectives en étant tous debout, souvent en cercle.

La simple disposition change souvent la façon de communiquer.

Certains auront davantage d’aisance lorsque l’on passe des questions-réponses à la discussion libre. D’autres vont avoir besoin de plus de temps pour préparer une intervention construite. La prise de parole en public devient moins stressante lorsqu’on est en situation de confiance/bienveillance et la disposition des individus est importante pour faciliter cela.

Communication

J’avais testé jadis des accompagnements sur Blog, Twitter, Facebook, mais je n’avais jamais été pleinement satisfait. J’ai conservé Facebook avec les élèves pour rester en relation avec les anciens, ceux qui le souhaitent, et les accompagner pour des aides ponctuelles, ou garder un simple contact.

Etendre la salle de classe hors des murs : Slack pour l’éducation et l’instruction (cache)

Je regrette de ne pas avoir pris le temps d’introduire Slack ou équivalent comme canal de discussion car même en annonçant que je réponds aux mails en dehors des heures de cours j’ai eu très peu de questions.

J’avais par exemple introduit un temps de veille qui était très apprécié la première année et qui n’a pas suscité la même appétence la seconde. Peut-être qu’un espace en ligne pour partager des liens eut été mieux accueilli plutôt que d’abandoner purement et simplement.

Retours

Les retours sont limités aux temps de cours et je n’ai malheureusement pas eu de mails une fois l’année terminée. C’est frustrant mais Christian m’expliquait avoir fait le deuil d’une quelconque impact une fois l’année écoulée. Il faut savoir se focaliser sur le présent et sur la relation qui se vit pendant les cours.

Il se trouve que j’ai du mal à lâcher prise là-dessus car j’ai besoin de ce feedback pour pouvoir m’adapter. Je n’ai jamais travaillé en agence et mes 3 mois en SSII sont bien éloignés aussi les conseils que j’ai pu leur donner sont potentiellement à côté de la plaque. Je ne veux surtout pas leur mettre mes propres œillères.

J’aurais aussi aimé pouvoir suivre des étudiants sur plusieurs années pour répondre individuellement à leurs souhaits et construire quelque chose de cohérent ensemble.

Durée

Être en position de transmettre n’est pas une carrière mais un bref état transitoire.

Transmission et durée

Je suis tiraillé sur cette partie, car d’un côté la classe change totalement d’une année sur l’autre et l’on peut apprendre de nouvelles choses à chaque cours. Mais de l’autre j’ai besoin d’avoir davantage d’inspirations d’une année sur l’autre pour avoir le sentiment de faire un accompagnement qui soit utile. Cela me fait penser au temps nécessaire entre deux conférences, je ne pourrais jamais faire plusieurs fois la même intervention. J’aurais l’impression de m’ennuyer et donc d’ennuyer le public. J’ai besoin de reconstruire une réflexion à chaque fois. De refaire le vide pour avoir l’espace de cuisiner de nouvelles idées.

Est-ce que j’aurais continué sans mon départ au Canada ? J’ai du mal à répondre à cette question (tiens au passage, si vous avez envie de partager vos connaissances sur Arles, il y a une place qui se libère, contactez-moi :-)). Outre le temps que ça prend, l’enthousiasme des apprenants est un peu en dent de scie et c’est difficile à gérer et à s’en contenter.

D’un autre côté, j’ai toujours envie de ré-expérimenter dans d’autres contextes d’apprentissage.

Conclusion

Je dirais que la plupart des expériences biographiques sont de ce type. La plupart du temps, nous allons là où le monde social nous aurait envoyés de toutes façons, mais nous y allons contents. C’est ce qu’on appelle la vocation. Il y a évidemment des exceptions, et elles sont très importantes : il suffit qu’il y en ait une seule pour que cela change tout – et c’est la liberté.

Pierre Bourdieu

Je ne sais pas vraiment s’il y a une conclusion à cette expérience. J’avais soumis le sujet à ParisWeb pour pouvoir en discuter avec davantage de personnes mais il n’a malheureusement pas été retenu. Ç’eut été l’occasion de débattre de ces problématiques car je sais que d’autres travailleurs du web font leurs propres expérimentations, peut-être qu’un espace d’échange dédié serait plus adapté. L’initiative TrainDrop mériterait d’être étendue avec un espace de discussion pérenne pour échanger sur nos expériences, nos doutes et pourquoi pas aider de nouvelles personnes à se lancer. Qui serait motivé ?

Je vais profiter d’être à SudWeb pour insuffler un peu d’énergie dans le projet. Retour sur l’atelier.

★ Consultation offline

Fusionner, cela signifie que l’IDPF va disparaître, pour devenir un groupe de travail du W3C, dédié au format EPUB, et que celui-ci ne sera plus uniquement le format des livres numériques mais le format de tous les documents numériques que l’on souhaitera encapsuler pour qu’ils puissent notamment être lus hors ligne.

IDPF et W3C : books and browsers (cache)

J’ai des envies assez simples pour ce site :

  1. avoir la possibilité de le parcourir dans son intégralité sans connexion ;
  2. avoir la possibilité de chercher un mot-clé dans ces sources ;
  3. ne pas voir les ajouts/corrections/retraits facilement.

J’ai exploré pour cela les Service Workers, DCVS, IPFS/ZeroNet, EPUB, Electron et… un simple fichier d’archive. Spoiler: aucune de ces solutions techniques n’est satisfaisante.

Service Workers

Les Services Workers sont intéressants pour mettre en cache quelques kilo-octets et fluidifier la navigation en récupérant les liens suivants mais l’intégralité du HTML de ce site fait 27 mega-octets (dont 11 de cache). Ça commence à faire beaucoup pour l’espace de stockage par défaut. C’est limitant également au niveau du support des navigateurs.

IPFS, ZeroNet, etc

Les solutions de décentralisation ne créent pas une copie locale intégrale du site mais uniquement des pages consultées (à ma connaissance) sans compter que ces solutions sont encore trop récentes/élitistes pour être employées sereinement vu que ça doit être bloqué par la moitié des proxies de la planète.

EPUB

J’ai suivi avec grand intérêt le retour d’expérience d’Antoine sur sa création de livre web (cache) et j’ai essayé de m’en inspirer mais cela pose le problème de la navigation lorsqu’on arrive à des milliers de pages. Sans compter la soupe de tags à laquelle je suis arrivé en raison de mon incompétence dans ce format. J’espère que l’inclusion de l’IDPF au sein du W3C permettra de débloquer la situation d’ici… quelques années.

Electron

C’est le moment où je me suis dit que la transformation du site en application pourrait être la solution. Si vous avez envie d’app-ifier du HTML statique vous allez devoir ajouter ces lignes au quick start :

mainWindow.webContents.on('will-navigate', function (event, url) {
    // Deal with local links.
    event.preventDefault()
    mainWindow.loadURL(`file://${__dirname}/app/${url.substr('file:///'.length)}index.html`)
})

pour les liens locaux et :

app.on('ready', function () {
    // Deal with static/local resources.
    electron.protocol.interceptFileProtocol('file', function (request, callback) {
        var pathname = url.parse(request.url).pathname
        if (!request.url.includes(__dirname)) {
            pathname = path.join(__dirname, 'app', pathname)
        }
        callback(pathname)
    })
})

pour les ressources locales.

C’est tellement mal documenté que j’ai passé un long moment à comprendre comment y arriver. Et je ne parle pas de la complexité pour générer une application cross-platform avec cela. Toujours est-il qu’une fois l’application générée, elle faisait 260 Mo pour 140 Mo de sources. Sans compter l’impossibilité de faire des recherche dans les sources.

DCVS

Peut-être qu’un dépôt git pourrait être pertinent et c’est d’ailleurs ce que proposent par défaut la plupart des solutions de sites statiques comme Jekyll, Pelican ou Hugo. Sauf que je ne souhaite pas exposer les sources dans un gestionnaire de versions, entre autre pour ces raisons. Sans compter que ces outils sont peu adaptés au stockage des fichiers générés qui sont régulièrement tous mis à jour (hash de cache ou modification du design par exemple). J’en arrive par exemple à un .hg de 500 Mo pour ce site…

Simple archive

J’en suis donc revenu à une simple archive mais cela demande de la générer côté serveur, ce que je n’ai pas encore mis en place. Je suis toujours hésitant sur ce que je pourrais mettre dedans, surtout en terme de media pour garder un ratio intéressant en terme de bande passante, autant pour vous que pour moi. Il y a aussi la problématique des liens qui nécessitent de lancer un serveur local. En Python 3 via python3 -m http.server ou en Python 2 python -m SimpleHTTPServer mais ça reste une (fausse pour OSX/Linux ?) dépendance dont j’aimerais me passer.

En conclusion, je suis un peu à court d’idées sur la façon d’exposer un site statique offline, si vous avez des idées ça pourrait même être un sujet pour les élaboratoires SudWeb.

★ Stages en informatique

Ça va la gestion de l’hystérie ? Y a pénurie d’anxiolytiques en plus de celle de l’essence ? Cool de se baser sur un article un peu sensationnaliste du Monde pour descendre des jeunes essayant de faire quelque chose de leur vie. Perso je suis l’un des « exploités » dont tu parles, et j’ai jamais autant kiffé ma life et autant progressé de ma vie. Les stages à 2Francs on m’en a proposé partout ailleurs. Ici on vit, on trime pas. Je crée, je ne subis pas. J’ai une paie de stagiaire ? Je côtoie des gens brillants et j’apprends au quotidien. 200€ de plus par mois remplace le savoir ? Le jour où je sors d’ici j’aurais appris assez pour créer MON entreprise. L’indépendance c’est mal selon toi ? Ou je devrais plutôt passer mon temps à me branler au lieu d’apprendre pour prendre mon envol je suis payé décemment oui. J’ai ma petite paie, ma chambre, je ne dépense rien pour la bouffe et les restos. J’crois bien qu’il y a des cotisations sur les stagiaires. Pour l’instant ce n’est qu’un stage a temps partiel de 4 mois pour moi j’sais bien qu’on est loin d’être parfaits. La boite n’a que quelques mois. On est tous étudiants ici. À chaque stage que j’ai fait, j’étais un stagiaire. Point. Grosse boite, ptite boite. J’vois pas où est le problème ici j’sais pas si t’as raté le passage où j’t’ai dit que j’étais payé. Et bien au dessus des 3.5€/heure qu’on m’a proposé ailleurs Et les stages où on te met dans un coin pour faire un site en solo, j’en ai vu défiler. Google mon tuteur de stage, merci bcp des boites confortables où des stagiaires avaient des gueules de déterrés j’en ai vu aussi. Tu t’en fous de ça ? Perso je me lève quand je veux, bosse, fais du sport, sors faire la fête, voir ma copine quand je veux. Garde tes stages carrés c’est vrai que je regrette les tickets resto. Sinon, on ne m’offrait pas de vacances ni de tickets pour les grands matchs avant. Vous êtes drôles avec vos histoires de secte. On vole haut. Autant les histoires de statut j’comprend mais là... Bah ouais. Après mes 7-8h à faire semblant de bosser en bon designer, j’suis chez moi. J’fais ce que je veux. Le plus c’est que je le fais à l’heure que je veux. Je gère mon temps. Personne ne me dit oui ou non. le truc c’est que je ne cours pas après l’argent. J’ai juste envie de devenir très bon dans mon domaine. C’est mon objectif. J’ai vu le salariat, la zone de confort et le quotidien branlette, sans défis, sans goût. Je veux créer, pas suivre bêtement. Nan mais, pour la énième fois. On est payés. Il n’y a que les fondateurs qui ne touchent pas de salaire. Pour l’instant je suis à temps partiel et je suis mieux payé que mon précédent stage à temps plein dans une grosse SSII. Ça va ? Libre à vous d’écouter ce que je vous raconte plutôt que de camper sur vos aprioris. c’est pas beau c’est sûr mais c’est pragmatique. Et faut se dire que pour une start up qui débute c’est plutôt normal la prise de recul me fais voir ce que j’y gagne vraiment. Peut-être pas des de gros sous, mais des compétences et c’est la capitalisation sur ces compétences qui m’intéresse pour la suite. Je regardes sur le long terme. Le salariat à vie ne m’intéresse pas en fait. Aller à l’étranger, varier les domaines, créer, innover me passionne plus. Merci de votre intérêt en tout cas. J’espère juste avoir réussi à partager mon point de vue ! C’est un tremplin ici !

@HiD3f sur Twitter

Plus que l’article à sensation (cache) ou la réponse facile (cache), c’est l’avis d’une personne en interne qui m’intéresse. Et là on a de la matière. On pourrait y voir un syndrome de Stockholm ou de l’immaturité. J’y vois la réalité du marché du stage. Directe. Brutale.

Pour avoir un peu côtoyé des étudiants cherchant un stage, ils sont désespérés. Vraiment. On les oblige à en trouver un pour valider leur cursus et au fil des semaines qui s’écoulent ils sont prêts à accepter n’importe quoi. C’est avant tout ce système là qu’il faut dénoncer. Les dérives qui s’ensuivent ne sont qu’une illustration de la main invisible de l’exploitation lorsque l’offre devient supérieure à la demande. C’est la terrible violence du capitalisme. Prendre à parti des jeunes qui ont envie d’apprendre et soif d’entreprendre c’est se tromper de cible.

Si vous voulez inverser la tendance, augmentez la demande qualifiée dans vos entreprises, accompagnez des étudiants, prenez le temps de former la prochaine génération. Montrez-leur qu’une autre voie est possible. Concrètement. Prendre cinq minutes pour dénoncer sur Twitter c’est bien mais ça n’aura aucune conséquence si ce n’est que chacun reparte frustré et incompris dans sa bulle. Prendre trois/six mois pour transformer un étudiant en pair c’est autrement plus enrichissant.

Par ailleurs, lorsqu’un boulot peut facilement être effectué par un stagiaire sans que le commanditaire ne s’en rende compte c’est qu’il y a un problème. Soit de sur-formation (fut-elle autodidacte), soit de sous-qualité. J’ai la douloureuse impression qu’il s’agit davantage de la seconde option dans notre profession… Cela nécessiterait une bonne dose d’éducation côté client pour savoir apprécier le travail bien fait et être en capacité d’arbitrer en connaissance de cause. Nous sommes les seuls à avoir les compétences pour faire ce travail.

The obvious source of failure no one talks about

despair

Every time I see a startup dying, I can’t help but trying to understand what went wrong. Unfortunately, you can’t turn back time or get a time lapse of a multiple years history.

Unlike success, a startup failure might be hard to understand. Obvious reasons exist: lack of product / market fit, co founders issues, poor execution, lack culture, failure to build a great team, but it doesn’t explain everything.

Before 2011, Twitter was well known for its “fail whale” and inability to scale. Early Google was relying on (poor) competitors data before they had a big enough index. And Docker was once a Platforms As A Service (PAAS) before they pivoted to focus on Docker. Before they became the success story we hear about all over the Internet.

Semi failure is even harder to analyse. How can you know what made a promising company barely survive after 5 or 10 years without diving into an insane amount of data? Beside the company internals, such as product evolution, business model pivots, execs turnaround — a sign something’s fishy, not necessary the reason — and poor selling strategies, you need to analyse the evolution of the market, their clients and indeed their competitors.

There’s something else no one talks about when analysing failure. Something so obvious it sounds ridiculous until you face it.

Yesterday I wanted to see a friend whose startup only has 1 or 2 months cash left. Yesterday was also an optional bank holiday in France, but I didn’t expect their office door to be closed.

I was shocked. If my company was about to die, I would spend the 30, 45 remaining days trying to save it by all means. I’d run everywhere trying to find some more cash. I’d have the product team release that deal breaker differentiating feature. I’d try to find a quick win pivot. I’d even try to sell to my competitors in order to save some jobs. But I’d certainly not take a bank holiday.

Then I remembered every time I went there during the past 2 years, sometimes dropping for a coffee, sometimes using their Internet connection when I was working remotely and did not want to stay at home. There was no one before 10:00AM, and there was no one after 7:00PM. There were always people playing foosball / the playstation / watching a game on TV. Not like they were thousands people, more like a dozen. I remember late lunchs and, early parties.

Despite a fair product and promising business plan, they missed something critical. “Work hard, play harder” reads from left to right, not the other way around. In the startup world, the obvious source of failure no one talks about is the lack of work.