« bon code »

id :20200830153041
dernière édition :
type :programmation
mots-clés :lecture code, Samuel Goyet

Un code « propre » est un code que l’on a envie de lire, que l’on prend plaisir à comprendre et qui nous donne envie de poursuivre l’effort en vue de sa maintenance [[20210304181626]] (enjeux économique, politique). C’est une culture professionnelle pour aborder le code comme un document de travail et non plus seulement une interface[^1] (p.465), des points de vue

  • socio-sémiotique : aborder le code selon la variété de la culture métier des individus
  • techno-sémiotique : « le code en tant qu’il fixe les conditions de possibilités d’écriture de l’utilisateur »[^1] (p.465)

Le code, comme médiateur, n’est pas neutre et structure la rencontre entre les humains et les machines. Ils convient de soigner cette présentation. Pour cela, on considère les critères suivants :

Nous connaissons trois maximes en programmation. Elle visent à produire un code « propre »

  • DRY : Don't Repeat Yourself : Utiliser au maximum des fonctions (même très simples) pour stocker le code exécuté à différents endroits.
  • KISS : Keep it simple, stupid : Écrire le code le plus simple possible.
  • NIH : Not invented Here : Ne pas refaire soi-même ce qui est offert ailleurs.

[^1]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017

abstraction

id :20210412165919
dernière édition :
type :architecture

[[20200526222401]] modèle, pattern

L’abstraction est un exercice d’analyse permettant de travailler dans un système. Cela consiste en la simplification d’un ensemble d’éléments vus à travers le prisme de modèles de pensée ou bien de conception.

L’abstraction est une posture intellectuelle face à un système complexe.

[[20210419170156]] complexité

« C’est une simplification, en présence de l’objet concret infiniment complexe et perpétuellement changeant, simplification qui nous est imposée, soit par les nécessités de l’action, soit par les exigences de l’entendement, et qui consiste à considérer un élément de l’objet comme isolé, alors que rien n'est isolable, et comme constant alors que rien n'est au repos. »[^1]

Classes

Dans le jargon de la programmation, l’abstraction « identifie et regroupe des caractéristiques et traitements communs applicables à des entités ou concepts variés »[^2]. On isole des qualités d’un objet concret pour les appliquer à d’autres.

En programmation orienté objet [[20200522122316]], il est possible de réaliser des classes abstraites. Ce sont des modèles de classe ; elles ne sont pas destinés à être instanciés, mais uniquement à prescrire des attributs et méthodes dont d’autres classes vont hériter.

Dans l’extrait de code ci-dessous, la classe User hérite de l’attribut path et de la méthode add de sa classe parente Database qui lui prescrit impérativement la méthode search.

abstract class Database  {
    private  $path;

    abstract function search($item);

    function add() {
        …
    }
}

class  User  extends  Database  {
    private  $id;

    function search($item) {
        …
    }
}

[^1]: CNRTL, Abstraction [^2]: Wikipédia, Abstraction (Informatique)

AJAX protocole de requêtes asynchrones

id :20200704100343
dernière édition :
type :programmation
mots-clés :technique

[[20210405160832]] requête [[20200704153246]] langage de programmation Javascript

L’AJAX (asynchronous JavaScript and XML) recours à la class JavaScript « XMLHttpRequest » incluse dans les navigateurs modernes. Elle permet d’adresser des requêtes HTTP afin d’obtenir des données au format XML, JSON, HTML ou plein texte, comme si l’utilisateur s’était lui-même rendu à l’adresse.

Le traitement se fait désormais principalement en JSON étant donné qu’il s’agit d’un objet JavaScript. Il faudrait en réalité plutôt parle de AJAJ (asynchronous JavaScript and JSON).

L’avantage est qu’il est possible d’obtenir des données (« en arrière-plan ») sans recharger la page : c’est asynchrone car c’est un chargement de données décalé avec celui de la page.

[[20210221130228]] comportement logiciel

Avec JavaScript on peut ensuite modifier agit sur le code source de la page, par exemple pour afficher un retour (callback) suite à un envoi de formulaire. Cette action n’étant pas synchronisée avec une interaction utilisateur (délais de requête), on parle d’une opération asynchrone.

Inscription

JavaScript vanilla

Nouvelle inscription

fetch('data.json').then(function(response) {
    // Chargement de données...
    response.text().then(function(text) {
        // Traitement des données...
        var data = JSON.parse(text);
    });
});

[[20200705083336]] callback, principe de programmation asynchrone

Ancienne inscription

var req = new XMLHttpRequest();
req.open("GET", "./controller/function.php");
req.addEventListener("load", function () {
    if (req.status >= 200 && req.status < 400) {
        fxCallback(req.responseText);
    } else {
        console.error(req.status + " " + req.statusText + " " + url);
    }
});
req.addEventListener("error", function () {
    console.error("Erreur réseau à l'URL " + url);
});
req.send();

JQuery

$.ajax({
    url: "./controller/mail.php",
    type: 'POST',
    data: formulaire.serialize(),
    dataType: 'JSON',
    success: function (JSON, statut) {

        if (JSON.isOk) {formulaire.trigger('reset');}
        formulaire.append('<p>' + JSON.consolMsg + '</p>');
    },
    error: function (resultat, statut, erreur) {
        console.log(resultat);
        console.log(erreur);
    }
});

API, interface de programmation

id :20200701221037
dernière édition :
type :architecture
mots-clés :Anthony Masure, Samuel Goyet, politique, médiation

[[20200708132301]] interface

Une API (Application Programming Interface) permet de mettre en relation des programmes[^2] de manière structurée (modulaire [[20210313113130]]). Il s’agit en général d’échanger des données [[20200509195652]] entre deux parties, de faire communiquer des bases selon les principes de l’application [[20200909183033]] : l’API standardise un traitement et tend à uniformiser les programmes et interfaces.

« ensemble normalisé de classes, de méthodes, de fonctions et de constantes qui sert de façade par laquelle un logiciel offre des services à d’autres logiciels »[^1]

« Une API permet à un développeur – une personne qui écrit des programmes informatiques – d’accéder à des jeux de données ou à des blocs de code informatique préécrits pour remplir une certaine fonction »[^3] (p.36)

[[20200701214359]] structures de contrôle

L’utilisation des API dépend de la documentation [[20210118161126]] qui les accompagne. Elle permet de définir notamment « ses usages possibles, la syntaxe à respecter, les formats et type de données disponibles »[^3].

Usage

Ainsi, les API sont omniprésentes dans l’univers composite du Web. On retrouve des API pour toutes sortes de services en ligne :

  • intégration (via un code HTML à copier coller) d’un simple affichage, comme un bouton like de Facebook ;
  • intégration d’une carte (Google Maps ou Openstreet Map) en intégrant l’élément HTML et en soumettant des requêtes AJAX [[20200704100343]] pour l’actualiser ;
  • récupération massive de sets de données auprès d’une base (Twitter) ;
  • pairement en ligne via des formulaires validés à l’aide de clés/jeton d’authentification (token) par un service distant qui statut sur la requête.

Autant de sorties ou d’entrées par lesquelles il est possible de faire transiter (via des tuyaux, pipe) des données.

« Historiquement, les API web se sont développées à partir des années 2000, d’abord autour d’Ebay qui publie son API en 2000, puis Amazon en 2002 […] Google Maps en 2005 […] celle de Twitter […] et de Facebook, toutes deux en 2006 »[^3] (p.40-41)

Risques

« les API ne peuvent justement pas être réduites à leur fonction technique. Elles ont un rôle économique, culturel, politique… Elles sont éminemment ‹ composites ›. Ce sont des objets techniques, qui font partie de nos lectures quotidiennes sans que l’ont ait à s’interroger plus en avant sur cette part technique »[^3] (p.40)

« quatre grands risques découlant d’un usage d’une API: la pression financière, l’instabilité de son fonctionnement, l’homogénéisation des interfaces, et son invisibilité structurelle »[^2]

  • économique : « les API font partie d’un mouvement contemporain de valorisation de la ‹ donnée › comme vecteur de richesse […] si les données sont un enjeu économique et symbolique important, alors les moyens d’accès à ces données deviennent des points de passage névralgiques »[^3] (p.41)
  • culturel : les API « permettent la création de ‹ petites formes › participent à un mouvement de transformation, d’hybridation d’objets culturels fondamentaux par le biais du numérique »[^3] comme avec les carte Google Maps, « lieux où l’hybridation se fait jour, entre la culture informatique de la programmation et la culture lettrée »[^3] (p.42), entre l’outillage technique et la création du sens par l’outillage technique.
  • politique :
    • « enjeux politiques de monstration ou d’invisibilisation »[^3] (p.57)
    • « Grâce à leurs API, Amazon ou Google créent un ‹ écosystème › de développeurs, qui dépendent des données de ces plateformes pour écrire leurs propres logiciels, mais qui en retour bénéficient de moyens d’accès facilités à ces données (grâce à l’API) et peuvent donc les utiliser à leurs propres fins »[^3] (p.41)

Médiation opaque

Une API est une médiatrice de la donnée dans le sens où elle est un péage permettant de contrôler le flux de données pouvant sortir, mais elle en cache aussi la source. Le fonctionnement de l’API même est difficile à appréhender, voire opaque (boîte noire). On sait capter et traiter les données grâce à la documentation, mais on ne sait pas d’où elle viennent, ni comment elles sont rassemblées, ni comment elles sont envoyées. Souvent, le flux de données reçu (volume d’usage) est volontairement limité par l’expéditeur.

« Le conducteur [développeur] ne voit qu’une interface composée d’un volant, de pédales (accélérateur, embrayage, frein), de manettes (clignotants, phares, boîte de vitesse) et de boutons (avertisseur, anti-brouillard, klaxon, etc.) »[^2]

C’est un frein à la rétro-ingénierie, mais aussi un moyen de développer plus rapidement des systèmes complexe. On peut faire abstraction [[20210412165919]] du fonctionnement et des moyens pour se concentrer sur la programmation d’un outil.

« la facilité d’accès aux API permet au développeur de ne pas se soucier de la façon dont fonctionne effectivement l’application distante […] L’API éloigne donc le programmeur d’un code trop complexe et fait écran avec les fonctions des langages de programmation dits standardisés »[^2]

Contrôle du flux

Utiliser une API revient à céder le contrôle du flux des données, par nature instable. Il peut être déplacé, interrompu, limité (quotas), modifié (structure et/ou contenu) et son contenu est soumis aux règles d’une base externe, celle de son propriétaire. Plutôt que de parler d’intégration de ces données sur un support, il faudrait parler d’ancrage, le contenu n’était pas solidaire de l’interface, mais récupéré.

Pour la gestion des accès (sécurité, confiance, péage) on compte sur des clés/jetons d’authentification (token) uniques. Elles sont chiffrées [[20210418214149]] et permettent accordent les échanges entre trois entités : l’utilisateur, le développeur et le pourvoyeur. En général, le deuxième met en place le pont entre les deux autres. Sa position de médiateur est authentifiée (contrôlée) via une clé privée. Il va transmettre une clé publique (envoyée par le pourvoyeur) à l’utilisateur. Ce dernier va l’utiliser pour utiliser l’API.

Exemple de clé : a4db08b7-5729-4ba9-8c08-f2df493465a1

Pour prévenir une coupure de l’API, on peut mettre en place un système de cache permettant de garder dans une autre base (sauvegarde) les données récoltées à la source. Cela reste une pratique pouvant être limitée par le propriétaire des données.

[^1]: Wikipédia, Interface de programmation [^2]: Anthony Masure, Le design des programmes, 2014 [^3]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017

application

id :20200909183033
dernière édition :
type :architecture
mots-clés :Julien Dehut, Anthony Masure, politique

Par rapport à un logiciel, une application (« app ») est destinée à un usage circonscrit. Elle a l’avantage d’être conçue sur une chaîne de production entièrement contrôlée par les fabricants. Ils ont conçu un environnement complet pour contrôler l’utilisation des usagers, mais aussi le travail des concepteurs. Même les designers et développeurs, les professionnels du numérique, sont influencés dans leur métier dans ce sens. On trouve des applications sur les smartphones, mais aussi les ordinateurs (Chrome OS est la plateforme la plus fertile, mais on en trouve aussi sur Windows et Mac OS) et sur le Web (plateformes fonctionnant sur des API [[20200701221037]]).

L’application est un outil de l’esclavage moderne, de l’aliénation à la production (gratuite et/ou détournée, cachée) de données.

[[20200705114827]] digital labor

«  La notion d’application est dénoncée depuis 1971 par Ted Nelson qui y voit là une source d’asservissement pour le public »[^1]

Les utilisateurs et les designers s’adaptent à ces interface (aux usages qu’elles engendrent) au fil des mises à jour. Nous sommes invités à servir toujours plus, toujours plus efficacement.

[[20200802100201]] théorie du nudge

« l’actuelle ‹ génération de logiciels › des terminaux mobiles prend le nom d’‹ applications ›, distinction qu’il y a lieu d’interroger »[^2]

Logiciel // application

L’informatique a changé. Il est devenu portable, plus facile d'utilisation et plus facile à programmer. Les applications sont le résultat de cette transformation (facilitation et accélération). Les développeurs et les designers sont au cœur de cette logique. Les GAFAM donnent généreusement des guides aux professionnels (pour faciliter leur travail, mais aussi l’influencer) pour que jamais on ne trouve une interface qu'ils n'est pas optimisé pour leur récolte.

Ainsi, l’application est un logiciel normé dont on a limité l’environnement logiciel [[20201224152456]] et interactif :

  • guidelines pour les designers
  • Software Development Kit (SDK) développeurs

Les applications permettent aux utilisateurs d’effectuer des tâches spécialisées (ex : Word → traitement de texte) quand les logiciels peuvent avoir une portée très générique (ex : système d’exploitation).

Le ressentis d’utilisation d’une application est fermé à la notion de programmes tant son fonctionnement, ses entrées et sorties, son API, sont opaques (boîte noire, cryptotechnique). Le perfectionnement des techniques informatiques mène inéluctablement à l’effacement de ces techniques. Les utilisateurs et développeurs cherchent des solutions « tout intégrées », des interfaces qu’ils ne veulent pas comprendre, mais simplement utiliser dès lors qu’elles sont simple, efficace et sécurisées.

[[20200709104849]] rapport aux objets techniques

À l’opposé, nous trouvons les logiciels LOS [[20200710204125]], dont le code source (et donc les programmes) est visible par tous et peut être améliorer par une communauté plus ou moins restreinte.

Développeurs

Ces modalités ont un effet direct sur le développement et la maintenance de ces logiciels. Ils sont soumis à différentes plateformes (constructeur du terminal + système d’exploitation + marché d’applications), à leurs changements, et leur chantage. Les constructeurs n’hésitent pas à limiter l’usage de l’appareil en limitant ses mises à jour tandis que les applications doivent elles suivre l’évolution du système d’exploitation. Les développeurs sont contraints de respecter les ambitions économiques des différents partis.

« Citons, en plus des limitations déjà présentes sur l’App Store iPhone et iPad : […] pas de mise à jour payante depuis un ancien logiciel […] ; pas de code fonctionnant en arrière-plan une fois l’application fermée […] ; pas d’accès aux code de bas niveau […] »[^2]

En échange de cela, le développement de ces logiciels est très rapide, facilité par des outils sur mesure pour les porter d’un marché d’application à un autre. Plus le matériel est normé (l’iPhone est un exemple typique), plus il est facile de généraliser la compatibilité de l’application à des centaines d’appareils parfois très différents (issus du même écosystème). La mise sur un marché aussi fermé qu’un store d’application permet à des logiciels de se démarquer rapidement, autrement que dans la jungle du Web. Ils y sont mis en concurrence par un système de notation, commentaire. Les utilisateurs peuvent rapidement télécharger leur solution et la garder à jour automatiquement.

Utilisateurs

Les utilisateurs perdent largement le contrôle des appareils sur lesquels ils installent des applications. Le système d’exploitation de ces appareils sont largement bridés et l’API ne tolère aucun écart, à moins de la casser (jailbreak des iPhone, qui fait perdre la garantie de l’appareil). Les interfaces sont semblablent d’une application à une autre (suivant les guidelines du système d’exploitation) forçant les utilisateurs à se conformer (par le design) à une unique manière d’utiliser leur terminal, de penser leur navigation. Ils sont enfin largement soumis à la récolte de données (en amont ou en aval des applications elles-mêmes) et au marché de la publicité. Les applications sont les supports du travail gratuit sur le Web [[20200705100544]] ; c’est le réel objectif des marchés d’applications.

En échange de cela, l’utilisateur peut profiter d’un grand nombre d’applications qui le suivront tout au long de la vie de son appareil et d’un appareil à l’autre. Il pourra profiter d’un écosystème qui lui permet d’aménager (dans une certaine mesure) un espace de travail. Ce écosystème (entre les applications et avec l’appareil) est aussi sécurisant et protège l’utilisateur d’installations frauduleuses qui pourrait abîmer son appareil (ou voler ses données, le faire payer sans que le marché d’application ne touche sa commission).

[^1]: Julien Dehut, En finir avec Word ! Pour une analyse des enjeux relatifs aux traitements de texte et à leur utilisation, 2018 [^2]: Anthony Masure, Le design des programmes, 2014

architecte logiciel

id :20210602103346
dernière édition :
type :undefined
mots-clés :projet

[[20210531145255]] architecture logicielle

« Si l’architecture est ce qui est important, alors l’architecte est la personne (ou les personnes) qui se préoccupe(nt) de ce qui est important »[^1] (p.3)

Martin Fowler[^1] distingue deux types d’architectes, garants de l’« intégrité conceptuelle » :

  • l’architectus reloadus (comme celui de Matrix Reloaded) : personnalité centrale, « esprit unique » conservant toutes les connaissances relatives à l’architecture et du même coup l’investigateur de toutes les décisions pour son équipe ;
  • l’architectus oryzus : collaborateur intensif, c’est un médiateur des connaissances relatives à l’architecture donnant à chaque équipier la capacité d’aborder des problèmes de plus en plus complexes [[20210419170156]].

« En améliorant les capacités de l’équipe de développement, l’architecte dispose d’un levier beaucoup plus important que s’il était le seul décideur et courait ainsi le risque d’être un goulot d’étranglement architectural. Cela conduit à la règle empirique satisfaisante selon laquelle la valeur d’un architecte est inversement proportionnelle au nombre de décisions qu’il ou elle prend »[^1] (p.3)

[^1]: Martin Fowler, Who Needs an Architect?, 2003

architecture de code hypertextuelle

id :20210130151200
dernière édition :
type :inscription

[[20210115090700]] architexte

Le préfixe « hyper » [[20210114195936]] ne suggère pas la puissance du texte code (ce serait le fétichiser [[20210121192437]]), mais sa nature combinatoire [[20210416144157]]. Le code source est construit avec une variété de matériaux et d’outils [[20210303174716]] interreliés.

Pour faire circuler l’information au sein des logiciels, des sites web, on utilise

architecture logiciel MVC

id :20200704172042
dernière édition :
type :architecture

L’architecture logicielle MVC se compose en trois parties en relation selon le schéma ci-dessous :

  • Model : gestion des flux de données
  • View : génération de l’affichage, de l’interface [[20200708132301]]
  • Controller : gestion des requêtes [[20210405160832]] utilisateur et de sa session

C’est un dispositif adapté à l’architecture trois tiers, elle-même conçue pour faire communiquer le client, l’application et la base de données. Elle prescrit trois couches : présentation, traitement et accès aux données.

[[20210112090725]] client serveur

graph TD
	Model[Model]
	View[View]
	Controller[Controller]
	
	client((client))
	
	client -->|1 requête| Controller
	Controller  -->|2 demande données| Model
	Model  -->|3 obtention données| Controller
	Controller  -->|4 transmition données| View
	View -->|5 affichage| client

Cette architecture permet d’éditer les fonctionnalités d’une couche, sans induire de changement dans les autres. On évite ainsi les effets de bord [[20210109130837]].

Mise en place

Cette architecture se matérialise directement dans l’arborescence de fichier comme ci-dessous :

.
├── index.html
└── core/
    ├── model/
    │   └── user.php
    ├── view/
    │   └── connexion.php
    └── controller/
        └── authentification.php

Grâce à des conditionnels (inspection des requêtes et de la session du client), on va réaliser différentes inclusions de code pour exécuter les différentes opérations.

Technologies

Entre la View et le Controller on va généralement mettre en place un pipe AJAX [[20200704100343]] pour éviter les rechargements de pages et ainsi donné l’illusion d’une application web avec la fluidité d’affichage que cela implique.

Les models sont en général inscrits avec le paradigme de la programmation orientée objet [[20200522122316]] pour sécuriser les appels à la base de données.

De nombreux framework [[20200701222949]] mettent à disposition une architecture MVC comme Symfony, Laravel ou AngularJs.

architecture logicielle

id :20210531145255
dernière édition :
type :processus

Martin Fowler parle de l’architecture logicielle comme d’un « devoir moral »[^2] pour les développeurs. Nous devons être de « bons artisans » (même si la raison économique gagne ). Elle n’apporte rien aux utilisateurs, clients, c’est une « qualité interne » du projet. Elle permet à l’équipe d’accélérer toujours plus vite dans l’implémentation de fonctionnalités en repoussant la dette technique [[20210109130329]].

Martin Fowler cite différentes définitions de l’architecture logicielle. Elle est

  • « le concept de plus haut niveau d’un système dans son environnement »[^1] (p.2), soit la plus haute abstraction [[20210412165919]] du logiciel, son interface globale, elle-même étant découpé en plus petites interfaces de compréhension ;
  • « l’organisation fondamentale du système, incarné par ses composants, leurs relations, leur environnement ainsi que toutes les règles de direction qui s’appliquent à son design et son évolution »[^2] ;
  • « L’architecture, ce sont les décisions que l’on aimerait pouvoir prendre au début d’un projet »[^1] (p.3) ainsi que l’on aimerait poser les fondations pour un ouvrage réaliser linéairement, sans friction ; finalement on se retrouve tout de même à concevoir une architecture modulaire [[20210313113130]] pour pouvoir prévoir les modifications imprévisibles, c’est ainsi qu’on augmente la complexité du logiciel [[20210313105330]] ;
  • « les notions que les experts du système partagent »[^2], « une compréhension commune de la conception d’un système »[^1] (p.2), deux définitions intéressantes proposant de considérer l’architecture sous l’angle de la collaboration.

Ainsi, l’environnement de développement [[20201224152456]] est une notion prépondérante dans l’appréhension d’une architecture. Elle est un objet social plus qu’une donnée matérielle.

Objet social

« Oublions les développeurs qui ne comprennent que leur petit morceau. L’architecture est le concept de plus haut niveau des développeurs experts »[^1] (p.2)

L’architecture du logiciel est ce que les personnes qui le maintiennent en ont compris. Elle est un objet social complexe [[20210419170156]] (jargon, relations, confusions…) car elle se base sur le travail d’humains, mais aussi sur leur compréhension de cet ouvrage. C’est cette analyse qui permet aux personnes de travailler sur le logiciel ; ces éléments que tous doivent avoir en tête pour concevoir et implémenter ; c’est sa compréhension qu’il faut nourrir tout au long du développement.

« Cette compréhension [de l’architecture] comprend la façon dont le système est divisé en composants et la façon dont les composants interagissent par le biais d’interfaces. Ces composants sont généralement composés de composants plus petits, mais l’architecture ne comprend que les composants et les interfaces qui sont compris par tous les développeurs »[^1] (p.3)

En tant que fondation sociale et technique, l’architecture est difficile à modifier. Pour comprendre l’architecture, on peut se demander ce qu’il est difficile de changer dans le projet. Par exemple, un langage de programmation [[20200704135046]] est difficile à remplacer ; d’un point de vie technique il faut modifier une bonne partie de l’environnement de développement pour cela ; d’un point de vue discursif, il faut adapter les paradigmes utilisés et que tous les comprennent.

Faiblesse des représentations

L’architecture n’est pas une suite de documents. Martin Fowler[^2] critique l’idée de considérer l’architecture à travers une documentation, car ces modélisations de l’architecture logicielle [[20200508111132]] sont en général mal conçues et ne permettent pas de saisir les connaissances qui doivent être partagées, notamment au sein des communautés de développement [[20210326162804]].

Impact

L’architecture détermine l’utilisabilité d’un logiciel.

[^1]: Martin Fowler, Who Needs an Architect?, 2003 [^2]: Martin Fowler, Making Architecture Matter, 2015

architexte

id :20210115090700
dernière édition :
type :inscription
mots-clés :Yves Jeanneret, Emmanuel Souchier, Cléo Collomb, Samuel Goyet, politique, médiation

Les architextes sont des « couches de textes »[^3], des textes permettant l’accès à d’autres textes et finalement aux écrits d’écran[^2]. Ce sont des textes (« écriture-calcul »[^4]) capables de récupérer et formater d’autres textes (« écriture-texte »[^4]) pour enfin les afficher. S’ils sont tous écrits et intelligibles par l’humain, ces textes sont de différentes natures. On oppose ainsi l’écriture-texte pour les humains et l’écriture-calcul pour les machines[^4].

[[20210116135423]] inscription computationnelle

« Nous nommons architextes (de archè, origine et commandement), les outils qui permettent l’existence de l’écrit à l’écran et qui, non contents de représenter la structure du texte, en commandent l’exécution et la réalisation »[^1]

« Un traitement de texte, un champ de recherche Google, un logiciel de montage vidéo, une API sont des architextes : ce sont des outils qui permettent d’écrire grâce à un ordinateur. Ces outils ont deux particularités : ce sont des ‹ outils d’écriture écrits ›, ils permettent donc l’écriture en la formatant dans le même temps ; ils sont propre à l’informatique en ceci que cette technique d’écriture est fondée sur une rupture sémiotique et sémantique. C’est cette rupture qui nécessite des outils de conversion – les architextes – entre le niveau de l’inscription (la matérialité du disque dur ou de tout support de mémoire) et celui de l’affichage (l’écran, l’interface) »[^5]

Médiation

L’écrit d’écran « reconnaît la rupture opérée par l’informatique entre le support et le signe, entre le calculé et le perceptible »[^3] et les architextes opèrent la médiation entre le signe et son support, reliés par la computation, le calcul.

« Le texte naît de l’architexte qui en balise l’écriture »[^6] (p.103)

Cette médiation n’est pas une interaction entre l’humain et la machine [[20210115183034]], mais entre un humain et un autre humain par l’intermédiaire d’une machine. Le premier a écrit un texte (code) pour permettre au second de lire d’autres textes.

« Si quelque chose se passe à l’écran, ce n’est pas en raison d’une quelconque interactivité [entre l’humain et la machine], mais parce que des architextes ont en amont rendu possible la saisie d’un comportement humain comme un geste d’écriture ayant pour effet d’afficher un nouveau texte »[^3]

Contrôle

Les architextes sont aussi un moyen de contrôle du texte par les algorithmes. Ce sont « des couches de textes écrites par des programmeurs, qui font circuler des rapports de pouvoir aussi bien symboliques qu’économiques »[^3].

[[20200725133539]] enjeux politiques de l’écriture numérique

Ces mêmes développeurs ont le pouvoir de permettre aux utilisateurs les moins expérimentés de prendre le contrôle de leur machine. Par le texte (code) ils vont permettre à d’autres de lire en concevant des interfaces [[20200708132301]]. Si elle sont suffisamment abouties, elles peuvent effacer la machine, l’assujettir. Elle devient alors le « prolongement de la volonté humaine »[^3].

« tantôt d’humains qui ont du apprendre à la manier et à lui parler pour qu’elle s’exécute (programmeurs), tantôt d’humains qui peuvent très bien tout simplement l’oublier (les utilisateurs) »[^3]

Du même geste, les dispositifs d’architexte occultent la « dimension processuelle de l’activité computationnelle »[^3] derrière des interfaces. Les utilisateurs deviennent incapables de comprendre leur outil et ne voient dans l’affichage que des interactions limitées.

Fausseté

Bien qu’elle permette de lire du texte, la machine informatique n’est pas à proprement parlé une machine à écrire. Elle permet en effet de manipuler du texte, mais il est vide de sens. À force de se focaliser sur le texte informatique, on oublie la machine, sa mécanique et une certaine contingence dans l’exécution d’une texte qui n’est pas toute puissance.

[[20200906135907]] code source

« Ce qui est inscrit, ce sont des données sous forme éléctromagnétique dans un disque dur. Ce qui est affiché, ce sont des lettres, des images, des mots, des vidéos… Tout un ensemble sémiotique qui nécessite un incessant passage, une conversion entre l’inscrit (le technique) et l’affiché (le sémiotique) »[^5] (p.47)

On ne considère le processus informatique que par l’écran, par le texte qui constitue son code source, puis par le texte de la console qui atteste de la progression de l’exécution et enfin par le texte résultant de l’opération. Finalement, on ne prend jamais véritablement le contrôle matériellement de la machine. Selon les langages de programmation, le texte permet un contrôle plus ou moins direct.

[[20200718172257]] strates des langages de programmation

Pour générer une page web, on peut directement saisir le HTML et le CSS ; ajouter du JavaScript pour modifier les intégrations des deux premiers langages ; générer tout ces langages en via PHP (ou même du JavaScript, les mêmes langages peuvent être utilisés à différents temps de l’exécution).

[^1]: Yves Jeanneret et Emmanuel Souchier, L'énonciation éditoriale dans les écrits d'écran, 2005 [^2]: Emmanuel Souchier, L'écrit d'écran, pratiques d'écriture & informatique, 1996 [^3]: Cléo Collomb, Faire compter les machines, 2017 [^4]: Cléo Collomb et Samuel Goyet, Do computers write on electric screens?, 2016 [^5]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017 [^6]: Yves Jeanneret et Emmanuel Souchier, Pour une poétique de l’écrit d’écran, 1999

base de données

id :20200623180525
dernière édition :
type :architecture
mots-clés :REVUE

[[20210117094335]] système d’information [[20200509195652]] la donnée

Une base de données est une collection organisée de données, ainsi sont une base de données :

  • un meuble de fiches ;
  • un fichier tableur ;
  • un fichier JSON ou XML ;
  • une base de données, relationnelle ou non.

L’objectif d’une base de données est de structurer l’information pour pouvoir y accéder plus efficacement. On cherche à pouvoir effectuer le SCRUD (Search, Create, Read, Update and Delete). Ainsi, on va régulariser les entrées à l’aide de formulaires [[20210117100240]], normaliser son contenu et mettre en place des systèmes de recherche en son sein.

Structurer

Pour structurer l’information, il est nécessaire de structurer les supports, puis de les organiser. Ainsi, dans une base de fiches nous allons définir des règles d’édition des fiches (ex : prescrire des règles quant à leur contenu), mais aussi leur appliquer des métadonnées [[20200923152146]].

[[20200624194717]] fiche comme modèle de données

Dans le cas d’une base de fiches, les métadonnées sont le titre, la date, l’auteur… Elles ne font pas partie du propos, mais permettent d’identifier les fiches et de les situer dans l’espace de la base (donc de les y retrouver), mais aussi au-delà (pour un affichage complet). Dans le cas d’une base de données d’utilisateurs, les métadonnées n’incarnent pas ces utilisateurs, mais permettent de leur attribuer des valeurs, des actions.

[[20201003174114]] sérialisation des données

Modèle

[[20200526222401]] modèle, pattern

Donner à toutes les entrées d’une base la même structure c’est mettre en place un modèle. Un modèle peut être instancié, c’est à dire reproduit en héritant des mêmes champs, des mêmes métadonnées qui vont permettre d’exploiter massivement le contenu d’une base ainsi organisée.

Relation

Les données n’ont de sens que reliées et pour se faire il faut mettre en place des fonctions relationnelles au niveau des métadonnées pour combiner les données, les faire entrer dans le système d’information.

[[20200625172823]] théorie des graphes

Ce travail théorique est guidé par le document modèle conceptuel de données, soit une modélisation théorique des métadonnées. Il nécessite notamment la mise en place des clés afin que chaque objet de la base de donnée soit identifié et puisse être mis en relation avec d’autres.

Clés

On appelle clé primaire l’identifiant unique d’un objet. Il devient clé étrangère dès lors qu’il est appelé hors de son modèle d’origine. Ainsi l’identifiant unique (clé primaire) d’utilisateur devient clé étrangère lorsqu’il est référencé dans le modèle des adresses pour indiquer que tel utilisateur réside à telle adresse.

[[20200622101202]] namespace, espace de nom

Recherche

Le parcours (browsing) d’une base de données relationnelle peut être effectué grâce au langage SQL (Structured Query Language), mais il existe d’autres langages comme SPARQL pour parcourir les éléments du web sémantique [[20200915084904]].

On appelle noSQL les bases de données non-relationnelles : elles possèdent un moteur propre afin d’optimiser la liaison de ces bases colossales.

BEM, Bloc Element Modifier

id :20200715212459
dernière édition :
type :inscription
mots-clés :technique

Le BEM (Bloc Element Modifier) est une convention de nommage des objets du DOM [[20200704160828]]. Elle s’applique aux fichiers HTML. Cette convention permet de structurer la sélection des objets et donc l’affectation des méthodes (CSS [[20200704152459]] et JavaScript [[20200704153246]]) avec une approche modulaire [[20210421151432]].

Ci-dessous on trouve deux codelets : un extrait de HTML avec la convention de nommage BEM et un extrait de SCSS (langage transpilé [[20200907090751]] en CSS).

<div class="btns-content">
    <button class="btns-content__btn"></button>
    <button class="btns-content__btn btns-content__btn--big"></button>
    <button class="btns-content__btn"></button>
</div>
.btns-content {
    backgound-color: red;

    &__btn {
        width: 50px;
        border: none;
        backgound-color: gray;
        color: black;

            &--big {
                width: 100px;
            }

        &:hover {
            backgound-color: black;
            color: white;
        }
    }
}

Dans l’objet HTML btns-content__btn--big on distingue successivement trois chaînes :

  1. le Bloc : btns-content
  2. l’Element (précédé des deux underscores) : btn
  3. le Modificateur (précédé des deux tirets) : big

Ce dernier est un duplicata de l’Element, mais soumis à des règles de style différentes. L’Element est quant à lui soumis au Bloc en tant que son enfant. Cette relation de parenté vient du fait que l’Element est dépendant du Bloc qui lui est autosuffisant : le Bloc a un intérêt à être multiplié dans la page contrairement à ses enfants qui ne sont inscrits que pour lui apporter du contenu.

Ce principe d’autosuffisance renvoie directement au concept d’objet [[20210130110228]] informatique héritant de méthodes et attributs et destiné à être instancié, reproduit. Ainsi, le BEM prolonge le DOM comme espace orienté objet. C’est pour cela qu’on parle également de OOCSS (Object Oriented CSS).

bibliothèque logicielle

id :20210417145938
dernière édition :
type :programmation
mots-clés :Samuel Goyet

Les bibliothèques (code library, parfois traduit par librairies de code) sont des ensembles de fonctions [[20201224102746]], classes réutilisables par les développeurs dans leur code source. Ils incluent le(s) fichier(s) dans leur arborescence et peuvent ainsi profiter d’une code déjà écrit, prescrivant certains processus dans un domaine d’usage défini « plutôt que de réinventer la roue à chaque programme »[^1].

Par exemple, les bibliothèques suivantes prescrivent des processus dans les domaines cités :

  • VisJs pour la création de graphes
  • BeautifulSoup4 pour le web scraping

Les bibliothèques sont en général open source [[20200710204125]] et instaurent une « économie de l’écriture »[^1] du code source, un échange continu et collaboratif entre les développeurs.

[[20210326162804]] communauté de développement

Conception

Les bibliothèques disposent des fonctions et classes généralistes dans un domaine particulier. Elles doivent reposer sur une interface de programmation [[20200701221037]] claire et sont accessibles aux développeurs grâce à leur documentation [[20210118161126]] dédiée.

[^1]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017

boîte à outils programmable

id :20210303174716
dernière édition :
type :processus
mots-clés :technique

Les boîtes à outils (ou toolkit) sont des outils de développement permettant d’automatiser certaines tâches au sein de l’arborescence. Il s’agit d’opérations systématiques et massives sur un ensemble de fichiers. Soient qu’ils sont issus du même répertoire et/ou avec une extension définie. Ils sont alors pris dans un traitement programmé dans différents tuyaux (pipes).

Plusieurs opérations peuvent être exécutées dans ces tuyaux. Nous distinguons :

Cas

Avec des outils comme Gulp et Grunt, on peut par exemple pour tous les fichiers .png (images) contenus dans le répertoire assets/img définir une taille et un niveau de compression pour les transpiler en .jpg (images compressées). On peut faire passer ces mêmes fichiers dans un autre tuyaux pour les renommer, changer leur emplacement. De la même manière on peut transpiler une série de fichiers CoffeeScript en fichiers JavaScript que l’on vient ensuite minifier.

L’outil Webpack est quant à lui un outil de « paquetage » (bundle). Il permet d’assembler tous les contenus (bibliothèques, scripts, images, typographies, données…) d’une application web en un unique fichier bundle.js à relier à la page web.

brutalist web design

id :20200710094139
dernière édition :
type :processus
mots-clés :site web

[[20200515185607]] le design

Traduction du site brutalist-web.design qui présente les différentes caractéristiques du brutalist web design, design minimaliste de site web.

Voici une liste de site du genre : https://brutalistwebsites.com/

Le premier et principal objectif de ce type de design et de centrer l’attention sur l’utilisateur.

Lisibilité du contenu

Par défaut, un site web qui emploi du HTML valide et n’a pas de style personnalisé sera lisible sur tous les écrans et appareils. Seule une mauvaise conception peut rendre le contenu moins lisible.

Guider l’interaction

Un site web est un document hypertexte qui permet deux formes principales d’interaction : la navigation d’un lien vers un autre endroit et la soumission d’informations à un serveur. Ces fonctions sont assurées, respectivement, par des hyperliens et des boutons. Bien que JavaScript permette à n’importe quel élément de répondre à un clic, les zones cliquables d’une page qui ne sont pas manifestement des hyperliens ou des boutons peuvent dérouter le visiteur.

Design des interrupteurs

Un hyperlien n’a pas d’analogue dans le monde réel. Depuis l’aube du web, la convention veut qu’un hyperlien utilise un soulignement pour révéler son existence (ce qui est une merveilleuse solution, puisque le soulignement n’a pas sa place dans les compositions papier modernes).

Les boutons rendus dans un navigateur doivent ressembler aux boutons rendus sur le système d’exploitation de l’ordinateur qui exécute ledit navigateur.

Le bouton retour fonctionne

Tous les navigateurs ont un bouton intégré appelé « bouton retour ». Ce bouton est une forme d’« annulation », qui ramène l’utilisateur à l’endroit où il se trouvait avant son dernier clic de navigation. Cette acte doit être possible à tout instant et sous cette forme.

Un site se lit en scrollant

Un site web n’est ni un livre ni un magazine. Parce qu’il est visualisé dans un navigateur, les utilisateurs peuvent faire défiler la fenêtre du navigateur pour lire un contenu qui ne peut pas tenir sur un seul écran. Il faut respecter le rythme du visiteur et non le contraindre avec du JavaScript.

Les décorations, si besoin

Un site web n’est ni une application ni un jeu vidéo. Il est destiné au contenu et à l’internaute.

La performance est une fonctionnalité

Les sites web ne sont pas physiques comme un livre ou un magazine. Leur contenu doit être téléchargé sur un réseau informatique, puis rendu dans un navigateur web. Cela prend du temps et de l’énergie.

callback et promesses JavaScript

id :20200705083336
dernière édition :
type :programmation
mots-clés :technique

[[20201224102746]] fonctions

Les fonctions sont parfois pourvues d’un return, un renvoi. Une fois les opérations terminées au sein de la fonction, une valeur est renvoyée à l’extérieur de la fonction. Il est aussi possible que le renvoi doit se faire vers une autre fonction, sans sortir d’un processus asynchrone.

[[20210221130228]] comportement logiciel

Le callback (rétroaction) est une fonction intégrée dans une autre qui va prendre la suite de l’opération, sa continuité. Elle peut être passée en paramètre de la fonction comme ci-dessous :

function faireQlqChose(value, successCallback, errorCallback){
	// traitement

 if(isOk) {
     successCallback(newValue);
 } else {
     errorCallback(value)
 }
}

function successCallback() {
	// opération en cas de réussite
}

function errorCallback() {
	// opération en cas d'échec
}

C’est une méthode peu souple, intellectuellement très exigeante tant elle peut devenir abstraite par les multiples mises en abîme. Elles est aussi obsolète. Désormais, le JavaScript intègre l’objet Promises (promesses). Elles consiste à un renvoi externe à la fonction, mais sans casser le processus asynchrone, comme ci-dessous :

[[20200704153246]] javascript langage de programmation

function faireQlqChose(value){
  return new Promise((successCallback, failureCallback) => {
    // traitement
    if (isOk) {
      successCallback(newValue);
    } else {
      errorCallback(value);
    }
  })
}

faireQlqChose()
	.then(function(successValue) {
    // première opération en cas de réussite
	})
	.then(function(successValue) {
    // seconde opération en cas de réussite
	})
	.catch(function(failureValue) {
    // opération en cas d'échec
	})

Lutter contre le callbackhell, la sur-incrémentation : http://callbackhell.com/

carnet de programmation

id :20201222132128
dernière édition :
type :architecture
mots-clés :médiation

[[20210115090700]] architexte

Comme les éditeurs de texte, les notebook permettent d’inscrire du code, de le commenter, mais avec en plus la possibilité d’un rendu visuel instantané des instructions. Il est ainsi plus facile pour le développeur d’expliquer sa démarche.

Exemples de notebook :

  • Codepen
  • Jupyter
  • Observable

Ce sont des « carnet numérique programmable »[^1] permettant de mettre en place graphiquement un environnement de développement en répartissant visuellement (sections) des variables, des fonctions, des commentaires de code, mais avec en plus un rendu régulier de l’état du programme (message de la console ou rendu graphique). Ce sont autant d’instructions (par le code vers la machine, par les commentaires vers l’utilisateur) qui créent une médiation interactive très complète entre le développeur et le lecteur du code source pour donner un « essai computationnel », un « document-machine »[^1].

« Le notebook facilite la documentation de certaines méthodologies, en particulier quantitatives. Son pouvoir authentificateur réside dans son caractère dynamique : il permet par exemple de faire varier un paramètre dans un dispositif expérimental pour modifier les graphiques qui en découlent, voire d’éprouver tout un processus en remplaçant les données initiales par d’autres. Ce faisant, il vise une recherche reproductible, réplicable, robuste et généralisable. »[^1]

La modification (locale) d’un artefact numérique dans l’interface modifie le comportement final du programme, mais aussi tous les rendus intermédiaires, tout ce qui permet à l’utilisateur d’appréhender le fonctionnement du programme. Il peut modifier le code sans incidence sur l’expérience des autres utilisateurs juste pour enrichir la sienne et ainsi pouvoir reproduire tout ou partie du programme. On a là plus qu’une lecture du code, mais une véritable étude d’un programme avec la possibilité de le réutiliser.

[[20200710204125]] logiciel libre et logiciel open source

[^1]: Arthur Perret, Fonction documentaire de preuve et données numériques, 2020

centralisation

id :20200909184744
dernière édition :
type :processus
mots-clés :politique, Anthony Masure, REVUE

La centralisation est un bras de fer politique. Il s’oppose radicalement à la culture web du pair à pair (« peer to peer »), celle de l’échange de contenu entre les usagers, à la fois créateurs et consommateurs, capables d’exploiter pleinement leurs outils : ordinateur et ses logiciels, le Web. Elle s’oppose à la culture du libre [[20200710204125]].

[[20200705112816]] production de contenu web

Nous sommes dans une étape de récupération du Web par les organisations privées qui voient dans la simplification des interfaces et la récolte de données personnelles (via les applications [[20200909183033]]) des intérêts économiques. Ils centralisent les données, les usages, tous cachés derrière des interfaces opaques pour les utilisateurs, limitées pour les développeurs.

Alors que l’informatique venait apporter à chacun la possibilité de s’approprier pleinement un outil de travail et de création complexe, les utilisateurs sont invités à s’investir dans des écosystèmes simplifiant à l’extrême leur rapport à leur machine.

« C’est le modèle de la vitesse, du gain de temps. Dans cette optique, certains peuvent ainsi écrire que ‹ Linux est gratuit si votre temps n’a pas de valeur › »[^1]

Linux a beau être gratuit, il a un coût d’entrée très élevé.

Mouvements de perte

  • les logiciels sont bornés dans des environnements propriétaires, fermés et deviennent des applications perpétuellement mise à jour et pour lesquels il faut parfois payer un abonnement ;

[[20200909183033]] application

  • la capacité de création et recherche de l’ordinateur est externalisée dans le cloud, dépossédant l’utilisateur de son outil pour l’endetter dans des abonnements aux services de machines virtuelles.

[[20200714155845]] cloud

« Le cloud renvoie directement au Minitel, qui ne comprenait ni stockage de données ni processeur de calcul »[^1]

« Si le cloud computing incarne la concentration des capitaux et forces de production, le home computing est du côté de l’interopérabilité, qui permet à des machines diverses donc différentes de fonctionner ensemble »[^1]

On nous prend nos outils de production et on paie pour les utiliser. Les gens vont le faire parce que le service sera plus performant, sécurisé.

Perte de la capacité à créer

« Tout comme l’application nous retire la possibilité de créer des liens hypertextes, le cloud détruit progressivement la notion de fichier »[^1]

L’utilisateur perd la capacité de créer du lien entre les fichiers, mais aussi de créer des fichiers. Nous perdons peu à peu en littératie, ne comprenons plus nos outils.

[[20200707175829]] littératie numérique

[^1]: Anthony Masure, Le design des programmes, 2014

chaîne d’édition du code

id :20210314113151
dernière édition :
type :processus

[[20200707085937]] édition numérique

Le code source [[20200906135907]] est un document hybride, à la fois une interface permettant de comprendre le fonctionnement d’un programme pour un humain et une suite d’instructions pour la machine. Cette dernière n’a pas besoin d’un code lisible et soigné, mais simplement fonctionnel. Elle exécutera même plus efficacement un code moins verbeux, moins construit et avec au mieux un unique fichier minifié [[20210218193747]]. Les humains ont au contraire besoin de travailler sur un espace et un temps d’exécution ; sur une série de fichiers avec des jalons réguliers dans le code source pour attester de son bon fonctionnement et gérer sa complexité [[20210313105330]].

Pour réunir ces deux matériaux en un espace de travail, les développeurs utilisent des outils programmables [[20210303174716]]. La programmation lettrée [[20200914211839]] tente de fusionner ces deux approches. Elle invite les développeurs à inscrire un code très verbeux qui va ensuite être traité par un programme qui va séparer le fonctionnel de l’explicatif pour optimiser (rendre plus efficient) un rendu pour les humains et un autre pour les machines.

Lorsque l’on télécharge une bibliothèque [[20210417145938]], on peut souvent trouver dans le dépôt une version destinée à être lue par les développeurs (elle est commentée, avec messages d’erreur) et une version empaquetée [[20210314114007]] (dite « de production ») destinée à l’exécution.

chiffrement

id :20210418214149
dernière édition :
type :inscription
mots-clés :technique

Le chiffrement permet de verrouiller l’accès à des informations (chaînes de caractère, voire des fichiers entiers), d’authentifier une transaction (intégrité, authenticité). Son application varie selon les algorithmes.

Le chiffrement n’est pas le codage (en base 64, par exemple) qui consiste simplement à transformer une chaîne pour un système de lecture.

Le chiffrement est un procédé de cryptographie, de protection de l’information.

Déchiffrement

Le déchiffrement consiste à retrouver le contenu original (son accès) d’un document chiffré. Il est possible d’ajouter du sel lors du chiffrement pour augmenter le temps de déchiffrement.

Il est possible d’inverser le processus de chiffrement grâce à une clé, selon deux processus distincts.

  • chiffrement symétrique, la même clé permet de chiffrer et déchiffrer l’information ;
  • chiffrement asynchrone, on utilise une première clé publique (lisible par son utilisateur) pour chiffrer l’information et une seconde (appliquée par le service cible) pour la déchiffrer.

Le décryptage consiste à retrouver le contenu original du document sans utiliser la clé de déchiffrement. Il n’est pas possible de « crypter » un document étant donné qu’il est nécessaire de créer une clé pour chiffrer un document (sans quoi on ne pourrait en théorie par le déchiffrer).

client serveur

id :20210112090725
dernière édition :
type :architecture

Le mode de transaction « client-serveur » permet de distinguer ces deux machines selon leur rôle dans un échange de données, tel que :

  • client : envoie des requêtes en attente d’une réponse ;
  • serveur : attend les requêtes des clients et renvoie une réponse au client.

[[20210405160832]] requêtes

La seconde machine est en générale puissante et peut faire appel à d’autres serveurs (en prenant la position de client le cas échéant) pour exécuter des tâches complexes. Ce que ce qu’on désigne par client est souvent un ordinateur personnel, bien moins puissant.

C’est aussi une distinction d’environnement d’exécution [[20201224140951]]. Les serveurs web de manière générale possèdent les environnements pour exécuter les langages PHP, Python, JavaScript ou Ruby, mais les clients (navigateurs web) ne peuvent interpréter que le HTML, le CSS et le JavaScript. Ces trois composants peuvent ainsi être générés depuis le serveur avec le langage (et son runtime) choisi.

cloud

id :20200714155845
dernière édition :
type :undefined
mots-clés :service

Service

Pour les particuliers, c’est un service en ligne de stockage de fichier, mais pour les entreprises, le cloud computing correspond à un ensemble de services proposés en SAAS (Software As A Service) par des entreprises comme Amazone, Microsoft et Google selon trois grandes familles :

  • Stockage d’objet
  • Machines virtuelles
  • Cloud privé

La force du cloud est sa flexibilité. Contrairement à un hébergement classique où l’on paie au mois, à l’année une infrastructure pour un niveau de prise en charge (stockage, bande passante, puissance de calcul et puissance de charge), le cloud permet de rapidement monter une infrastructure payée à la minute (voire à la seconde) d’utilisation et dont il est possible de baisser ou monter la charge selon les besoins, en fonction des moments de la journée.

Maintenance

On différencie la disponibilité et la durabilité des données. Ce sont deux taux (estimés entre 95% et 99,99…% ) traitant respectivement de la possibilité d’accéder aux données et celle de les conserver. En effet, lors d’un transfert, d’une distribution, il est possible qu’il y est des interférences et que des données soient perdues. Il est possible d’accéder à l’objet, mais son intégrité n’a pas été respectée.

[[20200509195652]] la donnée

code source

id :20200906135907
dernière édition :
type :inscription
mots-clés :Bruno Bachimont, Wendy Hui Kyong Chun, Cléo Collomb

Aux débuts de l’informatique, le terme « code » désigne le « code machine », un langage de très bas niveau [[20200718172257]]. C’est de ce dernier dont il est question dans ce document.

Le terme « code » suggère d’emblée que ce qu’il désigne est une inscription prise dans un processus d’exécution, de transformation de l’information dans un flux. Les informations transmises par le code source ne sont que pures instructions ; il ne sert qu’à faire fonctionner, même si finalement il n’aboutis pas.

« Qu'il puisse ou non s'exécuter, le code peut, doit être, transformé en quelque chose de significatif »[^3]

Vide de sens

Le code machine est un système de symboles élémentaires (dont les unités ne peuvent être décomposées et sont indépendantes les unes des autres, dans un système discret [[20210405121526]]) et arbitraires (ils sont dépourvues de signification intrinsèque, ne donnent pas d’indice sur ce qu’ils codent).

« Programmer c’est manipuler aveuglement des symboles »[^2]

Le 0 et le 1 du binaire sont ainsi vides de sens. Ce sont des abstractions [[20210412165919]] : ils remplacent des valeurs dans le simple but de les rendre calculable. C’est possible car le code doit être sans ambiguïté (chaque symbole a une seule signification, c’est la monosémie) et peut être manipulé mécaniquement, par le calcul. Le code est « pure puissance de manipulation »[^1] et le calcul une « représentation graphique de l’activité de la machine »[^3].

[[20210116135423]] inscription computationnelle [[20200905210104]] grammatisation

« Le numérique ne dit pas ce qu’il calcule et c’est pourquoi on peut calculer n’importe quoi. »[^1]. Dès lors que l’on peut coder quelque chose, on peut l’exécuter ; la difficulté est donc de savoir ce que l’on peut coder et comment, de faire une herméneutique du code : interpréter son sens caché et le contenu qu’il produit. Il faut « articuler l’arbitraire du code et l’arbitraire du signe »[^1]. Selon Bruno Bahimont, le code est autothétique, « se manipule indépendamment de ce qu’il signifie et indépendamment de la matière sur laquelle il s’exécute »[^1]. Une structure de contrôle n’a pas besoin de renvoyer à un élément réel pour fonctionner efficacement.

Le code source (et sa compréhension, lisibilité) va être stabilisé grâce à des langages formels et paradigmes de programmation permettant de faire une ingénierie de cet outil. Aussi, on empruntera le nom d’éléments réels, le jargon de métiers pour suggérer le composition du système aux lecteurs.

Code fétiche

« La grande difficulté de la raison computationnelle c’est que le calcul ne se voit pas. Le calcul s’exécute. »[^1]

Si l’on remonte dans les couches logicielles, les langages de programmation alphanumériques nous permettent d’écrire un texte compréhensible avec un peu de contexte pour qui lit l’anglais. On peut ainsi lire le code, constater le résultat de l’opération, mais pas assister à la compilation, ni au traitement. C’est une boîte noire. On peut tout au plus recevoir certaines alertes d’une console quand l’environnement d’exécution [[20201224140951]] le permet.

Ainsi, on ne peut réduire « l’exécution à l’inscription », le « technique au sémiotique »[^4] et l’instruction au résultat. À force de donner trop d’importance à l’écrit en informatique, on finit par :

« convertir l’action computationnelle en langage, le temps en espace, l’événement en localisation, le technique en sémiotique »[^4]

[[20210430223919]] performativité du code

Le code n’est la source d’aucune action avant d’avoir été compilé [[20200907090751]] (pour être exécuté) et identifié comme source[^3]. L’idée de code source est une idée de traçage, de sourcing, avant d’être une question d’écriture, hors cette idée revient à fétichiser [[20210502094415]] les programmes.

« Il n’y pas de translation parfaite entre une exécution (computationnelle) et une inscription (textuelle), entre l’acte et le langage, entre le processus temporel qu’est l’exécution du programme et l’espace du code »[^4]

Échelle

Le code est un outil général. Le vide de sens qu’il incarne, ordonne et cette non ambiguïté permettent de formuler une quasi infinité d’algorithmes, de système logiques et donc de développer autant de formes, de fonctionnalités. Les limites sont matérielles et intellectuelles et sans cesse repoussées. Les machines sont plus puissantes et les techniciens créer des interfaces pour simplifier le développement, les langages de programmation.

Les langages de programmation [[20200704135046]] sont des outils particuliers. Ils viennent se superposer à cette immensité créative qu’est le code machine et l’ouvre pour un plus grand nombre de personnes grâce au travail technique de certaines. On sacrifie la généralité pour une plus grande efficacité.

[^1]: Bruno Bachimont, Rhétorique de l’intelligibilité, vers des humanités du numérique, 2020 [^2]: Bret Victor, Drawing Dynamic Visualizations, 2015 [^3]: Wendy Hui Kyong Chun, On ‹Sourcery›, or Code as Fetish, 2008 [^4]: Cléo Collomb, Faire compter les machines, 2017

coloration syntaxique

id :20200918100545
dernière édition :
type :inscription
mots-clés :outil

[[20200930214400]] syntaxe de code

On retrouve la coloration syntaxique dans la plupart des logiciels d’édition texte. Des expressions régulières permettent d’évaluer les chaînes de caractère selon qu’il s’agisse de mots-clés ou bien précédant/suivant des mots-clés et/ou caractères remarquables. Il ne s’agit pas d’une identification sémantique ; ça n’est pas le sens des termes qui permet de les colorer, mais bien leur seule composition en fonction du langage analysé.

Si la typographie est de manière général à châsse fixe (monospace), les variations de couleur, de graisse et d’inclinaison permettent de distinguer certaines chaînes dans le corps du texte. Il n’est toutefois pas prouvé que la mise en évidence de ces chaînes avait un effet bénéfique sur la compréhension des programmes pour les novices en programmation[^1] (p.3). Hors l’idée originale de la coloration syntaxique est bien de réduire substantiellement le temps de compréhension des caractéristiques d’un code donné.

Utilisation

On observe souvent un effet sapin de Noël avec une large variété de mises en forme pour que finalement on ne sache même pas ce qu’elles signifient. Cet effet peut polluer d’autres indications visuelles bien utiles, car liée à un contexte spécifique. Nicolas Rougier[^1] (p.3) prend l’exemple des « parenthèses arc-en-ciel » (rainbow parenthesis) avec lesquelles chaque niveau d’imbrication est bien visible. Il y a aussi la coloration des arguments d’une fonction. On peut imaginer qu’une variable puisse être colorée en fonction de sa portée [[20200522093949]], de son type.

La coloration syntaxique aussi utile lorsqu’il s’agit de partitionner un texte dans le temps ou entre des auteurs[^1] (p.3). Une couleur identifiera un premier auteur/une version antérieur et une autre un autre auteur/la version actuelle.

Des logiciels comme Zettlr vont aller plus loin dans la coloration syntaxique, allant bien plus loin dans la transformation des caractères, en taille, en graisse.

[^1]: Nicolas Rougier, On the design of text editors, 2020

commentaire de code

id :20201220084534
dernière édition :
type :programmation
mots-clés :médiation, technique

C’est une forme d’annotation du code source. La syntaxe de commentaire varie selon les langages, mais il en existe en général deux types : les commentaires sur une ligne et les blocs de commentaire.

Le commentaire de code à différents usages :

  • désactiver une partie du processus : les instructions commentées ne sont plus compilées/interprétés et le programmeur peut ainsi tester son programme en faisant interrupteur sur les structures de contrôle ;
  • préciser une instruction : avec un commentaire sur une ou plusieurs lignes, le programmeur peut expliciter un flux de contrôle long ou peu explicite ;
  • documenter le code [[20210520191108]] : disposer des encadrés dans les fichiers pour commenter les intrants, extrants, auteurs ou même les tâches à accomplir.
activeFunction();
// inactiveFunction();

/**
Code mort, inactif :
var inactiveVar = true;
inactiveFunction();
**/

activeFunction();

communauté de développement

id :20210326162804
dernière édition :
type :processus
mots-clés :Flore Barcellini, politique

Les projets open source [[20200710204125]] sont ouverts et continus dans le sens où tout le monde peut intervenir dans le cycle de développement [[20210306102014]] (par l’échange ou directement le code) et que de nouvelles fonctionnalités peuvent toujours être apportées aux logiciels.

L’échange continu du temps et des compétences de chacun, le partage de services (espaces de travail) gratuits, fait la force de ce modèle de production logicielle dont se sont emparés des milliers de personnes. Ils travaillent selon différents principes développés dans sa thèse par Flore Barcellini[^1].

Communauté

Une communauté se bâtie (elle-même, par elle-même) sur des règles (valeurs communes, gouvernance) et des objectifs communs. Ses membres partagent un sentiment d’appartenance (qu’ils basent sur des traditions et/ou une relation affective), un espace, des ressources, un langage (jargon) qui regroupent et délimitent la communauté.

« le jargon se rapproche de qui est décrit dans les collectifs de travail comme un langage opératif. […] Ce langage opératif a souvent un lexique et une grammaire plus restreints que le langage courant, il permet ainsi de minimiser le coût des interactions pour échanger des informations, et éventuellement se coordonner, contrôler la pertinence des actions de soi et des autres »[^1] (p.34)

L’intégration d’une personne dans la communauté se fait par cooptation, suite à sa participation. On intègre une personne selon la représentation que les membres de la communauté ont d’elle. Ainsi, chaque membre à une représentation de ses pairs. Les communautés de développeurs sont particulièrement sensibles à la culture des hackers [[20210323194802]] et cette représentation se base largement sur la compétence de la personne.

Compétence

Un participant doit être un minimum polyvalent pour pouvoir satisfaire les besoins épistémiques (apprendre, produire et échanger des connaissances au sein et en dehors du groupe) d’un projet. Il s’agit d’un code source, mais aussi d’une équipe reposant sur un réseau [[20210414220755]]. Flore Barcellini nous permet de dresser l’arborescence de compétences suivante :

  • technique : être un technicien expérimenté ;
    • conception : langages et méthodes de programmation ;
    • usage : méthodes et gestion de la charge de travail, évaluation du produit ;
  • discursif : être adaptée à l’interaction en groupe de co-conception ;
    • clarification (synchronisation cognitive) : définition des propriétés de l’objet en cours de conception ou de sa spécification ;
    • coordination (synchronisation opératoire) : évolution et le maintien dynamique d’un contexte de connaissances, d’une représentation de la situation.

Des documents comme la convention de développement [[20210520193136]] permettent de coordonner les personnes et leurs efforts.

« Le couplage renvoie à la nature et à l’intensité des interactions nécessaires pour pouvoir réaliser une tâche […] la conception collaborative est considérée comme une tâche fortement couplée »[^1] (p.46)

Conception

La conception consiste à « clarifier des spécifications »[^1] (p.50) et faire le suivi de la résolution pour maintenir de la cohérence dans les échanges. Pour résoudre formaliser des problèmes, on peut utiliser le modèle « QOC » pour « Questions Options Critères ». Le critère sert à la validation des options choisies pour une question donnée.

Activité

Espaces

Les membres de ces communautés se partagent le travail principalement au travers de trois espaces :

  • espace de discussion : (forums en ligne, listes de diffusion) pour échanger sur les contributions, s'entraider ;
  • espace de documentation  : (site web) pour expliquer le fonctionnement et permettre de localiser les ressources (modules, bibliothèques, debug) ;
  • espace d’implémentation (et téléchargement) : (VCS en ligne) stockage du code source et jalonnement des versions du code source et des opérations de maintenance.

Rôles

On distingue plusieurs strates dans la communauté d’un logiciel libre :

  1. les utilisateurs : utilisation (et retours) du logiciel ;
  2. les développeurs : maintenance avec un niveau de modification variable du code source ;
  3. les administrateurs : les core developers (membres de la core team) sont chargés de la conception générale du logiciel. Ce sont les architectes du logiciel [[20210602103346]].
flowchart

discussion
documentation
implémentation

utilisateurs -->|demande assistance| discussion
utilisateurs -->|installation, configuration| documentation
utilisateurs -->|téléchargement| implémentation

développeurs -->|spécification| discussion
développeurs -->|argumentation ?| documentation
développeurs -->|modification| implémentation

administrateurs -->|arbitrage| discussion
administrateurs -->|contrôle| documentation
administrateurs -->|contrôle| implémentation

Un rôle est un « phénomène émergeant de l’interaction […] tenu par un individu en fonction des activités qu’il met en œuvre »[^1] (p.54). Les participants peuvent se partager trois rôles distincts[^1] (p.57-59) :

  • médiateur (externe) : ils « traversent des frontières en transférant des informations et des pratiques ». Les frontières peuvent être organisationnelles ou techniques et en les dépassant il inclut les gens. [[20200716211301]]
  • leader (central) : « la position adoptée par une, ou plusieurs personnes, pour conduire un groupe ». Ça n'est pas un chef statutaire (manager), nommé par une institution, mais une personne « reconnu pour ses compétences par les autres membres du groupe ». Ils ont une autorité, mais aussi une influence.
  • expert (interne) : ce sont des « concepteurs d’exception », ils sont les plus habiles : ils mobilisent plus facilement leurs connaissances et disposent intuitivement un bon cadre de travail. Ainsi, ils accomplissent rapidement des tâches plus complexes. Ils ont tendance à devenir des leaders lors des « réunions de conception peu structurées ».

[^1]: Flore Barcellini, Conception de l’artefact, conception du collectif, 2018 [^2]: Martin Fowler, Making Architecture Matter, 2015

complexité

id :20210419170156
dernière édition :
type :processus

La complexité ne vient pas du nombre, de la « multiplicité des composants, ni même la diversité de leurs interrelations »[^1], mais de « l’imprévisibilité potentielle (non calculable a priori) des comportements de ce système »[^1].

« tant qu'ils sont pratiquement et exhaustivement dénombrables [les composants] on sera en présence d'un système compliqué (ou hypercompliqué) », ce qui est différent de complexe.

La complexité que l’on peut ressentir devant une carte vient de notre difficulté à la représenter, à nous projeter dans ce système de règles — bien qu’il soit simple.

[^1]: Serge Diebolt, Le petit lexique des termes de la complexité

complexité logicielle

id :20210313105330
dernière édition :
type :processus

[[20210419170156]] complexité

La complexité d’un logiciel peut venir de l’écriture du système, mais aussi de l’approche, des « contraintes [devenues] instables : les représentations du problème et des solutions évoluent en permanence durant le processus »[^3].

« C’est l’imprévisibilité potentielle (non calculable a priori) des comportements de ce système, liée en particulier à la récursivité qui affecte le fonctionnement de ses composants (‹ en fonctionnant ils se transforment ›), suscitant des phénomènes d’émergence certes intelligibles, mais non toujours prévisibles. »[^1]

[[20210221130228]] comportement logiciel

Décomposer

Devant un système possédant de nombreux composants (issus de la structure du logiciel [[20210221144451]]) on se retrouvera devant un système compliqué, (voire hypercompliqué [[20210114195936]]). Imaginons un logiciel composé de 200 programmes, contenant de 5 à 10 modules, avec pour chacun 10 à 30 structures de contrôle. Ce système est compliqué, mais nous avons aussi exprimé qu’il était décomposé, structuré. Ainsi, si les modules [[20210313113130]] sont suffisement stables (pas d’effet de bord [[20210109130837]] entre eux, pas d’imprevisiblité), un développeur pourra se concentrer sur quelques modules pour concevoir et inscrire ses structures de contrôle.

Sa charge cognitive est suffisamment maîtrisée pour qu’il ne commette peu ou pas d’erreurs de programmation et qu’il puisse travailler efficacement. En conservant une architecture de qualité, les développeurs travaillent mieux et plus vite. On perd du temps pour en gagner.

« le programme devient plus compréhensible car il peut être résumé en quelques fonctionnalités clés – celle de chaque module – sans qu’il y ait besoin de rentrer dans le détail. L’{ interface }, c’est-à-dire les façons d’accéder au module et à son action, en ‹ […] révèle le moins possible sur son fonctionnement interne › »[^4] (p.103)

Au contraire, si les structures de contrôle ne sont pas intégrées dans une architecture, à la fois souple et robuste, les développeurs vont devoir passer plus de temps à analyser un problème devenu complexe. Ils vont tenter en premanence de prédire un comportement qui n’est pas intuitif, qui est influencé par un trop grand nombre de paramètres.

Ainsi, un programme fait d’un millier de composants suffisamment stabilisés pour qu’on puisse travailler avec une dizaine est moins lourd qu’un programme de vingt composants à assumer intégralement.

Effet

Cet effort d’architecture prend du temps et de l’espace mémoire. La complexité du projet va affecter le travail de développement dans le temps pour décomposer, isoler, résoudre, mais aussi dans l’espace pour inscrire (coder) cet effort et pouvoir le reproduire (relecture du code, documentation).

Cette configuration de travail s’appelle l’adhocratie. C’est la « configuration d’organisation qui mobilise, dans un contexte d’environnements instables et complexes, des compétences pluridisciplinaires et transversales, pour mener à bien des missions précises »[^2]

[^1]: Serge Diebolt, Le petit lexique des termes de la complexité [^2]: Wikipédia, Adhocratie [^3]: Flore Barcellini, Conception de l’artefact, conception du collectif, 2008 [^4]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017

comportement logiciel

id :20210221130228
dernière édition :
type :processus
mots-clés :code

Les logiciels sont par nature récursifs. Ils sont capables de faire appel et de répéter leurs propres programmes automatiquement. L’imprévisibilité de ce comportement engendre de la complexité [[20210313105330]].

L’exécution d’un programme est diachronique (se prolonge, évolue ou se transforme dans le temps[^1]). Ce n’est pas un processus continu ou même linéaire. Des opérations sont interrompues ou bien sont exécutées en parallèle (tel que prescrit dans le flot de contrôle [[20200930183337]]). Elles peuvent être synchrones (se produisent en même temps, ne se succèdent pas[^1]), asynchrones (décalées dans le temps[^1]) (comme avec l’AJAX [[20200704100343]]).

On distingue la chaîne temporelle durant l’exécution du logiciel et la chaîne temporelle (asynchrone) des interactions de l’utilisateur. Ce dernier va lancer de nouvelles opérations imprévisibles dans le temps en cliquant, en remplissant des formulaires.

Avec la modélisation logicielle, [[20200508111132]], on tente d’effectuer une « traduction de l’évènement en document »[^2] (p.103). « les graphiques peuvent être utilisés pour présenter beaucoup plus d’informations sur l'état du programme (comme les variables et les structures de données actuelles) que ne le permettent les affichages purement textuels »[^3] (p.100) et c’est pourquoi ils sont particulièrement utiles dans la conception du comportement des programmes.

[^1]: Serge Diebolt, Le petit lexique des termes de la complexité, 2011 [^2]: Pascal Robert, Qu’est-ce qu’une technologie intellectuelle ?, 2000 [^3]: Brad Myers, Taxonomies of Visual Programming and Program Visualization, 1990

compréhension de l’API d’un logiciel

id :20210220101744
dernière édition :
type :processus
mots-clés :REVUE

De manière générale, l’entrée dans la documentation d’un logiciel se fait par un quickstart. Ce guide de « départ rapide » permet d’obtenir rapidement une premier résultat, une base visuelle à importer dans son environnement. Elle est souvent accompagnée d’exemples élaborés par les développeurs. Ils proposent des réutilisations prêtes à être modifiées et extraites pour les intégrer dans un nouveau projet. L’utilisateur peut ainsi ignorer l’interface de programmation (API) [[20200701221037]] du logiciel.

Dans un deuxième temps, l’utilisateur est amené à utiliser son API. Il s’agit des fonctions principales pour personnaliser (plus ou moins profondément) l’utilisation qu’il a du logiciel.

Dans un dernier temps, l’utilisateur est invité à comprendre l’API. Ainsi, il peut proposer des modifications/extensions du logiciel dans une continuité.

computationnel

id :20210502102039
dernière édition :
type :inscription
mots-clés :REVUE

« Computationnel » dérive de la computation qui désigne le calcul. Ainsi, l’agir de la machine informatique est essentiellement porté sur le calcul dans le domaine du

  • dénombrable, de ce qui peut être compté
  • discrétisable, de ce qui peut être combiné [[20210425141727]]

configuration

id :20210418085915
dernière édition :
type :processus
mots-clés :Samuel Goyet, Alan Turing, REVUE

La configuration détermine le comportement de la machine (le traitement et ce qui est traité) pour une exécution donnée.

« Si, à chaque étape [du calcul], le mouvement de la machine […] est complètement déterminé par la configuration, nous pouvons appeler cette machine une ‹ machine automatique › »[^1]

Il faut donc être capable de déterminer l’ensemble de leur configuration[^2] pour éviter des interventions humaines.

[^1]: Alan Turing, On Computable Numbers, with an Application to the Entscheidungsproblem, 1937 [^2]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017

contrat de lecture

id :20200724153738
dernière édition :
type :architecture
mots-clés :Jean-Michel Salaün, médiation, REVUE

C’est une théorie de Jean-Michel Salaün présentée dans son livre Vu, lu, su. Les architectes de l’information face au monopole du web (2012). Elle consiste en un triptyque de notions rendant compte d’un processus documentaire [[20200724173541]] complet.

graph TD

vu[Vu : compréhension]
su[Su : sociabilité]
lu[Lu : lisibilité]

vu ---|médiation| su
su ---|contexte| lu
lu ---|mise en forme| vu

« Un document est une trace [Vu] permettant d’interpréter [Lu] un événement passé [Su] à partir d’un contrat de lecture ».

C’est autant le rapport entre un lecteur et un auteur que celui des individus vis-à-vis de la société. Un document digne de ce nom doit en effet être annoncé à une population pour qu’elle puisse connaître son existence et décider d’y accéder.

convention de développement

id :20210520193136
dernière édition :
type :undefined

La convention de développement est la première documentation. Elle devrait être établie avant de commencer tout projet étant donné son impact sur tous les autres documents de la documentation logicielle [[20210118161126]]. Elle est également visée lors des revues de code [[20210109140006]] pour être appliquée, rappelée aux membres de l’équipe.

Dans la même logique des paradigmes de programmation [[20200530191442]], il y a différentes manières d’inscrire une même implémentation, de structurer la réponse technique au cahier des charges. Par la convention de développement, l’équipe émet différentes recommandations sur le travail des collaborateurs au sein de l’environnement de développement [[20201224152456]].

  • Définir le lexique utilisé dans le code source, indispensable lorsque l’on documente le code [[20210520191108]].
  • Définir les règles d’écriture du code et des paradigmes [[20200530191442]] en application.
  • Présentation de l’architecture du projet, entre les fichiers (nom de fichiers, extensions…) et en leur sein (encodage [[20200717141735]]).

Il existe de nombreux guides énumérant des règles syntaxiques [[20200930214400]] ou autres bonnes pratiques de la programmation et de ses logiciels environnants.

corps de texte balisé, sémantisé, interactif

id :20200606213253
dernière édition :
type :inscription
mots-clés :Marcello V.R

Con-texte

Avec l’écriture analogique, le sens des micro-structures du texte est suggéré par leur forme et leur contenu. On distingue un titre et une citation du corps de texte grâce à leur apparence particulière : grands caractères, exergue etc.. C’est leur attribuer une fonction de contexte, soit l’information qu’ils apportent au texte qui les entoure (sur le support) et plus généralement au document.

[[20200815163702]] paradigme de l’imprimé

Dans le cadre l’écriture numérique, cette seule qualité graphique est contextuellement insuffisante. Le sens de ces micro-structures doit être explicite pour les humains, mais aussi pour les machines : il ne s’agit pas simplement d’afficher un titre, il s’agit de faire comprendre à la machine que c’est un titre et en conséquence de l’utiliser pour des usages dépassant son simple affichage et pour aller vers l’interaction documentaire.

« Ainsi, au lieu de considérer une chaîne de caractères comme un titre ou comme le nom d’un auteur et de l’exprimer comme tel, le format n’associe à cette chaîne de caractères qu’un style visuel défini par un type de caractère, une taille, etc »[^3]

« [La micro-structure du texte] était faite sur papier avec des codes graphiques (italique, guillemets, etc.) qui, aujourd’hui, n’ont plus aucun sens. Continuer de les utiliser et confondre le balisage sémantique avec le balisage graphique est un signe de profonde incompréhension de la pratique d’écriture. »[^1]

Interprétation

Par exemple pour un paragraphe balisé sémantiquement comme titre :

  • style graphique (formel) : grands caractères gras ;
  • interaction documentaire (structurelle) : référencement dans le sommaire, mise en place d’une ancre et marquage dynamique du niveau.

Dans le cas du HTML, les micro-structures du texte sont délimitées par des balises interprétées par des logiciels d’analyse syntaxique. Les balises suivantes permettent de reconnaître un titre d’un certain niveau (sémantique) :

<h1>Titre 1</h1>
<h2>Titre 2</h2>
...
<h6>Titre 6</h6>

Il y a aussi eu dans l’histoire ce ce langage des balises (désormais obsolètes) formels et non signifiantes.

<center>
Ce texte sera centré.
 	<p>Ainsi que ce paragraphe.</p>
</center>

Plasticité

Selon l’algorithme d’interprétation du fichier contenant les bases, le paragraphe balisé titre va être affecté graphiquement, mais aussi interactivement et changer de logiciel pourra modifier tout ou partie de ces affectations. C’est la plasticité de l’écriture numérique [[20200606201922]] dont le contenu est abstrait et systématiquement (re)interprété.

Changer de logiciel c’est aussi changer les modalités d’écriture et notre perception du sens, de la forme du texte.

[[20200815162225]] interfaces d’écriture

Parsing

Dans les pratiques de l’écriture numérique [[20200606201922]], une citation n’est pas une série de lignes, mais une base de données avec différents champs : auteur, titre, éditeur, date, etc.. Procéder ainsi c’est permettre à un algorithme de rassembler les références autrement que par le parsing [[20200930214400]], soit un découpage du texte pour le réinterpréter, le sémantiser. C’est là une pratique incertaine, mais nécessaire quand un travail de recherche sur le sens et l’expression n’a pas été abouti.

« les dynamiques actuelles s’articulent autour de l’introduction d’écritures possédant une sémantique formelle, c’est-à-dire permettant des calculs interprétatifs explicites plutôt que des calculs implicites encapsulés dans les logiciels traitant les données issues des écritures des utilisateurs »[^2]

[[20200623180525]] base de données

[^1]: Marcello V.R., Les chercheurs en SHS s’avent-ils écrire ?, 2018 [^2]: Michael E.S. et Marcello V.R., Pratiques de l’édition numérique, 2014 [^3]: Marcello V.R, Nicolas Sauret, Antoine Fauchier, Margot Mellet, Écrire les SHS en environnement numérique. L’éditeur de texte Stylo, 2020

critères de qualité logicielle

id :20200522111759
dernière édition :
type :processus

Il faut s’attendre à ce que le projet évolue, à ce que des fonctionnalités soient modifiées, ajoutées, supprimées. Ainsi, il faut veiller à architecturer un logiciel de manière à obtenir un système combinatoire [[20210416144157]]. Pour cela on admet 16 critères.

Si l’architecture logicielle [[20210531145255]] n’est pas suffisante, on s’expose au risque de dégradation, ou entropie logicielle : déstabilisations répétées de la structure du logiciel que les corrections ne feront que repousser pour un retour toujours plus violent.

[[20210109130329]] dette technique

Critères

Source : Wikipédia, Architecture logicielle

  • interopérabilité extrinsèque exprime la capacité du logiciel à communiquer et à utiliser les ressources d'autres logiciels comme les documents créés par une certaine application.
  • interopérabilité intrinsèque exprime le degré de cohérence entre le fonctionnement des commandes et des modules à l'intérieur d'un système ou d'un logiciel.
  • portabilité exprime la possibilité de compiler le code source et/ou d'exécuter le logiciel sur des plates-formes (machines, systèmes d'exploitation, environnements) différentes.
  • compatibilité exprime la possibilité, pour un logiciel, de fonctionner correctement dans un environnement ancien (compatibilité descendante) ou plus récent (compatibilité ascendante).
  • validité exprime la conformité des fonctionnalités du logiciel avec celles décrites dans le cahier des charges.
  • vérifiabilité exprime la simplicité de vérification de la validité.
  • intégrité exprime la faculté du logiciel à protéger ses fonctions et ses données d'accès non autorisés.
  • fiabilité exprime la faculté du logiciel à gérer correctement ses propres erreurs de fonctionnement en cours d'exécution.
  • maintenabilité exprime la simplicité de correction et de modification du logiciel, et même, parfois, la possibilité de modification du logiciel en cours d'exécution.
  • réutilisabilité exprime la capacité de concevoir le logiciel avec des composants déjà conçus tout en permettant la réutilisation simple de ses propres composants pour le développement d'autres logiciels.
  • extensibilité exprime la possibilité d'étendre simplement les fonctionnalités d'un logiciel sans compromettre son intégrité et sa fiabilité.
  • efficacité exprime la capacité du logiciel à exploiter au mieux les ressources offertes par la ou les machines où le logiciel sera implanté.
  • autonomie exprime la capacité de contrôle de son exécution, de ses données et de ses communications.
  • transparence exprime la capacité pour un logiciel de masquer à l'utilisateur (humain ou machine) les détails inutiles à l'utilisation de ses fonctionnalités.
  • composabilité exprime la capacité pour un logiciel de combiner des informations provenant de sources différentes.
  • convivialité décrit la facilité d'apprentissage et d'utilisation du logiciel par les usagers.

CSS, Cascading Style Sheets

id :20200704152459
dernière édition :
type :programmation
mots-clés :technique

Le CSS (Cascading Style Sheets) est un langage permettant d’inscrire une feuille de style [[20210207120845]] utilisée pour décrire la présentation d’un document inscrit en HTML : apparence, position et réaction des objets qui le composent.

Sélection, règles et portée

Cascade

Selon le principe de cascade de ce langage, il faut retenir trois variables en CSS :

  • le niveau de spécificité des sélecteurs ;
  • la précision des règles ;
  • la portée des sélecteurs.

Ainsi, la spécificité des sélecteurs et des règles doivent être progressives : plus un sélecteur est lourd, spécifique, plus il doit être bas (déclaré tardivement) et peut affecter des règles précises.

Voici les différents sélecteurs, rangés selon leur poids. Il faut ajouter que l’opération de combinaison (ex : ul li.imp-elt[data-active="true"]) de ces sélecteurs ajoute du « poids » :

  1. étoile : *, portée maximale
  2. balise : p
  3. classe : .btn
  4. attributs : [data-type="circle"]
  5. identifiants : #main, portée unitaire

L’étoile, le :root, le html doivent être déclarés en premier et affecter des règles très générales (portant sur la totalité des éléments), tandis que les identifiants sont déclarés en dernier et portent des règles spécifiques à un élément :

* { box-sizing: border-box; }
…
#btn-volet-close {
    position: absolute;
    top: 4px;
}

Sélecteurs combinatoires

Les sélecteurs CSS (également utilisables en JavaScript avec les méthodes querySelector et querySelectorAll) permettent d’appréhender les relations de l’espace du DOM [[20200704160828]], entre les balises :

  • parent : vis-à-vis d’une balise qu’elle encapsule ;
  • enfant : se dit d’une balise encapsulée ;
  • frère : relation de balises adjacentes, encapsulées au même niveau.

Ci-dessous des exemples de code mettant en pratique ces relations :

p p { /* tous les p encapsulés dans (enfants de) un p */ }
p > p { /* tous les p enfants directs (sans encapuslation intermédiaire) d’un p */ }
p ~ p { /* tous les p adjacents (frère de) d’un p */ }
p + p { /* le premier p adjacent (frère de) d’un p */ }

/* pseudo-classes */
p:first-child { /* tous les p qui sont premiers éléments encapsulés (enfants) de leur parent */ }
p:last-child { /* tous les p qui sont derniers éléments encapsulés (enfants) de leur parent */ }
p:first-of-type { /* tous les p qui sont premiers éléments encapsulés (enfants) de ce type au sein de leur parent */ }
p:last-of-type { /* tous les p qui sont derniers éléments encapsulés (enfants) de ce type au sein de leur parent */ }
p:nth-child(odd) {}
p:nth-of-type(even) {}

SCSS

Le SCSS et le Less sont des langages de programmation transpilés [[20200907090751]] en CSS et permettent d’optimiser son inscription (avec la convention BEM [[20200715212459]]). Ils permettent de sélectionner les objets et d’affecter les règles via différents systèmes :

  • inclusions (@import : importe toutes les déclarations d’un fichier)
  • extensions (@extend : importe les règles affectées à un sélecteur)
  • tableaux
  • mixins (@mixin : génère des règles selon des paramètres d’entrée)
  • boucles (@each)
  • conditionnelles (@if, @else)

cycle de développement logiciel

id :20210306102014
dernière édition :
type :processus
mots-clés :projet

Le cycle de développement d’un logiciel couvre tout le long de sa « vie ». Il débute à l’instant où jaillit l’idée du logiciel et prend fin à l’abandon du projet (« mort » du logiciel). Entre temps, il couvre plusieurs périodes, et notamment celle de maintenance [[20210304181626]].

Chaque étape de ce cycle vient enrichir la documentation du logiciel [[20210118161126]] avec la description des expériences vécues et les décisions prises.

Il existe plusieurs diagrammes [[20210117165423]] pour représenter le cycle du développement d’un logiciel. On distingue les linéaires des itératifs.

Représentations linéaires

Elles proposent d’imaginer le développement d’un logiciel comme une succession d’étapes (jalons) sur une longue période.

Source : https://web.maths.unsw.edu.au/~lafaye/CCM/genie-logiciel/cycle-de-vie.htm

« en cascade »

De cette représentation on retient la nécessité de vérifier systématiquement le travail effectué. Il s’effectue en différentes étapes :

  1. spécifications : élicitation, description fonctionnelle (quoi et comment) de chaque artefact sur la base de besoins donnés ;
  2. conception générale : définition de l’environnement de développement [[20201224152456]] ;
  3. conception détaillée : architecture du logiciel ;
  4. programmation : implémentation, traduction des algorithmes dans un langage de programmation ;
  5. tests unitaires : test des modules du logiciel ;
  6. intégration : interfacer les modules développés ;
  7. qualification/recette : vérification de la conformité du logiciel par rapport aux spécifications ;
  8. mise en production : publication, mise en place du logiciel pour usage ;
  9. maintenance : amélioration/adaptation du logiciel à son environnement, ses usagers.

[[20210313113130]] modularité logicielle

« en V »

De cette représentation on retient le besoin d’anticiper les méthodes et critères de validation, d’évaluation, et ce dès la conception. Ainsi, on met en rapport les étapes suivantes issues du diagramme précédent :

  • 1 (spécifications) → 7 (qualification/recette)
  • 2 (conception générale) → 6 (intégration)
  • 3 (conception détaillée) → 5 (tests unitaires)

« en spirale »

De cette représentation, plus orientée vers la gestion de projet, on retient que la majorité du temps de travail de développement logiciel est dédié à la spécification (1) ; à l’échange avec l’usager pour l’expression de ses besoins et leur traduction technique. Cela passe par l’idéation et le développement d’une série de prototypes (artefacts intermédiaires) après lesquels on prendra le temps de réviser la conception générale (2). C’est dans un dernier élan que l’on enchaîne les autres étapes (3 → 9).

Représentations itératives

Elles permettent d’imaginer le travail sur une ou deux semaines plutôt que sur des mois. Les temps de spécification (1) et de qualification/recette (7) sont répétées sur des courtes périodes pour s’adapter à une navette rapide entre l’usager et l’équipe de développement selon les méthodes des projets agiles [[20200505212332]].

Extreme Programming

L’Extreme Programming est une méthode de gestion de projet logiciel poussant à l’extrême les idées du management de projet logiciel. Elle est particulièrement exigeante, à la fois humainement et techniquement. Les nerfs peuvent être mis à rude épreuve, et la cohésion, le respect des personnes et du travail bien fait sont essentiels. Les sprints sont rapides avec un échange très régulier entre le commendataire et les développeurs. On insiste sur les principes suivants :

  • assurer la qualité du code avec le pair programming et la revue de code [[20210109140006]] systématiques, quitte à devoir réécrire régulièrement des pans entiers de code source pour soigner les métaphore et conserver une conception simple pour compenser la dette technique [[20210109130329]] ;
  • besoin d’un retour régulier et assuré sur les fonctionnalités avec le développement piloté par test [[20210525213204]] et l’intégration systématique de fonctionnalités stables.

On insiste également sur la simplicité de l’implémentation en ne consacrant pas de temps à la mise en place de supports pour des fonctionnalités qui ne sont pas certaines. Une application simple et soignée pourra de toute manière évoluer avec fluidité.

dépendances logicielles

id :20200701083222
dernière édition :
type :architecture
mots-clés :technique, REVUE

[[20210313113130]] modularité logicielle

Les dépendances logicielles sont des modules externes à l’architecture du développeur ou de l’utilisateur. Le développeur les ajoute à son architecture pour ajouter des fonctionnalités à son programme sans avoir à les développer.

Architecture

L’enjeux du développeur est de garder un système souple et robuste, de décentraliser les efforts et les risques. Ainsi en recourant à des dépendances :

  • on évite de reproduire un élément qui a déjà été développé et vérifié ;
  • on évite les failles globales en isolant les composants : on risque des failles locales et/ou structurelles.

« tout l’enjeu n’est pas de nier nos dépendances mais de les choisir en connaissance de cause »[^1]

Les dépendances type bibliothèque de code [[20210417145938]] vont permettre d'ajouter des fonctionnalités tandis que les frameworks permettent de mettre en place une architecture pour les différents processus.

[[20200701222949]] framework ou cadriciel

Il existe aussi les middleware (aussi appelés « intergiciel »), soit des logiciels tiers permettant de traiter le flux d’information entre deux autres programmes. Ce sont des dépendances pouvant être remplacées par l’utilisateur.

Sentier de dépendances

Le risque est l’endettement technique [[20210109130329]] et ses nombreuses conséquences à différents endroits : architecture interne (code spaghetti, cohabitation de différentes architectures etc.) et externe (accessibilité, longueurs dans les chargements etc.).

[[20200709214912]] site web lowtech

L’informatique repose entièrement sur des dépendances à tel point que l’on parle de « couches logicielles », soit des dépendances basées sur des centaines de dépendances.

[[20200701221037]] API, interface de programmation

Temps

Une grande parties des codes source — et donc leur sous-couches, extensions et dépendances — sont gratuits, maintenus par des bénévoles. Le temps joue irrémédiablement sur les dépendances, version après version.

[[20200710204125]] logiciel libre et logiciel open source

Il est très important de connaître la version d’une dépendance dès qu’on l’intègre dans un environnement : la travail de développement étant asynchrone entre les deux projets, les fonctions, l’API peuvent rapidement changer. On parle de version mineures pour des corrections et majeures pour l’ajout de fonctionnalités tel qu’il peut entraîner des bugs dans un programme conçu sous une version antérieure.

[^1]: Arthur Perret, Pour un autre carnet de recherche numérique, 2019

dette technique

id :20210109130329
dernière édition :
type :architecture
mots-clés :projet

La dette technique est l’ensemble des coûts cachés et nécessaires dus à la complexité montante d’un projet logiciel suivant les choix de conception et de construction diminuant la rentabilité d’un logiciel[^1]. L’incohérence d’un programme, un code source trop complexe ou écrit maladroitement sont une perte de temps considérable. Cette perte d’énergie est due à l’entropie, la tendance naturelle d’un système à se désordonner.

La dette s’accumule à mesure que le développement progresse et le debugage est d’autant plus complexe. Naturellement, cette entropie va monter au fur et à mesure de la vie du logiciel et les coûts de maintenance [[20210304181626]] vont augmenter en conséquence. On parle d’« érosion de l’architecture logicielle »[^1]. Mais ça n’est pas une fatalité. Les ingénieurs sont là pour prévenir ces risques.

La dette technique est un choix et s’anticipe : on a pas le temps de concevoir une fonctionnalité avec suffisamment de finesse et on va donc décider d’augmenter la complexité du logiciel pour obtenir plus rapidement un résultat. Toutefois, avant de faire cela, il faut se demander si on a le temps de refactoriser [[20210109140006]] ce programme par la suite. Cela revient à se demander si l’on a le temps de développer le programme une seconde fois, pour rembourser la dette[^2].

Une dette technique non anticipée et subie est une pourriture logicielle[^2].

Chute exponentielle

Selon les lois décrites par Manny Lehman [[20210118144930]], un système informatique se doit d’évoluer en permanence pour s’adapter à son environnement, sinon il deviendra progressivement de moins en moins utile dans cet environnement. En effet, les attentes des utilisateurs augmentent. Comme le logiciel est modifié régulièrement, il devient plus en plus complexe (qualité moindre), à moins d’endiguer ce processus. On se rend compte bien tard en général que le projet est devenu trop important sans que les concepteurs et outils n’aient été adaptés.

La complexité d’un logiciel est exponentielle. Tout logiciel a une complexité essentielle qui le précède, une complexité obligatoire découlant du cahier des charges et enfin une complexité accidentelle[^2]. Cette dernière doit être réduite au maximum.

Ainsi, prévenir la dette technique ne doit pas paraître comme un investissement inutile, n’apportant aucune fonctionnalité supplémentaire, consommant inutilement du temps. Au contraire, il faut prendre sérieusement en compte ce risque qui peut conduire à de gros retards, voire à un échec du projet, un arrêt du développement.

Lutter contre l’entropie

Il faut sensibiliser et former les développeurs à anticiper la dette technique engendrée par leur travail. Un code mal écrit n’appelle pas autre chose que plus de code bâclé ; les développeurs pourraient ne pas faire d’effort. Au contraire, un code source excellent appelle à la vigilance. Par conséquent, il faut régulièrement faire une revue de code et ainsi assurer sa qualité, pointer et corriger les dégradations.

« La duplication de code étant l’un des facteurs accélérant le plus l’entropie logicielle », il faut régulièrement faire du refactoring [[20210109140006]] pour qu’il reste maintenable.

[^1]: Arnaud Lemaire, L’entropie logicielle, pourquoi la dette technique ne fait qu’augmenter ?, 2014 [^2]: Arnaud Lemaire, Dette Technique Et Entropie Logicielle, 2018

développement piloté par tests

id :20210525213204
dernière édition :
type :programmation
mots-clés :projet

Le développement piloté par tests (Test-Driven Development, TDD) est une méthode de développement selon laquelle on va diriger l’inscription du code du logiciel avec des tests automatiques. Cette technique méticuleuse permet de produire un code très robuste, puisque on construit pas à pas des tests unitaires (permettant de valider le fonctionnement de chaque module [[20210421151432]]) évitant ainsi la régression, la perte du support de certaines fonctionnalités dû à des effets de bord [[20210109130837]] préjudiciables et non surveillés.

Méthode

Généralement lorsque l’on implémente un algorithme, on inscrit le code de fonctionnement, puis (pas toujours…) le code de test lié à cette fonctionnalité. Le test découle du code ; le TDD inverse ce processus. On inscrit le code du test, puis le code qui va respecter le test. Cette deuxième méthode force le développeur à penser son test sur-mesure pour le code qui va devoir être validé. Ce même code qui aura été savamment conçu alors que l’on a longuement réfléchit aux erreurs qu’il pouvait causer.

Le code est ainsi inscrit en cinq étapes :

  1. Inscrire une série de tests en vérifiant que chacun échoue, faute de code valide
  2. Inscrire un code valide et le tester
  3. Refactoriser [[20210109140006]] le code pour qu’il soit simple et clair.

C’est une approche didactique que l’on retrouve dans la programmation lettrée [[20200914211839]]. Elle impose comme avec ce paradigme d’exprimer et justifier longuement les choix techniques. Ces choix sont matérialisés par des tests qui, commentés, informent le lecteur sur le format des données qui sont traitées.

diagramme

id :20210117165423
dernière édition :
type :modélisation
mots-clés :Yves Jeanneret

[[20200912130028]] visualisation

Un diagramme est une vue simplifiée [[20200708121357]] et géométrique d’une situation complexe. Il représente des parties d’un ensemble et impose une représentation partielle du phénomène à ses lecteurs. Ils projettent « un regard à la fois impérieux et impossible »[^1] sur une composition générée à partir d’une variété de données. Pour cela ils doivent accepter de se détacher du contexte et de se plonger dans une accumulation d’informations : « l’abstraction totale du regard et la concrétisation totale du réel »[^1].

Composition

Yves Jeanneret énumère[^1] ainsi les composants des diagrammes, soit des compositions « techno-sémiotique », comme « une forme de la raison graphique » [[20200625115033]] :

  • l’écriture (calibrage et alignement des signes) ;
  • la liste (mise en série des unités) ;
  • le tableau (sémantisation des deux dimensions du plan) ;
  • la carte (rabattement sur les deux dimensions d’un plan d’un phénomène multidimensionnel).

Dessin

Yves Jeanneret commente les cercles présents sur un diagramme en exemple :

« la complétude et l’indépendance sont exprimées par le cercle, forme universelle et atomiste »[^1]

Partialité

« tout en exposant un discours fait de visibilité et d’évidence, il [le diagramme] en masque l’histoire et la genèse »[^1]

« En devenant forme, le sens éloigne sa contingence ; il se vide, il s’appauvrit, l’histoire s’évapore, il ne reste plus que la lettre »[^2]

[^1]: Yves Jeanneret, Yves Chevalier, La physionomie des systèmes : diagrammes et représentation, 2009 [^2]: Roland Barthes, Mythologies, 1957

DigComp, évaluation des compétences numériques

id :20201002103853
dernière édition :
type :processus
mots-clés :projet, politique

En 2017, la Commission européenne présente un rapport sur l’apprentissage des outils numériques comme un processus en plusieurs étapes, passant par différents niveaux, et avec pour finalité l’insertion professionnelle, l’inclusion sociale et l’épanouissement personnel dans le milieu numérique.

Nous parlons d’aptitudes, de potentiels à activer des citoyens en vue de devenir capable de s’emparer d’un certain nombre de tâches, de développer des compétences, voire des méta-compétences (compétences permettant d’en développer de nouvelles) et ainsi de gérer la complexité [[20210419170156]] de ce domaine.

Compétences

Pour cela, le rapport défini 21 compétences numériques (réparties sur 5 catégories) que doivent développer les citoyens :

  • Littératie de l’information, des données et contenus numériques :
    • Navigation, recherche et filtrage ;
    • Évaluation ;
    • Gestion ;
  • Communication et collaboration :
    • Interaction ;
    • Partage ;
    • Engagement citoyen ;
    • Collaboration ;
    • Netiquette (e-réputation) ;
    • Gestion de l’identité ;
  • Création de contenus numériques :
    • Conception ;
    • Intégration et réélaboration ;
    • Droits d’auteur et licences ;
    • Programmation ;
  • Sécurité :
    • Connaissances des dispositifs ;
    • Protection des données personnelles et de la vie privée ;
    • Protection de la santé et du bien-être ;
    • Protection de l'environnement ;
  • Résolution de problèmes :
    • Résoudre les problèmes techniques ;
    • Identifier les besoins et les réponses au problèmes ;
    • Utiliser les technologies numériques de manière créative ;
    • Identifier les lacunes en matière de compétences numériques.

Niveaux

La rapport distingue une progression en 8 niveaux (réparties sur 5 sections) :

  • Fondamentaux :
    • Niveau 1 : J’ai besoin d’aide pour trouver les informations dont j’ai besoin, l’accès et pour adopter une stratégie de navigation :
      • Quoi : Tâches simples,
      • Comment : Avec guidage,
      • Qui : Une apprenante constante ;
    • Niveau 2 : J’ai parfois besoin d’aide pour trouver les informations dont j’ai besoin, l’accès et pour adopter une stratégie de navigation :
      • Quoi : Tâches simples,
      • Comment : En voie d’autonomie avec un guidage au besoin,
      • Qui : Une apprenante régulière ;
  • Intermédiaire :
    • Niveau 3 : Seule, j’ai trouvé une routine pour récupérer les informations dont j’ai besoin. Je peux les expliquer, leur accès et ma stratégie de navigation :
      • Quoi : Tâches quotidiennes et résolution de problèmes routiniers,
      • Comment : Autonome,
      • Qui : Elle comprend ce qu’elle fait ;
    • Niveau 4 : En fonction de mes besoins qui peuvent varier, je peux illustrer mes besoins en information et mon environnement numérique, en décrire l’accès et la stratégie de navigation adoptée :
      • Quoi : Tâches parfois nouvelles et résolution de problèmes nouveaux,
      • Comment : Autonome dans son domaine,
      • Qui : Elle comprend son domaine ;
  • Avancé :
    • Niveau 5 : En plus de guider les autres je peux rechercher, accéder et naviguer dans des environnements numériques nouveaux avec une stratégie de recherche personnelle :
      • Quoi : Variété de tâches et problèmes,
      • Comment : En guidant les autres,
      • Qui : Elle adapte ses connaissances ;
    • Niveau 6 : Je peux évaluer mes besoins et ceux des autres, adapter ma stratégie de recherche et finalement choisir les informations les plus appropriées de la récolte :
      • Quoi : Choix des meilleures tâches,
      • Comment : Adapter l’environnement d’autres utilisatrices dans un domaine complexe,
      • Qui : Elle évalue ;
  • Hautement spécialisé :
    • Niveau 7 : Hautement spécialisée, je peux conceptualiser et intégrer des solutions à des problèmes complexes liés à la récolte, le filtrage, l’accès et la navigation :
      • Quoi : Résolution de problèmes avec un nombre limité de solution,
      • Comment : Contribution et aide dans un cadre professionnel,
      • Qui : Elle est créative ;
    • Niveau 8 : Au plus haut niveau de spécialité, je peux résoudre des problèmes complexes car aux nombreux facteurs d’interaction et proposer un processus-solution :
      • Quoi : Résolution de problèmes complexes (nombreux facteurs),
      • Comment : Proposition de processus et méthodes dans un domaine,
      • Qui : Elle est créative ;

Pour accéder aux niveaux 7 et 8, il faut accepter de ses limiter à un domaine. En effet, la documentation de solutions à des problèmes (complexes, au niveau 8) demande de prendre en compte les contraintes d’un domaine particulier.

On remarque que la recherche d’information telle qu’elle est décrite pour les différents niveaux retombe toujours sur le même cycle :

  1. Définition de l’information recherchée
  2. Accès aux données et contenus
  3. Stratégie de navigation dans la base
  4. Filtrage des informations (acquis au niveau 6)
  5. Intégration de la solution (acquis au niveau 7)

digital labor

id :20200705114827
dernière édition :
type :processus
mots-clés :politique, Antonio Casili

[[20200705100544]] travail gratuit, économie du web de plateforme

Le travail sur le web, globalement collectif, a son pendant individuel. Il est récemment « devenu possible de penser les activités des internautes comme un travail individualisé et finalisé et de déployer un autre dispositif, celui du digital labor »[^1]

Déséquilibre

Les « Activités rémunérées et bénévoles cohabitent depuis les premiers pas du réseau » mais elles entretiennent depuis quelques années un « rapport de force […] transformé et inversé avec la massification du web et la prise du pouvoir des acteurs économiques dans les zones de haute visibilité du web »[^1]

Selon Dominique Cardon, cela tient à trois facteurs :

  • Déséquilibre marchand
  • Calcul de réputation
  • Micro-évaluation macrophage du travail

Déséquilibre marchand

Le reversement s’est fait quand les plateformes ont vu que les pages individuelles ne leur rapportaient pas suffisamment de visiteurs et qu’elles ont donc ambitionné de centraliser l’activité des internautes. Ainsi, sur Facebook il est possible de s’y enquérir

  • de l’actualité (international, sport, culture… );
  • de la vie de ses proches ;
  • de se divertir ;
  • de prolonger cette activité d’agrégation par le biais des messages privés.

Ainsi l’expérience web de nombreux internautes se limite à un ou deux réseaux. Ajoutons à leurs habitudes d’utilisation Instagram (racheté par Facebook), centré sur le partage de photo et vidéos, et des millions d’internautes se retrouvent, sinon entièrement, en grande partie dépendants des algorithmes de Facebook.

Dans la même idée, Amazon agrège des sites marchands, si bien qu’une très grande parties des achats du monde passent pas ses voies. Enfin, le plus grand : Google est notre second cerveau, rien que ça.

Calcul de réputation

« [L’économie de la réputation] ne cherche plus à étendre le tissu de dettes mutuelles[^2] entre internautes, mais à calculer une valeur qui les singularise et les distingue les uns des autres »[^1]

Les réseaux sociaux ont implanté des outils métriques de réputation (e-réputation, netiquette) favorisant ainsi la création de contenu, motivée par l’augmentation de ces chiffres à la face des autres internautes.

Micro-évaluation macrophage du travail

On estime le travail d’un développeur, d’un graphiste non pas sur le tout de son œuvre, cela serait trop compliqué (et dépend principalement des interfaces auxquelles nous avons accès), mais sur des unités, des mots-clés, une interface. Si le tout est supérieur à la sommes de ses particules, alors on comprend pourquoi le micro-travail est si malsain pour nos métiers et tend à le travestir.

Ainsi, le tout n’est plus que du ressort des agrégateurs qui gardent et nourrissent les intelligences artificielles qui leur permettent de mieux en mieux de considérer ce tout qu’ils revendent en particules sur des interfaces. Du côté des algorithmes, le travail s’affine, du côté des interfaces il se banalise en chiffres, graphiques, mots-clés.

Ce sont ces particules qui favorisent un travail continu car marchandable. Ce travail entraîne les algorithmes qui fournissent de meilleures particules, bouclant la boucle.

Exemple : Le graphiste produit des contenus qu’il affiche sur son Behance. Sur l’interface on affiche ses outils, le nombre de projet, de commentaires, de likes. Face à cette interface le graphiste souhaite davantage valoriser son travail et va donc ajouter des projets, s’investir socialement (travail cognitif) pour obtenir plus de commentaires, de likes. Du côté des algorithmes, on analyse les commentaires, positifs ou négatifs, on dresse un portrait du travailleur en « agrégeant/transsubstantisant »[^2] des contenus d’autres plateformes qu‘il fréquente (facile, il les a relié à sa page Behance pour faciliter son travail social) : est-ce qu’il est en relation avec d’autres graphistes ? Quelles sont leurs statistiques, leur profil ?

Où sont les interfaces qui affichent de tels résultats et qui peut y accéder ? Combien paieraient un recruteur pour embaucher par pur espionnage ?

Travail

Selon Antonio Casili, l’activité de créateur de contenus (interactions, tweet, commentaire, article de blog, partage de code etc.) est assimilable au travail (invisible et invisibilisé pourtant réel, non qualifié, gratuit, contrôlé et exploité) parce que « productrices de valeurs, faisant l’objet d’un quelconque encadrement contractuel et soumises à des métriques de performance » :

  • productrices de valeurs : contenus (photos, saisies) et même chaque connexion génère de la donnée exploitable, revendable[^4] (traces numériques) ;
  • encadrement contractuel : encadrement de la participation ;
  • métriques de performance : mesure et récompense des performances

[[20200509195652]] la donnée

Les internautes sont des « ‹ travailleurs qui s’ignorent ›, convaincus d’être plutôt des consommateurs, voire des bénéficiaires de services gratuits en ligne » et automatiques.

Entraînement des algorithmes

Bien souvent, c’est un humain qui se cache derrière un algorithme d’« intelligence artificielle ». Des humains entraînent directement les résultats de Google, de Siri, modérant les posts Facebook, saisissent que tel photo contient bien un visage, que telle image contient tel texte. Ce cadre professionnel précaire, déjà peu visible, cache une usine mondiale :

Le crowdsourcing est la production participative (des internautes) par sous-traitance (des métiers que l’on cite au-dessus). Les usagers de certaines plateformes le font également, à l’insu de leur plein gré.

  • lorsque l’on rempli un captcha sensé empêcher les machines d’accéder à la fonctionnalités, on entraîne parallèlement les algorithmes de reconnaissance de caractères de Google ;
  • lorsque on identifie un ami sur une photo Facebook, on entraîne un logiciel de reconnaissance facial en indiquant que tel visage correspond à telle page et aux métadonnées qui y sont liées ;
  • en utilisant les filtres Snapchat ou Instagram appliqués à un visage scanné ;
  • lorsque l’on signale un contenu qui nous dérange.

On exploite la capacité des internautes à émettre des contributions de « faible intensité et à faible expertise ». Dominique Cardon paraphrase Yochai Benkler pour expliciter ce que ce dernier appelle le « miracle de l’agrégation » :

« Son argument était entièrement bâti sur l’idée que, situés au-dessus des contributions individuelles, sérialisées et locales des internautes, des mécanismes humains ou automatiques permettaient de produire autre chose, une connaissance publique, sans lien de continuité avec les contributions unitaires, mais qui résultait de l’effet coordonné des contributions unitaires. Ce mécanisme d’agrégation/transsubstantiation fait de l’intelligence collective un bien qui est plus que la somme des parties : les foules peuvent prendre des décisions ‹ sages › à partir d’opinions idiotes »[^1]

Les algorithmes d’« intelligence artificielle » sont ou ont été sur-entraînées par des êtres humains. Non seulement ces services ont l’air automatiques, mais en plus les gens qui les entraînent ne se reconnaissent pas ou ne sont reconnus comme des travailleurs (des entraîneurs).

Travail cognitif

D’où l’expression « cognitariat » (le nouveau prolétariat), soit le domaine des emplois non qualifiés, précaires, peu rémunéré et centré sur le cognitif : dialogue, coopération, échange. Pour la version web, on parle de « cybertariat » :

ServiceActionBiens
UberConduire quelqu’unvoiture
Deliveroo, Uber Eats, Just Eativrer quelqu’unvélo
AirbnbHéberger quelqu’unappartement
TaskRabbitRendre un service au domicile de quelqu’un
BeMyEyePrendre la photo d’un produit dans un magasin
Facebook, GoogleInterpréter un contenuordinateur

On dresse le tableau suivant dans le cas de Deliverroo (et ses concurents). La même application vise plusieurs cibles, pour capturer certaines données et les revendre à des acheteurs. Non seulement le consommateur paie le service, mais il entraîne également d’autres conséquences économiques. Ainsi, les livreurs entraînent à leur insu des véhicules autonomes.

cibledonnées capturéesacheteur
consommateurEnregistrer ce que les gens mangentsindustrie agroalimentaire
restaurateurÉvaluer la perfomance (en combien de temps ? Pour quelle note ?)catalogues touristiques
livreurPar quelles voies et comment (vitesse, gestion obstacles) ?fabriquants de véhicules autonomes

Sous couvert de sharing economy (service d’un particulier à un autre, mis en relation par les plateformes citées), les micro-travailleurs ne sont pas protégés, sont sans statut et mettent en jeu leurs propres biens :

« les entreprises propriétaires des applications mobiles ont dans le passé voulu se dégager de leurs obligations, en insistant sur le fait que leur activité se borne à l’intermédiation algorithmique. Une fois effectuée la mise en relation, leur responsabilité s’arrêterait »[^3]

Ce premier travail en cache souvent un autre, plus discret, plus pervers. Quand un chauffeur Uber ou Deliveroo se déplace, il utilise l’application de la plateforme qui profite du voyage pour enregistrer des données sur le déplacement, le croisement avec d’autres chauffeurs. Ces données sont ensuite utilisées pour développer les applications dédiées au véhicules autonome : à terme, il remplaceront les chauffeurs qui ont entraînés leur propre succession, automatisée. D’un métier précaire ils iront… vers pas de métier.

« Le cœur de métier de ces nouvelles entreprises est l’exploitation algorithmique des données de mobilité et de consommation de leurs utilisateurs »[^3]

Solution

Il ne serait pas éthique d’accepter une rémunération pour nos activités en ligne « face à l’impossibilité de protéger nos données personnelles » (p. 37). Ce serait créer un nouveau « marché répugnant » des données personnelles (à classer non loin du commerce d’organes). Ce serait « privatiser la privacy »[^3].

« Quoique personnelles, ces données, ces productions digitales, ne sont pas du ressort de la propriété privée, mais le produit d’un commun, d’une collectivité. Par conséquent, la rémunération devrait chercher à redonner aux commons ce qui a été extrait des commons. »[^3]

Antonio Casili a plutôt l’idée « d’un revenu de base », de « mesures redistributives ».

« Ce n’est pas parce qu’une entreprise est installée dans un certain pays qu’il faut l’imposer, mais parce qu’il y a des millions de citoyens qui réalisent un ‹ travail invisible › et gratuit pour cette entreprise »[^3]

[^1]: Dominique Cardon, Internet par gros temps, 2015 [^2]: voir [[20200705112816]] production de contenu web [^3]: Antonio Casili, Qu’est ce que le digital Labor : Travail, technologies et conflictualités, 2015 [^4]: voir [[20200625095558]] économie documentaire des réseaux sociaux

discret / continu

id :20210405121526
dernière édition :
type :processus

Dans la théorie des ensembles, on distingue les ensembles discrets et ensembles continus. Il s’agit d’un tout dont les propriétés de liaison entre les parties varient.

Discret

Cet ensemble est une suite d’items discontinue. Ils sont élémentaires, séparés les uns des autres et constituent des étapes intermédiaires dans la suite.

Par exemple, l’alphabet est un ensemble discret : A → B, C → D.

C’est une méthode pour isoler des éléments d’un système complexe et ainsi rendre calculables (par une machine) ce domaine.

[[20200508093223]] travailler la complexité

Continu

Les items remarqués de cet ensemble sont séparés par une infinité d’autres items. Par exemple, l’ensemble des nombres réels (nombres avec décimal) est un ensemble continu : 1,1 ; 1,12 ; 1,13 ; 1,131 ; 1,2 ; 1,21.

La liaison s’étend entre des points infiniment loin les uns des autres.

discrétisation, granularité

id :20210425141727
dernière édition :
type :programmation
mots-clés :Samuel Goyet

[[20210405121526]] discret / continu

Plus un modèle [[20200526222401]] est granuleux (composé de nombreux éléments), discrétisé, plus les combinaisons [[20210416144157]] (les possibles) sont nombreux, pour une variété d’usages (il est moins standard et plus personnalisable). On peut alors généraliser le modèle ou bien observer ses nombreux éléments particuliers.

« les API web, en proposant une discrétisation maximale des formes qu’elles permettent de produire, en maximisent également les manipulations possibles […] plus une forme est discrétisée, plus elle est manipulable et plus elle va pouvoir circuler »[^1] (p.321)

La discrétisation d’une forme « a des conséquences sur les modes de représentation de cette forme et sur la littératie nécessaire pour la produire ». Discrétiser un modèle rend sont approche plus complexe [[20210419170156]], son inscription plus longue.

[^1]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017

document

id :20200708172120
dernière édition :
type :inscription
mots-clés :Bruno Bachimont, Arthur Perret, Jean-Michel Salaün, médiation

La notion de document « dont nous avons hérité au tournant des années 2000 a été façonnée par plusieurs décennies de tradition théorique ». Elle est « avant tout fonctionnelle, elle nous permet d’appréhender la trace écrite comme une information enregistrée en vue de sa transmission »[^2]

« un document est une inscription pourvue des trois propriétés suivantes : [1] elle est délimitée dans le temps et dans l’espace, [2] elle est intentionnelle et [3] elle est publiée. La délimitation dans l’espace permet de déterminer quelles sont les parties constituant le document. La délimitation dans le temps permet de déterminer un ordre canonique de parcours pour la consultation ou la lecture : elle fixe où commence et où s’arrête la lecture du document. La délimitation dans le temps et l’espace fixe donc la mise en ordre spatiale (la question de repérer les éléments constitutifs est décidable) et la mise en ordre temporelle (la question d’ordonner les éléments constitutifs est décidable). L’intentionnalité documentaire peut être a priori ou a posteriori. La publication permet d’établir une version de référence. »[^1]

Le document est le sujet de problématiques en tant que :

  • « une forme physique perceptible dont la matérialité physique [ou sa numérisation] se prête à l’instrumentation technique »[^3] ;
  • un signe avec ses problématiques de « manipulation, lecture et interprétation du contenu » ;
  • un medium, « objet social, objet de négociation et de transaction culturelle et économique », il est vecteur d’échange

« C’est parce qu’il prend une place dans une système documentaire que l’entité devient un document »[^4]

[[20200724153738]] processus documentaire

Structure

Un document est une organisation d’informations dans un espace (ou même dans le temps, pour un document audiovisuel) de présentation défini dans la mesure où la structure du document va aussi contrôler sa lecture (ordre, rythme) et définir ses modalités d’interaction (lecture, annotation). Ainsi un document est un environnement dont la structure est explicite (table des matières, niveaux de titre) quand le contrôle et l’interaction sont suggérés.

« Le livre sert non seulement à énoncer des théories, mais à les construire ; non seulement à traduire une pensée, mais à la former. »[^6]

Variété

« La définition la plus générale qu’on puisse donne du Livre et du Document est celle-ci : un support d’une certaine matière et dimension, éventuellement d’un certain pliage ou enroulement sur lequel sont portés des signes représentatifs de certaines données intellectuelles. […] Le plus petit document c’est une inscription. »[^6]

Chez Otlet, le document est avant tout un support pour des inscriptions.

Selon la théorie de Bruno Bachimont :

  • Certains document permettent à la fois de conserver de l’information et de la diffuser ; c’est le cas avec les livres ou les affiches.
  • Certains documents (ineffables) ne sont qu’un encodage de l’information dont la diffusion se fait par un intermédiaire ; c’est le cas avec les VHS, CD.
  • Parmi cette seconde variété, le document numérique a une place particulière car il peut changer de forme à volonté (via un programme qui permettra de modifier la vue du document) selon l’appareil de diffusion : sous forme de feuille papier via une imprimante ou de page web via un navigateur. D’un même encodage de l’information on peut aboutir à différentes formes canoniques du document.

Valeurs

Liste des valeurs du document :

  • pédagogique : le document permet d’apprendre par son contenu. D’après l’étymologie : documentum, le modèle, l’exemple est dérivé sur latin docere, montrer, instruire)
  • juridique : question du droit, le document comme preuve, le document atteste, le document ne doit donc pas être falsifié.
  • historique : le document se garde, se mémorise et s’il passe l’épreuve du temps, il peut devenir un monument selon la maxime de Michel Foucault.

Numérique

Le document numérique est un document « orthothétique »[^3] (néologisme formé de orthotès, l’exactitude et thésis, la position) dans le sens où il reproduit (et objective) la structure sur un support immatériel. La document numérique est dans la continuité du document matériel.

Cependant, « le numérique marque une rupture dans la manière de concevoir et d’élaborer le contenu »[^3] : objectiver la structure du document (création de modèles, de fonctions et d’autres matériaux instanciables) nécessite d’abstraire le contenu, « donnant une contrepartie matérielle et manipulable »[^3] au document numérique.

[[20200606201922]] qualités de l'écriture numérique

C’est ainsi qu’il devient possible de créer des protodocuments[^4], soit des copies de l’œuvre originale, le contenu abstrait produit par l’auteur. Cette souplesse pose la question d’une philologie de l’écriture numérique, « art d’établir des versions de référence[^5] ».

Valeur de processus

Ainsi le document numérique est instable, falsifiable, souvent stocké dans un labyrinthe informationnel. On lui trouve d’autres qualités liés à sa décentralisation :

  • sa valeur juridique ne dépend plus du document comme support, mais comme processus ayant permis sa création ;
  • la valeur de son contenu ne dépend plus seulement de ses auteurs attribués, mais de sa processualité éditoriale.

[[20200722215106]] processualité éditoriale

[^1]: Bruno Bachimont, Ingénierie des connaissances et des contenus, 2007 [^2]: Arthur Perret, Matière à pensées : outils d’édition et médiation de la créativité, 2018 [^3]: Stéphane Crozat et Bruno Bachimont, Réinterroger les structures documentaires : de la numérisation à l’informatisation, 2004 [^4]: Jean-Michel Salaün, Vu, lu, su. Les architectes de l’information face au monopole du web, 2012 [^5]: Bruno Bachimont, Rhétorique de l’intelligibilité, vers des humanités du numérique, 2020 [^6]: Paul Otlet, Traité de documentation, 1934

documentarisation

id :20210408172535
dernière édition :
type :processus
mots-clés :Manuel Zacklad, médiation, technique

La documentarisation est un traitement documentaire permettant

  • de singulariser un document pour pouvoir le retrouver dans une base (documentarisation externe)
  • « mettre en cohérence et à articuler les différents fragments qui constituent le ‹ texte › »[^1] (documentarisation interne)

Un document avec une forte granularité [[20210425141727]] est un document pourvu de nombreux fragments.

« La documentarisation est une activité d’annotation au sens élargi que nous donnons à ce terme, susceptible de remplir trois fonctions complémentaires, attentionnelle, associative, contributive. Elle peut recourir à divers procédés allant de la sélection de propriétés typographiques visant à mettre en relief certaines parties du texte, annotations attentionnelles, à l’utilisation de langages d’organisation des connaissances systématisées contribuant à la classification, à l’indexation, à la contextualisation temporelle ou sociale du document, annotations associatives et contributives »[^1]

La documentarisation permet de retrouver un document dans une base, mais peut aussi permettre de lui donner sa fonction (ex : dater un document cessé être une preuve, sans quoi il serait invalide).

« La documentarisation correspond à des opérations d’inscription particulières qui visent à permettre la réutilisation du support dans le cadre de transactions ultérieures de la personne avec elle-même ou avec d’autres personnes mémorisation et coordination »[^1]

[^1]: Manuel Zacklad, Genres de dispositifs de médiation numérique et régimes de documentalité, 2015

documentation logicielle

id :20210118161126
dernière édition :
type :processus
mots-clés :projet

La documentation intègre le domaine de l’environnement de développement [[20201224152456]] en tant que dossier de support pour l’ouvrage. Sans documentation, un logiciel ne peut être utilisé, maintenu, n’a pas d’histoire et donc aucun avenir ; il n’existe que dans l’instant d’utilisation ou de maintenance [[20210304181626]].

Domaine

La documentation opère une médiation [[20200716211301]] et dispose des informations pour

  • l’utilisation du logiciel → documentation d’utilisation
  • le développement du logiciel → documentation de développement

via différents dispositifs de

  • navigation : La navigation est différente de la documentation d’utilisation à la documentation de développement car le niveau d’abstraction diffère, ainsi que l’usage. L’utilisateur ne recours à la documentation que lorsqu’il en a besoin (read the fucking manual), pour un problème précis. Hors, il n’est pas capable (et ça n’est pas son intentions) de saisir suffisamment d’informations pour être autonome dans la résolution de son problème. On lui apport une lecture dirigée. Sa démarche consiste à énoncer (requête) son problème et à suivre une démarche préétablie pour le résoudre. Le développeur va quant à lui faire reposer tout son usage sur la documentation. Il est ainsi obligé de l’intégrer en finesse et de se l’approprier.
  • coordination : Utilisateurs comme développeurs sont confrontés aux interfaces et aux fonctionnalités auxquelles elles donnent accès. Les premiers utilisent les seconds implémentent ces fonctionnalités.
  • évaluation : Par rapport aux fonctionnalités, les utilisateurs cherchent à savoir si elles sont adaptées à leur usage et les développeurs si elles sont correctement implémentées.

Tableau de synthèse :

publicnavigationcoordinationévaluation
doc. utilisationrecherche de procédures linéraires en réponse à des problèmes donnésaccès aux fonctionnalitésintérêt et utilisabilité du logiciel
doc. développementrecherche réticulaire pour obtenir plusieurs angles de réflexion pour une même problématiquedéveloppement des fonctionnalitésréflexions sur l'architecture et le test des fonctionnalités

Il existe une certaine porosité entre ces deux documentations dans la mesure où l’index de l’API [[20210524081927]] occupe une place particulière puisqu’il est à la fois documentation d’utilisation (il permet aux utilisateurs expérimentés d’utiliser le logiciel) et à la fois documentation de développement (pour la maintenance [[20210304181626]]). Cette porosité survient quand le code est l’interface d’utilisation de tout ou partie du logiciel. C’est le cas avec les logiciels supportant les scripts [[20210408103043]].

Miroir de l’architecture

L’architecture du logiciel [[20210531145255]] est déterminante dans le processus de documentation. Qu’elle soit destinée aux utilisateurs ou au développeurs, elle change la manière dont les problématiques sont abordées, résolues et évaluées (navigation, coordination et évaluation). Aussi, s’il est important de modulariser son code [[20210313113130]], il est aussi important de modulariser sa documentation, de structurer notre approche des différents problèmes.

Ne pas mettre à jour la documentation au fur et à mesure du développement mène à une décorrélation entre les explications (aux utilisateurs et développeurs) et les évolutions du programme et impacte ainsi lourdement son utilisabilité et sa maintenance [[20210304181626]]. Ainsi, la documentation devient un projet parallèle au logiciel, intégré à son environnement. Le code source change (ajout, modification) et la documentation évolue en parallèle avec une relecture régulière pour garder de la cohésion entre les informations.

Information

Pour constituer la documentation, il faut sélectionner les informations les plus pertinentes et leur contexte de présentation, faire de la curation. Ces contenus doivent être reliés par des liens hypertexte [[20200622164608]], classer grâce à une taxonomie, pour permettre à l’utilisateur d’explorer un réseau de connaissance plutôt qu’une liste d’éventuelles solutions.

Variété documentaire

« L’interdépendance entre les documents est grande : il existe des relations entre les différentes parties de la documentation et entre la documentation et le code source. »[^2] (p.8)

Pour embrasser la variété des problèmes rencontrés par les utilisateurs et les développeurs dans leur rapport au logiciel, mais aussi s’adapter à leurs connaissances et leurs capacités heuristiques, on dote d’une part la documentation d’utilisation et d’autre part la documentation de développement d’une variété de documents au contenu riche :

Documentation d’utilisation[^1]

documentsujetusage
manuelConcepts, notions permettant de représenter l'usage.utilisation
tutorielPrésentation d'un problème de départ suivie d'une série d'instructions pour le résoudre.échec, panne
FAQRéponses rapides à des questions évidentes, récurrentesévaluation
encyclopédieExplications sur le fonctionnementpasserelle

Documentation de développement

documentsujetusage
cahier des chargesSpécifications des fonctionnalitésadministration
convention de développement [[20210520193136]]Jargon, paradigmes, outils destinés au développementmaintenance [[20210304181626]]
API (index & schémas) [[20210524081927]]Architecture, structures et flux de contrôlepasserelle

Les passerelles permettent aux utilisateurs expérimentés en informatique de devenir réutilisateur de passer de l’autre côté. L’encyclopédie et l’index de l’API [[20210524081927]] peuvent facilement amener un utilisateur savant à intégrer des notions de l’architecture logicielle [[20210531145255]].

On ne peut se contenter de texte lorsque l’on parle d’architecture [[20210531145255]]. Il faut également utiliser des diagrammes [[20210117165423]].

« Une nécessité dans ce cadre est de pouvoir accéder au code source et à la documentation via une description sémantique de leur contenu. L’environnement doit être capable de gérer en plus du contenu textuel, voire graphique, des composants logiciels, leur contenu sémantique sous forme de termes d’indexation de structure plus ou moins complexe (mots-clés, graphes conceptuels, etc.) »[^2] (p.5)

[^1]: Matthias Dugué, Revoir la documentation, de zéro, 2019 [^2]: Sahar Jarwah, Un modèle générique pour la gestion des informations complexes et dynamiques, 1992

documenter le code

id :20210520191108
dernière édition :
type :inscription

Le code source d’un programme constitue sa documentation ultime. Le code source est une documentation [[20210118161126]] par lui-même. C’est la dernière interface de lecture/écriture (et non de contrôle) du logiciel. Bien que l’on puisse utiliser les outils de la raison graphique (liste, tableau, formule) le contexte de lecture est presque toujours un éditeur de texte avec les difficultés de lecture que cela implique (distractions, longueur de ligne, affichage des commentaires assombris…).

Cette forme de documentation a l’avantage d’accompagner directement la matériel technico-sémantique (fonctionnel par son sens dans un certain contexte). Il est même le support de cette élaboration dans la logique de la programmation lettrée [[20200914211839]]. Il ne faut toutefois pas confondre l’explication des instructions et l’explication du fonctionnement du programme sous peine d’ensourcellement [[20210502094415]].

Lexique

La documentation du code est un processus continu. Les rédacteurs n’annotent pas en permanence leur code, mais ils font des choix d’écriture. Le nom d’une variable [[20210427194405]] est déterminant dans la documentation du code. L’espace de nom [[20200622101202]] dans l’extrait de code suivant est particulièrement explicite ne serait-ce que par le lexique employé. La fonction authentificate nécessiterait d’avantage de précision tandis que ban_user_ip se suffit à elle-même ; on trouvera plus de précisions via la classe Banishment.

class Admin extends User {
    public $name;
    public $mail;
    private $password;

    public function authentificate() {…}

    public function ban_user_ip($user_ip) {
        $ban = new Banishment($user_ip);
        $ban->set_period(1, 'year');
        $ban->apply();
    }
}

Ce lexique pourra ensuite donner une taxonomie, laquelle pourra être réutiliser dans la documentation du logiciel ou entre les développeurs lorsqu’ils évoquent certains contextes de l’espace de nom [[20200622101202]].

Annotation

Les commentaires [[20201220084534]] permettent de commenter le code source. Des logiciels comme JSDoc ou phpDocumentor permettent de générer un index de l’API (fonctions [[20201224102746]] et classes) après que le programmeur est formaté ses blocs de commentaire.

Le bloc de commentaire (en-tête) suivant indique l’usage de la fonction, sa nature (un constructeur) nécessitant les paramètres title, authors et nbPage, respectivement une chaîne de caractère, un tableau et un nombre entier. Enfin, cette fonction renvoie un booléen. On indique également une tâche restant à faire et l’auteur/responsable de l’implémentation.

/**
 * Represents a book.
 * @constructor
 * @param {string} title - The title of the book.
 * @param {array} authors - The author of the book.
 * @param {int} nbPage - Number of page.
 * @return {bool} True if any error
 * @todo Add default values
 * @author Guillaume Brioudes <me@myllaume.fr>
 */
function Book(title, authors, nbPage) {…}

Il est ainsi possible de documenter exhaustivement une API ou tout autre programme qui nécessite pour le reutilisateur une compréhension complète. Toutefois ce genre de documentation ne rend pas compte de la structure globale du programme, les unités sont généralement peu détaillés et le tout n’est que texte, sans représentation graphique. Il faut donc la compléter.

DOM, document objet model

id :20200704160828
dernière édition :
type :architecture

Le DOM (Document Object Model) est une API [[20200701221037]] présentée sous la forme d’une arborescence d’objets. Ils prennent la forme de balises telles qu’on les écrits en HTML, avec leurs attributs. Toutefois le DOM comprend aussi les affectations CSS [[20200704152459]] et JavaScript [[20200704153246]], ce dernier permettant d’actualiser dynamiquement le DOM.

Indentation

Chaque balise est un potentiel nœud, une potentielle parente d’autres balises dans l’arborescence.

Le nœud est une articulation de la page et il est possible d’affecter des balises en masse en ciblant leur parent (fonction récursive).

<ul class="list">
    <li class="list__item">Lorem ipsum</li>
    <li class="list__item">Lorem ipsum</li>
</ul>
<button id="cible">Ajouter élément</button>

Objets

Le DOM est une structure abstraite permettant aux développeur·euse·s d’ancrer des attributs et fonctions sur les éléments qui composent une page web.

Chaque objet tel qu’il est délimité par les balises (entre chevrons) a ses propres attributs (comme l’attribut class visible ci-dessus) et méthodes qu’il est possible de leur affecter en CSS ou en JavaScript. Cette notion de classe renvoie directement aux principes de la programmation orientée objet [[20200522122316]].

Pour se faire il est nécessaire de sélectionner (comme ci-dessus avec le bouton, via son attribut id) l’objet avec de pouvoir le manipuler. Toujours dans une logique orientée objet, la convention BEM [[20200715212459]] permet d’appréhender de manière structurée le DOM.

La méthode typique affectée à un objet du DOM est l’ajout d’événement (addEventListener), comme ci-dessous :

var button = document.querySelector('#cible')
	.addEventListener('click', fonction);

Shadow DOM

Le Shadow DOM (aussi appelé Virtual DOM, DOM fantôme) est une structure cachée du DOM permettant d’intégrer dans les pages web des arborescence d’objets indépendantes. Les objets y sont soustraits aux règles globales du DOM comme les sélecteurs CSS ou JavaScript. Ainsi il est possible de modulariser [[20210421151432]] la page web, d’isoler des composants.

Cet environnement peut être manipulé en JavaScript. Il sert notamment aux navigateurs pour mettre en place les lecteurs vidéos à l’insertion de la balise <video>. Ils sont composés de nombreux éléments, mais intouchables nativement, par les affectations globales.

domaine des humanités numériques

id :20200725085518
dernière édition :
type :undefined
mots-clés :Olivier Le Deuff, Éric Guichard

Les humanités numériques (aussi appelées humanités digitales) sont un champ de recherche scientifique transdisciplinaire. Il vient en aide et se nourrit d’autres disciplines par des pratiques croisées de chercheurs, souvent issus des sciences humaines et sociales (SHS) ou même des arts.

Il s’agit globalement d’extraire, traiter (analyser, encoder, modéliser… ) et partager de la connaissance. C’est aussi un champ de recherche sur la culture numérique.

Humanités digitales

Olivier Le Deuff préfère l’appellation « humanités digitales » qui n’est pas un anglicisme, mais un latinisme. Digital vient de digit, le doigt, celui qui permet de compter (on retrouve l’idée de numérique, d’itération, de calculabilité des données), de pointé (appelé l’index, référence d’autant plus frappante).

Cette expression fait à merveille le lien entre les techniques du chiffre (algorithmique) et de la lettre (documentation). Ainsi les humanités digitales seraient « une poétique de la main tendue entre la lettre et le chiffre, entre le savoir et le faire, entre l’homme et la technique »[^1]. Il se garde volontairement d’utiliser l’expression « homme-machine », trop spécifique dans ce contexte vu l’ampleur des problématiques soulevées par les humanités numériques.

« Quelle que soit notre définition de la culture, nous pouvons nous accorder sur le fait qu’elle est liée à l’écriture, sinon grandement portée par elle. Dans un registre littéraire, la culture est faite de romans, de commentaires de ces œuvres, de relectures, etc. L’écriture conditionne aussi les mathématiques, la physique, le fonctionnement, le mode d’emploi de nos machines, de nos logiciels, les enregistrements (films, musique, etc.), tout en évoluant avec ces inventions et avec l’usage que nous faisons d’elle. »[^2]

Pratiques

La pratiques du champ des humanités numériques est divisées en trois sous-disciplines :

  • digital humanities : croisement entres les approches subjectives (aesthesis) des humanités (SHS, arts) et les approches objectives des sciences exactes (mathesis universalis) afin de dépasser cette séparation ;
  • digital methods : études des logiciels, des applications et interfaces de programmation (API) ;
  • cultural studies : traitement massif de données en vue de les valoriser (sémantisation, diffusion).

[[20200509195652]] la donnée [[20200623180525]] base de données

Ces pratiques portent sur des corpus de texte, de (base de) données. Cela consiste autant en une étude de l'humain par le numérique, qu’une étude du numérique par les humanités. Il pose en effet de nombreuses problématiques.

[[20200801210302]] espace numérique

Limites

Le fait d’extraire une étude en science humaine de son champ ou une œuvre d’art de son support les dénaturent. Le numérique place l’œuvre en dehors de l’espace et du temps ce qui nous fait perdre des notions fondamentales interactives entre une personne et un objet. Une visualisation de données n’est pas un « medium de véracité », mais une « forme de sensibilité » interchangeable.

Les humanités numériques sont comme une béquille numérique pour des disciplines qui se sont peu ouvertes aux usages numériques parmi les SHS. Pour autant, de nombreuses disciplines scientifiques, du côté des lettres comme du côté des chiffre, se sont appropriées ces outils. Aussi, ces deux bords que les humanités numériques réconcilient dans leurs pratiques n’ont pas attendu la transdiscipline pour travailler en interdisiplinaire. Des économistes s’emparent largement des théories philosophiques.

Attention à garder un œil critique sur le numérique, sur le modèle économique qu’il impose au monde, mais aussi au microcosme de la recherche.

[^1]: Olivier Le Deuff, Le temps de humanités digitales, 2014 [^2]: Éric Guichard, Les humanités numériques n’existent pas, 2019

économie documentaire des réseaux sociaux

id :20200625095558
dernière édition :
type :processus
mots-clés :Olivier Le Deuff, Antonio Casili

Ainsi on retrouve des fiches de toutes les formes sur les réseaux sociaux. Tout le monde peut commenter, annoter (like, commentaires), partager et indexer (tags, libellés) ce qui est une véritable fiche documentaire, rangée dans la base qui forme le profil utilisateur.

[[20200624194717]] fiche comme modèle de données [[20200805104653]] traces numériques

« On peut également noter une volonté de renouer avec les cartes de visite sur les réseaux Instagram ou Snapchat qui permettent d’échanger de façon interactive des profils sous forme de cartes à jouer avec un décorum et un symbole de type Qrcode pour aller découvrir le compte de la personne. L’objectif est de réduire le profil à une simple carte à consulter »[^1]

Sur ces fiches on retrouve du texte, des images, des icônes (emojies), des liens hypertextes, soit un outil de récolte de données et métadonnées : la fiche est le croisement entre la communication d’un utilisateur et la réactions des autres vis-à-vis de cette information. Les algorithmes dressent ainsi un index (« base de données des intentions »[^4]) quand les utilisateurs voient un profil.

« La gestion ds identités numériques laisse entrevoir la constitution d’un pan-catalogue des individualités humaines, ouvert à l’indexation par les moteurs de recherche, et pose ainsi la question de la pertinence des profils humains. »[^2]

La stratégie informationnelle, documentaire, a pour fin l’analyse sociale. C’est pourquoi les réseaux sociaux vont jouer sur l’économie de l’attention, envoyer des notifications pour le shoot de dopamine, mettre en place un design incitatif, une interface centrée sur l’interaction.

[[20200802100201]] théorie du nudge

Analyse des contenus

L’analyse des personnes s'effectue par l’analyse des contenus (qui renseignent les algorithmes sur ces mêmes personnes). Avec la reconnaissance optique de caractères, des visages, ou plus simplement les analyses d’humeur, de sujet, il est possible d’obtenir de nombreuses informations sur un post.

Analyse personnelle

Les algorithmes n’ont pas la finesse pour analyser le comportement d’une personne, mais d’une masse, sachant qu’elle va déterminer le comportement personnelle. À cette masse catégorisée, indexée, on va proposer un contenu dans une perspective marchande (techno-économique[^3]), le digital audience labor.

« les médias sociaux vendent des bases de données personnelles renseignant les préférences et les comportements de portions de leurs publics à des annonceurs qui les achètent. »[^5]

Ce contenu peut être publicitaire, mais la plupart du temps il s’agit d’autres posts, souvent du même registre (filter bubble, bulle d'information) et plus rarement d’un registre voisin.

En analysant les groupes et en y plaçant les personnes, les réseaux sociaux sont capables d'identifier les contenus en les analysant, mais ils se basent aussi sur les informations qu'ils ont de la personne qui a posté le contenu et les informations des personnes qui interagissent avec ce contenu. En donnant accès au like, au dislike ou à d'autres formes de métadonnées, on entraîne l'algorithme à savoir où nous nous situons dans la population et où il peut venir nous proposer du contenu pour valider ou préciser cette position.

graph TB
	internaute[internaute fidelisé et actif]
	externe[entreprise externe]
	interface(interface active et personnalisée)
	donnees(production de données)
	algorithmes{{algorithmes}}
	marchandisation{{marchandisation}}
	personnalisation{{personnalisation}}
	publicite{{publicité}}
	
	internaute --> donnees
	donnees --> interface
	donnees --> algorithmes
	algorithmes --> personnalisation
	algorithmes --> marchandisation
	personnalisation --> interface
	interface --> internaute
	interface --> publicite
	publicite --> marchandisation
	marchandisation --> externe

Le placement est précis : nous savons que les réseaux sociaux sont capables de déterminer le genre, la sexualité, les appartenances politiques et culturelles d’une personne. C’est une ouverture à l’astroturfing : désinformation populaire (propagande) basée sur un traitement algorithmique.

[[20200619130655]] ideologie big data la vérité que nous enseigne le big data

Éditorialiser une personne

[[20200621084631]] éditorialisation

« Pour qu’une personne existe dans l’espace numérique, elle doit avoir un profil sur Facebook, sur Twitter, sur LinkedIn ou sur une autre plateforme qui puisse l’identifier et la rendre visible »[^6]

[^1]: Olivier Le Deuff, La fiche entre économie informationnelle et attentionnelle, 2019 [^2]: Olivier Ertzscheid, L’homme est un document comme les autres : du World Wide Web au World Life Web, 2009 [^3]: expression de Éric Sadin [^4]: John Battelle, The Database of Intentions, 2003 [^5]: Antonio Casili, Qu'est ce que le gigital Labor : Travail, technologies et conflictualités, 2015 [^6]: Marcello V.R. Qu'est-ce que l'éditorialisation?, 2016

écrit et oral

id :20200903113405
dernière édition :
type :inscription
mots-clés :Jack Goody, Yves Jeanneret

« L’énonciation orale […] est toujours un acte circonstanciel, interpersonnel et non strictement reproductible. L’écriture est la possibilité du jeu de l’écriture sur la langue »[^1] (p.9)

« Le calembour est possible oralement, pas l’anagramme. […] L’écriture ne reproduit pas seulement le flux de la parole, elle en permet la dissection »[^1] (p.10)

Formaliser le savoir

L’écriture permet de manipuler le discours et tend ainsi à l’objectiver[^3]. L’écriture n’est pas une « stricte phonographie », mais permet « d’ouvrir la voie à un développement critique et créateur du savoir »[^1] (p.9).

[[20200905210104]] grammatisation

« une société orale n’est pas dépourvue de d’esprit critique mais dépourvue des moyens de se constituer une tradition critique »[^1]

Cet effet se répand dans la culture d’une société. Yves Jeanneret paraphrase[^5] ainsi Jack Goody au sujet des sociétés dotées d’une littératie [[20200707175829]] : ce sont « les sociétés qui connaissent un état de développement de l’écriture influençant toute forme de communication, y compris non écrite ».

Autorité de l’écrit

Cette tradition est nécessaire pour pratiquer une discipline comme la philosophie qui se nourrit des écrits des pairs et anciens pour descendre vers les nouveaux. On compte aussi sur l’écrit comme preuve, avis scientifique : document. L’écrit applique ainsi à la langue une dimension politique : des institutions (écoles, Académie…) font autorité sur l’écrit et décident par extension de ce qui est digne d’être parlé ou non.

[[20200708172120]] document

« Ce qui est jugé important ne passe plus par la parole. La parole n’est plus que conversation, échange anodin. Elle n’est dans notre société jamais en rapport avec la vérité et la preuve. »[^4]

Mythe du Phèdre

Platon et rapporte un dialogue de son maître, Socrate, qu'il entretient avec Phèdre. Socrate vient à parler de Theut, dieu égyptien qui inventa en premier la science des nombres (l’algèbre, la géométrie, etc.) puis en second l’écriture :

« Elle ne peut produire dans les âmes, en effet, que l'oubli de ce qu'elles savent en leur faisant négliger la mémoire. Parce qu'ils auront foi dans l'écriture, c'est par le dehors, par des empreintes étrangères, et non plus du dedans et du fond d'eux-mêmes, que les hommes chercheront à se ressouvenir. Tu as trouvé le remède [pharmakon], non point pour enrichir la mémoire, mais pour conserver les souvenirs qu'elle a. Tu donnes à tes disciples la présomption qu'ils ont la science, non la science elle-même. Quand ils auront, en effet, beaucoup appris sans maître, ils s'imagineront devenus très savants, et ils ne seront pour la plupart que des ignorants de commerce incommode, des savants imaginaires [doxosophoi] au lieu de vrais savants. »[^2]

[^1]: Jack Goody, La Raison graphique, 1979 [^2]: Platon, Phèdre (274e-275), traduction de Mario Menier [^3]: Jean-Marie Privat, Sur La Raison graphique. La domestication de la pensée sauvage de Jack Goody, 2018 [^4]: Raphaël Pividal, La Maison de l’écriture, 1976 [^5]: Yves Jeanneret, Yves Chevalier, La physionomie des systèmes : diagrammes et représentation, 2009

écriture

id :20210406141809
dernière édition :
type :inscription
mots-clés :Samuel Goyet, Jack Goody

L’écriture est « l’inscription de signes sur un support »[^1] (p.43). Elle a trois pans :

  • sémiotique grâce à des signes « observables, interprétables et analysables »
  • technique grâce à « la mise en œuvre d’un savoir-faire technique d’altération (l’inscription) d’une matière (le support) » dans le domaine des architextes [[20210115090700]]
  • communicationnel car elle « produit un objet observable […] qui organise une situation de communication »

« ne présupposons pas que l’écriture est la consignation volontaire d’un discours et qu’elle ne s’adresse qu’à d’autres humains. […] l’écriture comme consignation volontaire de la pensée par un sujet rationnel, à destination d’autres sujets humains rationnels, est un cas particulier de ce phénomène qui recouvre bien d’autres modalités »[^1] (p.44)

L’écriture est une « technologie de l’intellect »[^2] permettant de structurer la connaissance [[20200625115033]] et ainsi notre manière d’appréhender le monde.

On accorde également une facette sociale à l’écriture de par sa technicité. L’écriture n’est pas neutre et mobilise des enjeux institutionnels, d’apprentissage, de maîtrise. L’écriture se partage, mais peut aussi exclure des individus (non maîtrise, impossibilité d’écrire). Elle est aujourd’hui industrialisée.

L’écriture est composite, composée des supports, outils et techniques de sa communauté d’utilisateurs pour représenter une variété de savoirs.

« Elle permet de lier les multiples dimensions d’un phénomène, de le comprendre non pas dans son intégralité mais dans la façon dont ces différentes logiques se croisent et s’hybrident »[^1] (p.45)

Écriture en informatique

« Il ne peut y avoir d’écriture que s’il y a une interprétation et une lecture faite par un humain »[^2] (p.141)

« une modification du système d’écriture est aussi une modification de nos structures de pensée […] l’informatique introduit dans l’histoire de l’écriture un mouvement d’abstraction, dû à la formalisation du calcul et à la rupture sémiotique entre inscription et affichage »[^1] (p.50)

Ainsi, l’écriture sur ordinateur appartient à un autre domaine technique, celui du calcul et donc de l’inscription computationnelle [[20210116135423]].

[^1]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017 [^2]: Jack Goody, La Raison graphique, 1979

EDI, environnement de développement intégré

id :20210303170947
dernière édition :
type :processus
mots-clés :outil

Un EDI (Environnement de Développement Intégré) est un logiciel de programmation. Il intègre de nombreux outils facilitant et assurant le travail des programmeur en épousant toute la complexité de l’environnement de développement [[20201224152456]]. Il s’agit d’un éditeur de texte capable de compiler/interpréter [[20200718182015]] une arborescence de fichiers pour y analyser différents langages, mais aussi y trouver des outils à exécuter.

Exemples d’EDI :

  • Visual Studio Code
  • Atom
  • Web Storm

Texte

Un EDI est un éditeur de texte, sans s’y réduire. Il propose comme de nombreux éditeurs de texte des aide à la lecture et à l’écriture :

  • coloration syntaxique [[20200918100545]]
  • expression régulières (regex)
  • pliage des blocs de code
  • table des structure de contrôle [[20200701214359]]
  • suggestions de saisie (selon un dictionnaire défini préalablement et/ou au fur et à mesure de la saisie)

Mais aussi des aides particulières à la programmation nécessitant une analyse réticulaire :

  • versionning [[20200707101208]] (connexion avec l’utilitaire Git et analyse des fichiers dans le répertoire .git)
  • refactoring [[20210109140006]] (ex : trouver une variable en différents points du code source et modifier son nom)
  • autocomplétion, correction (suggestions de saisie pertinente en fonction du contexte de saisie, notamment l’encapsulation [[20210428230547]], et non seulement de la saisie en cours)

Outils de programmation

Avec les boîtes à outils programmables [[20210303174716]], les développeurs créent des outils pour les aider à programmer. Ils les intègrent à leur arborescence. Ces outils reposent sur différents environnements d’exécution [[20201224140951]] (Python, NodeJs, Ruby…) dont le terminal est l’interface universelle. Ce même terminal peut être affiché dans les EDI. Ils sont aussi capables de dresser des menus avec les différentes commandes dont il a analysé la possibilité.

édition numérique

id :20200707085937
dernière édition :
type :architecture
mots-clés :Arthur Perret, Antoine Fauchié, Macello V.R., Bruno Bachimont, Samuel Goyet

L’édition est une chaîne de traitement documentaire, un processus qui accompagne l’objet intellectuel document [[20200708172120]] par des étapes successives. Les techniques numériques permettent d’automatiser certains de ces processus, mais aussi d’intégrer nos documents sur de nouveaux éléments (ex : diagrammes interactifs), pour de nouvelles manières de lire et apprendre.

« Si la langue anglaise fait la distinction entre l’édition en tant que filière (publishing) et l’élaboration effective du document (editing) […] le terme français d’édition a acquis une certaine polysémie. […] Éditer, c’est orchestrer l’élaboration du document. Dans le contexte de cet article c’est la seconde dimension qui nous intéresse : éditer au sens de créer et manipuler des fichiers ; éditeur au sens de logiciel d’édition ; édition au sens de pratiques d’écriture, entre conception, rédaction et programmation »[^1]

L’écriture numérique possède certaines qualités [[20200606201922]] qui font d’elle un matériau malléable auquel on applique une variété d’outils. Ils permettent de la

Ainsi, le document numérique a son propre univers d’édition que l’informatique permet largement d’automatiser. On peut parler de « programmation éditoriale » comme on parle d’« éditeur au sens de logiciel d’édition ; édition au sens de pratiques d’écriture, entre conception, rédaction et programmation »[^6].

[[20200607195524]] métier d'éditeur

« il ne s’agit pas seulement de choisir, de légitimer, de mettre en forme et de diffuser un contenu, mais il s’agit aussi de réfléchir à l’ensemble des techniques que l’on va utiliser ou créer [… et] aux contextes de circulation produits par l’espace numérique »[^4]

[[20200801210302]] espace numérique

Étapes

Tout au long du processus d’édition numérique, lecture et écriture, conception et diffusion se confondent. L’informatique oblige à entretenir une architecture pour poursuivre le processus d’édition sans friction. On pourrait parler de chaîne éditoriale, voire de système éditorial, « car sa structure est non-linéaire »[^10].

Écrire → Entreposer, regrouper → Mettre en page → Fabriquer → Diffuser.

« La finalité n’est plus de retrouver des documents, mais d’en produire de nouveaux, à l’aide des ressources retrouvées. On passe ainsi de l’indexation pour la recherche à l’indexation pour la publication. »[^7]

Éditorialisation

« l’éditorialisation est une instance de mise en forme et de structuration d’un contenu dans un environnement numérique »[^8]

« L’éditorialisation est une partie de la chaîne du texte, où différents acteurs spécialisés – et souvent différents de l’auteur du texte : typographes, correcteurs, éditeurs, imprimeurs… – interviennent sur le texte en le transformant. En cela, l’éditorialisation est intimement liée au texte et à sa matérialité »[^9] (p.55)

[[20200621084631]] editorialisation [[20200707112034]] instance de mise en page

Diffusion et distribution

Elle se fait en général sur le web : il faut choisir les formats d’export que vont rencontrer les internautes.

« Publiés sur le web, les textes numériques sont destinés à être lus autant par des humains que par des machines. Ainsi, éditer un livre numérique ne consiste plus seulement à travailler sa mise en forme, mais requiert en premier lieu de le structurer selon un balisage sémantique. »[^5]

Le document numérique s’inscrit également dans un réseau [[20210414220755]]. Antoine Fauchié a entièrement travaillé son mémoire, puis sa thèse à l’aide d’outils numériques et de plateformes comme Git (dont les commits sont relancés sur Twitter).

[[20200618141829]] formats de fichier numériques

Dépendances

[[20200701083222]] dépendances logicielles

Ce processus dépend d’une série plus ou moins importante de logiciels ou de programmes rassemblés.

« Plutôt que de faire porter la continuité d’une chaîne d’édition sur la maintenabilité d’un ou plusieurs logiciels par des sociétés privées ou des communautés centralisées, un système modulaire repose sur l’assemblage de plusieurs programmes, autonomes et connectés »[^2]

[^1]: Arthur Perret, Matière à pensées. Outils d’édition et médiation de la créativité, 2018 [^2]: Antoine Fauchié, Vers un système modulaire de publication : éditer avec le numérique, 2019 [^4]: Michael E.S, Macello V.R., Pratiques de l'édition numérique, 2014 [^5]: Marcello V.R, Nicolas Sauret, Antoine Fauchier, Margot Mellet, Écrire les SHS en environnement numérique. L’éditeur de texte Stylo, 2020 [^6]: Arthur Perret, Matière à pensées : outils d’édition et médiation de la créativité, 2018 [^7]: Bruno Bachimont, Nouvelles tendances applicatives: de l’indexation à l’éditorialisation, 2007 [^8]: Marcello V.R. Qu'est-ce que l'éditorialisation?, 2016 [^9]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017 [^10]: Florian Harmand, Arthur Perret, Former à la notion de réseau par la conception et l’interprétation : l’atelier Reticulum, 2021

éditorialisation

id :20200621084631
dernière édition :
type :processus
mots-clés :Macello V.R., Bruno Bachimont

« L’éditorialisation est l’ensemble des dynamiques qui constituent l’espace numérique et qui permettent, à partir de cette constitution, l’émergence du sens. Ces dynamiques sont le résultat de forces et d’actions différentes qui déterminent après coup l’apparition et l’identification d’objets particuliers (personnes, communautés, algorithmes, plateformes…). »[^7]

[[20200801210302]] espace numérique

L’éditorialiste relate des faits en introduisant sa propre opinion. On retrouve ce geste dans l’éditorialisation numérique telle que la production de contenu ou l’interaction d’humains comme une manière d’interpréter le monde (donner du sens).

Dispositifs

Un contenu inscrit dans un fichier numérique est abstrait[^1] tandis que sa mise en forme dépend de logiciels qui vont permettre de réaliser son éditorialisation soit « l’ensemble des pratiques d’organisation et de structuration de contenus sur le web »[^2] :

« ensemble des appareils techniques (le réseau, les serveurs, les plateformes, les CMS, les algorithmes des moteurs de recherche), des structures (l’hypertexte, le multimédia, les métadonnées) et des pratiques (l’annotation, les commentaires, les recommandations via les réseaux sociaux) permettant de produire et d’organiser un contenu sur le web »[^6]

Ce sont ces « dispositifs technologiques qui déterminent le contexte d’un contenu et son accessibilité »[^2]. Ces logiciels permettant d'appréhender le texte sont des « super-structures qui déterminent les conditions de l’accès à l’information »[^3].

[[20200708132301]] interface

Contexte se lit ici littéralement, comme ce qui accompagne le texte.

Dans l’espace

Éditorialiser, c’est produire de l’espace numérique, donner la capacité d’exister à un contenu ou une personne : « dans l’espace numérique, un objet doit être connecté et mis en relation avec les autres objets pour exister »[^6]. Toutefois, l’éditorialisation ne se produit pas dans un espace numérique général, mais dans un « environnement numérique particulier »[^6].

Pour se mouvoir dans cet espace, ne pas le subir, mais contrôler ses mouvements et sa place, il est nécessaire de comprendre les enjeux (acteurs, dispositifs) du numérique par la littératie.

[[20200707175829]] littératie numérique

Caractéristiques

On lui distingue cinq caractéristiques à l’éditorialisation[^6] :

  • processualité : « Tout processus d’éditorialisation est toujours en cours ; il est toujours dans une dynamique de mouvement », il est en permanence remis en question (versions d’écriture, re-publication, déplacement dans les résultats de recherche, bug etc.) [[20200722215106]] processualité éditoriale
  • performativité : « L’idée de performativité se réfère au fait qu’une action particulière produit quelque chose qui n’était pas prévu – qui n’était pas prévisible – avant ladite action » : l’éditorialisation est justement un « processus ouvert » et créer ses propres normes, modèles d’utilisation en vue d’opérations. « L’éditorialisation est un acte performatif dans le sens où elle tend à agir sur le réel plutôt qu’elle ne le représente. »
  • ontologique
  • multiplicité
  • collectivité

Indexation et combinaison

L’éditorialisation a une dimension culturelle, inscrite dans l’espace et le temps. Elle n’est pas simplement le fruit de dispositifs, mais d’une structure en mouvement perpétuel.

« l’indexation fine du contenu permet de ne retrouver que les segments concernés par la recherche d’information et de paramétrer l’usage de ces segments. »[^5]

[^1]: voir la fiche [[20200606201922]] qualités de l'écriture numérique [^2]: Michael E.S, Macello V.R., Pratiques de l'édition numérique, 2014 [^3]: Louis-Olivier Brassard, Infobésité avant la lettre, 2013 [^4]: Macello V.R., La fin de l’autorité ? Pour une philosophie politique du web. [^5]: Bruno Bachimont, Nouvelles tendances applicatives: de l’indexation à l’éditorialisation, 2007 [^6]: Marcello V.R. Qu'est-ce que l'éditorialisation?, 2016 [^7]: Louis-Olivier Brassard Qu’est-ce que l’éditorialisation ?, 2020

effet de bord

id :20210109130837
dernière édition :
type :programmation
mots-clés :technique

Une expression est dite « à effet de bord » (avec effet secondaire) si elle affecte autre chose que son environnement local, interne. Ainsi, affecter une variable au niveau global est un effet de bord.

var y = 5; // effet de bord

(function () {
    y += 2; // effet de bord
    x = 5; // PAS effet de bord
})();

Souvent, ces effets nuisent à la cohérence du programme en aboutissant à des comportements imprévus (exécutions implicites augmentant la complexité du programme [[20210313105330]]), voire des défaillances en cascades. Ces bugs sont souvent liés à une mauvaise appréhension de la portée des variables [[20200522093949]].

La programmation fonctionnelle [[20201222163154]] cherche à minimiser les effets de bords en les encapsulant au sein de monades.

empaqueter (bundle) le code

id :20210314114007
dernière édition :
type :inscription
mots-clés :technique

[[20210314113151]] chaîne d’édition du code

Lorsque l’on développe un programme, nous allons pouvoir modulariser [[20210313113130]] celui-ci. Cela implique de répartir son code source et ses données dans plusieurs fichiers, mais aussi de faire appel à des bibliothèques [[20210417145938]]. On prendra soin de lier le tout avec des appels hypertextes [[20210130151200]] comme ci-dessous pour un bundle JavaScript.

// index.js
import fx from 'functions';
import d3 from 'd3';

function component() {
    document.body.appendChild(fx());
}

Avec un outil comme Webpack, on peut lancer l’empaquetage à partir d’un fichier « racine » (ici index.js). Nous allons alors obtenir un fichier bundle.js, soit l’agrégation du code source de index.js et celui de ses imports, functions.js et d3.js. Il est également possible de joindre d’autres fichiers de données, des feuilles de styles dans ce tout dont on ne peut plus distinguer les parties.

Durant le processus, il est possible d’appliquer des filtres aux fichiers. C’est utile lorsque l’on veut transpiler [[20200907090751]] ou minifier [[20210218193747]] du code « à la volée ».

Ces opérations sont utiles pour diminuer le nombre de fichiers à appeler et executer durant l’utilisation du logiciel. C’est aussi une perte de lisiblité très importante du code qui devient illisible pour un humain.

émulation

id :20210420160220
dernière édition :
type :undefined

Un émulateur est un logiciel permettant de simuler du matériel. C’est un logiciel qui imite le fonctionnement du matériel pour devenir le support d’autres logiciels. C’est le cas par exemple, des logiciels permettant de simuler un terminal (et la console qu’il contient). Il existe l’Invite de commandes de Windows et l’application Terminal de MacOs. Ces logiciels imitent l’usage des centrales de commandes disposées dans les salles informatiques et simulent leur contrôle par le biais d’un logiciel.

On peut ainsi imiter une machine depuis une machine ; c’est le principe des machines virtuelles. Cela permet de regrouper sur une même machine différents environnements d’exécution [[20201224140951]] ou bien d’en retrouver un pour un logiciel suranné, trop ancien pour qu’il puisse fonctionner sur les machines de l’époque.

encapsulation

id :20210428230547
dernière édition :
type :programmation
mots-clés :technique

L’encapsulation est le regroupement de données [[20200509195652]] au sein de fonctions [[20201224102746]]. C’est un procéder de masquage de l’information : on évite que les utilisateur puissent y accéder de manière détournée et on dans le même sens des canaux sécurisés et facile d’utilisation.

L’encapsulation des variables [[20210427194405]] est généralement (Java, C++, PHP…) gérée à trois niveaux :

  • public
  • protégé : les classes héritières peuvent accéder à la valeur.
  • privé : seule le fonctions internes peuvent accéder à la valeur.

Par exemple, voici une classe PHP ci-dessous qui utilise les trois niveaux de protection. L’ascenseur (getter) get_password permet d’accéder à la valeur privée de l’attribut $id et devient un point de passage obligatoire pouvant comporter différentes opérations de validation.

class User {
    public $id;
    private $password;
    
    public function get_password()  {
        return $this->password;
    }
    
    protected function delete()  { … }
}

encodage du texte

id :20200717141735
dernière édition :
type :inscription

Le texte brut n’existe pas. D’immenses tableaux (appelés encodings) stockés dans les ordinateurs contiennent toutes les lettres d’un côté, et toutes les combinaisons de 0 et de 1 de l’autre. Or, presque chaque pays a créé son propre tableau, et ces tableaux sont incompatibles entre eux : pour la même combinaison de 0 et de 1, ils donnent un caractère différent voire rien du tout.

[[20200629161610]] texte brut

Selon les environnements (navigateur web, terminal ou console Python), l’encodage peut être très différent et d’un copier/coller à l’autre, on peut changer plusieurs fois d’encoding. Ainsi, le texte brute, le code, sont encodés et il est crucial de savoir comment pour éviter de perdre de l’information.

Encodage caractères

L’ASCII support les caractères anglais (donc pas les accents) tandis que l’UTF-8 permet de coder tous les caractères.

L’UTF-8 (Universal Character Set Transformation Format, sur 8 bits) est le langage universel : c’est une implémentation de Unicode, un tableau gigantesque qui contient suffisamment de combinaisons pour éliminer les problèmes d’encodage à travers le monde (l’ésperanto informatique).

Problèmes d’encoding

Lorsque l’on a un problème d’encoding c’est que l’ordinateur n’arrive pas à trouver comment afficher le caractère : il n’a pas utilisé le bon tableau. Il faut donc lui indiquer quel est le bon tableau (en supposant qu’on l’on connaisse l’encodage d’origine et l’encodage cible) ou bien transcoder le caractère.

Déclarer encodage

Placer la ligne suivante en haut de certains fichiers permet d’assurer que l’ordinateur sait quel encoding utilisé.

# coding: utf8

Source : http://sametmax.com/lencoding-en-python-une-bonne-fois-pour-toute/

encre des données

id :20201119142248
dernière édition :
type :modélisation

[[20200912130028]] visualisation

L’encre des données (data-ink) est un concept développé par Edward Tufte dans son livre The Visual Display of Quantitative Data (1983). Il permet d’établir un rapport entre l’encre (nombre de pixels) utilisée pour un affichage de données et celle utilisée pour effectivement afficher les données. Il convient en effet de trouver un équilibre dans cet affichage afin de ne pas distraire l’internaute, de le détourner du véritable sujet de la page.

Pour équilibrer cet affichage, il est nécessaire d’appliquer le calcul suivant. Le résultat doit être le plus proche possible de 1.

data-ink ratio = encre des données / encre de l’affichage

Ainsi, on limite au maximum les aplats et les tracés inutiles en ne gardant que les repères nécessaires.

Source : https://infovis-wiki.net/wiki/Data-Ink_Ratio

enjeux politiques de l’écriture numérique

id :20200725133539
dernière édition :
type :undefined
mots-clés :politique

L’écriture numérique est en enjeux politique comme l’écriture de manière générale :

« Nous savons aussi que la maîtrise de l’écrit est un paramètre essentiel de ces rapports de pouvoir, ne serait-ce que parce qu’elle donne la possibilité d’infléchir les orientations de la culture de l’écrit. […] les grandes entreprises du numérique maîtrisent l’écriture, la confisquent à leur manière en nous louant des logiciels, en favorisant des formats de fichier, des protocoles, des modes d’échange en ligne (qui sont écrits), en déformant le monde perçu selon leurs perspectives, parfois appelées algorithmes »[^1]

[[20201025084447]] la loi du code

« Nous avons donc perdu progressivement la capacité d’écrire dans un langage interprétable par la machine. »[^2]

[[20200707161136]] problème des logiciels de traitement de texte

[^1]: Éric Guichard, Les humanités numériques n’existent pas, 2019 [^2]: Julien Dehut, En finir avec Word ! Pour une analyse des enjeux relatifs aux traitements de texte et à leur utilisation, 2018

énonciation éditoriale

id :20200916105659
dernière édition :
type :inscription
mots-clés :Emmanuel Souchier, Samuel Goyet

[[20200707085937]] édition numérique

« La théorie de l’énonciation éditoriale repose sur l’idée que tout texte doit être vu pour être lu »[^3] (p.487). Tous les éléments du processus d’édition (génération, mise en page…) d’un texte participent à sa compréhension, sa lecture. Si le texte « premier » n’est fait que de grammaire et de sens, il ne « s’objective qu’à travers l’existence d’un texte second », matériel. L’énonciation éditoriale est le texte « pas uniquement comme texte écrit, mais comme objet ‹ polyphonique ›, objectivé sur un support matériel » par « matérialité du support et de l’écriture, l’organisation du texte, sa mise en forme »[^1]

« Il y a donc une énonciation, en ceci que quelque chose est dit du texte par sa seule image »[^3] (p.487)

Des exemples d’œuvres mettant en évidence cette dualité équilibrée et interdépendante :

  • Cent mille milliards de poèmes de Raymond Queneau (1961) ;
  • Exercices de style de Raymond Queneau (1961) ;
  • Composition n°1 de Marc Saporta (1962).

Au sujet de la typographie [[20200712214549]], « son évidente omniprésence masque son existence au point de la faire disparaître et d’en effacer le sens et la fonction »[^1]

Épaisseur du texte

Le texte impose une « résistance physique »[^1], sociale, culturelle. Il adopte un format, une matière, une graphie (mise en page, typographie, illustration) porte un ensemble d’attributs (titre, auteur, éditeur et droits, ISBN), autant d’éléments observables qui plus qu’accompagner le texte le font vivre, lui donne une identité et une connotation qui vient s’ajouter au sens du texte.

Prendre en compte le fond plutôt que la forme du texte, ou l’inverse, sont des « erreur symétrique »[^2] et c’est le risque du texte sur écran.

Le risque est de « voir la détermination technique l’emporter sur toutes les autres »[^2], que le texte soit réduit à son affichage, qu’il soit réduit à une tâche automatique. En effet, on perd de vue l’« épaisseur technique » nécessaire à l’instance du contenu (fond) et de l’interface (forme), déterminée par les architextes [[20210115090700]].

[^1]: Emmanuel Souchier, L’image du texte pour une théorie de l’énonciation éditoriale, 1998 [^2]: Dominique Cotte, Écrits de réseaux, écrits en strates. Sens, technique, logique, 2004 [^3]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017

environnement de développement

id :20201224152456
dernière édition :
type :processus

L’environnement de développement se forme autour d’un projet (ou d’une série de projets) logiciel. Il compose l’espace de travail des développeurs, la chaîne de production. Il s’agit autant de la méthodologie de projet que de l’inscription du code. Il encadre la structure du logiciel [[20210221144451]] et lui ajoute différents dispositifs présentés ci-après.

L’environnement de développement a pour rôle de rendre le travail des techniciens plus efficient. Il intègre des outils permettent de traiter automatiquement certains fichiers, d’aider à l’inscription du code ou encore de limiter les erreurs. Il ne sert pas nécessairement à accélérer le développement, mais à assurer son efficacité.

Un code plus contraignant à écrire (sel syntaxique, framework…) est un code plus réfléchit ; la vitesse n’est pas nécessairement un critère d’efficience.

Dispositifs

On dresse plusieurs catégories de dispositifs au sein de l’environnement de développement :

Ces dispositifs laissent tous une trace dans l’arborescence du logiciel. Soit ils intègrent directement le code source, soit ils laissent un fichier de configuration sur lequel ils viennent se greffer d’une installation à l’autre. Ce système permet de versionner la configuration de l’environnement de développement. Ils deviennent tous en quelque sorte des dépendances du projet.

Documentation

Deux documents permettent d’appréhender l’environnement de développement :

espace

id :20200719212204
dernière édition :
type :architecture
mots-clés :Marcello V.R.

L’espace est une notion fondamentalement humains tant elle est conditionne notre perception du monde. L’espace est le résultat de la structure des relations entre des objets. Deux philosophes s’opposent et conçoivent différemment la relation entre les objets.

Descartes

Il défini l’espace objectif, homogène : des points sont reliés sans hiérarchie d’aucune sorte.

Foucault

L’espace est un « ensemble de relations entre les objets qui portent des valeurs ». C’est un espace de valeurs qui dans tous les cas suggère un mouvement des objets, un rapport nécessairement inégal entre eux. Même les espaces sont inégaux : « des lieux ont plus de poids que d’autres »[^1]

Cette vision est le fruit d’analyses politiques et phénoménologiques[^1].

[^1]: Marcello V.R., La fin de l’autorité ? Pour une philosophie politique du web.

espace numérique

id :20200801210302
dernière édition :
type :architecture
mots-clés :Marcello V.R., Bruno Bachimont

[[20200719212204]] espace

On pense souvent le Web comme un « non espace, un non lieu, une utopie dans le sens étymologique du mot »[^1] : « en aucun lieu ». De par la nature de l’espace numérique on peut oublier que nos actes (ex : l’envoi d’un fichier) ont des conséquences. On oublie les coûts humains, matériels, écologiques du réseau Internet et de son entrée jusque dans nos espaces physiques intimes.

« Il est important de souligner que si nous comprenons le mot ‹ numérique › dans un sens culturel, l’espace numérique est notre espace principal, l’espace dans lequel nous vivons, et pas seulement l’espace du web ou des objets en ligne. »[^2]

[[20200621084631]] éditorialisation

Si le numérique ne peut être comme matériel, alors il ne peut être politique. Hors il change radicalement notre rapport à l’information.

[[20200725133539]] enjeux politiques de l’écriture numérique [[20200705114827]] digital labor

Effacement

Le numérique « prend une dimension anthropologique, il fait parti de notre condition d’êtres humains »[^3]. C’est ainsi qu’il faut comprendre le numérique, l’étudier et ainsi prévenir le risque qu’il devienne « impensable […] dans nos usages puisque on sera plus ou moins condamnés à ne penser qu’à travers les outils que le numérique a mis en place et donc il se sera effacé à travers les objets qu’il aura contribué à élaborer ».

Le numérique comme technique va avoir cette tendance naturelle à s’effacer au profit des outils et des usages qu’il a permis de créer.

[[20200709104849]] rapport aux objets techniques

Hybride

Internet n’est pas un espace séparé du monde physique, du réel, mais un espace hybride. Il s’invite dans l’espace pre-numérique (qui précède le monde numérique) via l’implantation récente d’objets interconnectés par le réseau Internet (téléphone, montres, véhicules… ). On ajoute cette hybridation à la densité et la nature hyperactive du numérique qui définissent cet espace.

Fragmenté

Le numérique est un espace que l’on ne peut toucher mais qui est bien réel, bien qu’il soit aussi fragmenté : nous sommes chacun derrière nos écrans et l’existence de chaque objet tient aux liens qui le raccrochent à une réalité, comme celle d’un moteur de recherche.

[[20210114195936]] hyper

« [par rapport au papier, l’ordinateur comme outil d’écriture découple] trois espaces nettement distincts sur l’ordinateur : celui de la saisie (le clavier), celui de l’affichage (l’écran) et celui de l’enregistrement (la mémoire) […] C’est dans cet écart que se glisse et se manifeste la supposée dématérialisation »[^4]

Le Web est fragmenté en de nombreux endroits, en de nombreux sites, eux-mêmes fragmentés en pages, elle-même fragmentées en différents fichiers réunis par différents protocoles (par exemple link pour le CSS, include entre des fichiers PHP). L’envoi des pages se fait entre un client et un serveur [[20210112090725]] qui échangent non pas un flux continu de données, mais des paquets qui sont décomposés d’un côté puis réceptionnés, recoupés, regroupées à l’arrivée. Ces paquets arrivent sur différents terminaux qui ont chacun leurs différentes couches logicielles par lesquelles passent les informations avant d’arriver sur des interfaces elles-mêmes morcelées.

[[20210130151200]] architecture de code hypertextuelle

« L’environnement numérique est prescriptif, car il détermine la forme des contenus qu’il héberge »[^2]

Contrôle

Deux catégories de multinationales contrôlent le monde numérique. Il s’agit autant de la partie matérielle (hardware) que de la partie logicielle (software) :

GAFAM : Google, Amazon, Facebook, Apple et Microsoft BATX : Baidu, Alibaba, Tencent et Xiaomi

[^1]: Marcello V.R., La fin de l’autorité ? Pour une philosophie politique du web. [^2]: Marcello V.R. Qu’est-ce que l’éditorialisation?, 2016 [^3]: Bruno Bachimont, Rhétorique de l’intelligibilité, vers des humanités du numérique, 2020 [^4]: Pascal Robert et Nathalie Pinède, Le document numérique : un nouvel équipement politique de la mémoire sociale ?, 2012

extension et greffons

id :20201201135325
dernière édition :
type :architecture

On parle d’extension (add-on) ou de greffons (plugin). Les deux permettent d’ajouter des fonctionnalités. Contrairement aux extensions, les greffons sont des applications à part entière, dites standalone. Ainsi, elles n’ont pas de dépendances.

[[20200701083222]] dépendances logicielles

fétichisation des programmes

id :20210502094415
dernière édition :
type :programmation
mots-clés :Wendy Hui Kyong Chun, Samuel Goyet, Bruno Bachimont

Grâce à une écriture formalisée par les langages de programmation alphanumériques [[20200718172257]], on est tenté de penser la machine comme un humain très docile ; comme si elle allait répondre à tous les ordres parce qu’on le lui a commandé, comme on lui a commandé. Or, il n’en est rien. Penser cela c’est anthropomorphiser par erreur la machine et son fonctionnement, tandis que sa performance (l’étendu de ce qu’elle peut faire) dépasse largement notre influence par le biais des langages de programmation, alors diluée dans les strates logicielles [[20200718172257]]. L’étendue de cette performance échappe d’ailleurs aux développeurs. Cantonnés à des paradigmes [[20200530191442]] et environnements d’exécution [[20201224140951]] divers, notre métier ne consiste pas à prendre le contrôle de la machine mais à développer des interfaces [[20200708132301]] sur lesquels d’autres développeurs et utilisateurs viendront s’appuyer.

« voir le code comme subjectivement performatif ou énonciatif, c’est l’anthropomorphiser, le projeter sur la rubrique de la psychologie, plutôt que de le comprendre à travers sa propre logique de ‹ calcul › ou de ‹ commande › »[^1] (Alexander R. Galloway)

Croire que l’on peut donner un but et un désir aux machines c’est en faire des fétiches. On ne peut commander une machine, la « soumettre à notre volonté » par l’écriture (« thélémacentrisme »[^4], p.499).

On peut voir à tord en l’informatique une « réalité comme soumise à des pouvoirs animés dont les buts pourraient être devinés et influencés »[^1] et en faire un fétiche pour ne pas admettre qu’il y a une contingence ou en tous cas un manque de contrôle sur les actions de la machine (par sa matérialité [[20210121192437]]). On cherche à tord une fausse causalité (on fait une sourcellerie).

Ensourcellement

« on ne peut pas exécuter de code source : il doit être compilé ou interprété […] le code source ne devient source qu'après coup. Le code source est plus précisément une ressource plutôt qu’une source. »[^1]

Le code source d’une document est d’une nature différente de celle du document qu’il génère. Oublier la nécessité de l’interprétation/compilation [[20200718182015]] du code source, sa dépendance à l’environnement d’exécution [[20201224140951]], c’est l’ensourcellement. Hors, la source du code est un processus est n’est pas fixé dans une série de fichiers de code (« code source »). Il n’y aurait pas de code source à proprement parler, mais des fichiers interprétés pour engendrer une exécution dont ils ne rendent pas compte.

De la même manière, chercher absolument la source fondamentale d’un programme pour finalement dire qu’il n’est finalement qu’une série d’impulsion électrique dans un système mécanique, c’est aussi s’ensourceler. Un programme est à la fois électrique, formalisme et interface graphique sans que l’on doive séparer ces strates pour expliquer le fonctionnement d’un programme.

Sortir le code d’un programme de son contexte d’exécution (ouvrir le programme dans un éditeur de texte plutôt que de l’exécuter) revient à le « désourcifier »[^4] (p.490).

Idéalité computationnelle

Face à l’ensourcellement, Samuel Goyet propose d’opposer l’« idéalité computationnelle » comme l’a théorisé Bruno Bachimont[^3] (p.95), « soit l’indépendance de l’information par rapport à son substrat [support d’existence] matériel »[^2] (p.484). Si les conditions matérielles et opérationnelles (bornant le calcul) importent toujours, on conserve à toutes les strates l’idée que l’informatique est computationnel [[20210502102039]], traite du calcul.

[^1]: Wendy Hui Kyong Chun, On ‹Sourcery›, or Code as Fetish, 2008 [^2]: cité par Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017 [^3]: Bruno Bachimont, Arts et sciences du numérique. Ingénierie des connaissances et critique de la raison computationnelle, 2004 [^4]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017

feuille de style

id :20210207120845
dernière édition :
type :inscription

Une feuille de style est ensemble de règles permettant de modifier l’apparence d’une classe d’éléments. Cette apparence affecte consécutivement l’ensemble des objets [[20210130110228]] de cette classe. Ainsi, en définissant un visuel pour la classe paragraphe, on modifie le visuel de tous les paragraphes du document.

Ces règles peuvent être établies dans un fichier externe ou bien directement en en-tête du fichier contenant les classes qu’elle affecte. Dans le premier cas, une seule feuille de style peut affecter plusieurs fichiers, tant que ceux-ci répondent au même schéma de données. Un fichier peut également faire appel à plusieurs feuilles de style.

Il est possible de définir des règles relatives à la typographie [[20200621094836]], à la couleurs (corps et arrière-plan), à la position (absolues, marges) des éléments dans l’espace du document…

Il existe les feuilles de style CSS (pour les fichiers HTML) et les feuilles de style XSL (pour les fichiers XML).

fiche comme modèle de données

id :20200624194717
dernière édition :
type :inscription
mots-clés :Olivier Le Deuf

La fiche est un outil historique d’organisation des connaissances et de l’information. Son étymologie latine (figere) renvoie à ses potentialités de fixer l’information.

Usage

Jean-François Bert cite quelque[^3] usages de la fiche :

  • « la fiche facilite les renvois, rend possible une lecture fragmentaire » : le lecteur est capable d’exploiter les fiches à l’unité ou bien d’en « compiler » plusieurs pour une information plus générale. On donne au lecteur la capacité de diriger sa lecture.
  • elle « sert à multiplier les informations ponctuelles, à les compiler, à les commenter, à les expliciter, à les vérifier et à les corriger, ou encore à les authentifier »
  • « elle engage aussi la question de la visualisation, et de la remémoration » comme un schéma de pensée que l’on pourrait imprimer intellectuellement, la fiche oblige aussi à se rappeler, à réexpliquer une pensée. La fiche est un « travail redondant qui n’est pas fait en pure perte puisque ce doublon pourra, à terme, être reclassé selon un ordre ou une classification différents »[^3]

[[20200622164608]] hypertexte [[20200630153054]] zettelkasten

Format

Il faut voir dans la petite taille de la fiche non pas une limite à imposer à sa mémoire, mais l’opportunité de discipliner son esprit à composer une pensée sur une surface définie ; c’est une épreuve de design.

Jean-François Bert différencie la fiche à « références multiples » et la fiche à « référence unique ». La première, plus grande, est destinée à être classée tandis que la seconde, « à portée de main » peut « être facilement mise de côté »[^3].

Paul Otlet prescrit le format désormais standardisé 125 × 75 mm : « Sur la gauche, le nom de l’auteur et son prénom entre parenthèses. À droite, un chiffre international, tiré de la CDD. Sur la seconde ligne, la date de publication, le titre de l’ouvrage in extenso. Puis viendront les indications de lieu, d’édition, d’impression »[^3].

Numérique

Les posts[^2] des réseaux sociaux sont autant de fiches que s’échangent et partagent les internautes avec de nouvelles formes d’annotations (comme la possibilité de d’ajouter un like, des commentaires). Ces métadonnées sont inscrites en vue d’une re-indexation permanente du contenu.

[[20200625095558]] économie documentaire des réseaux sociaux

On retrouve aussi la fiche comme fichier, notamment Markdown avec l’entête YAML (YAML Front Matter).

De la pile à la base de données

La notion de « pile » (de fiche) constitue le principe du logiciel HyperCard. L’équivalent informatique de la fiche est l’instance informatique d’objets via une class qui prend l’apparence de formulaires. On y inscrit les données avec un contrôle de la saisie pour les stocker sur une base de données. L’interface de cette dernière prend le plus souvent la forme d’un tableau avec à disposition des outils de tableur pour traiter en masse les objets qui apparaissent sous forme de ligne. Le paradigme de la programmation orienté objet permet de contrôler précisément ce type de système avec une méthode complète pour concevoir, modéliser et programmer ce type d’infrastructure.

[[20200622164608]] HyperCard [[20200707113753]] instance informatique

AnalogiqueInformatique
meublebase de données
modèleclasse
méthodeformulaire
ficheobjet

Les moyens changent, le vocabulaire, les outils, mais l’intention et la méthode demeurent. Ainsi, l’identifiant est un élément fondamental de ce système documentaire : chaque fiche, chaque objet doit pouvoir être précisément nommé et localisé.

Activité humaine

Il y a aussi quelque chose de personnel et compulsif dans le fiche.

« Faire des fiches est une activité humble et répétitive, machinale et parfois compulsive, dans certains cas pathologique. On retrouve une discipline du corps, de la main et de l’attention qui se déploie dans une temporalité mesurée à l’aune de critères quantitatifs » Christian Jacob, préface [^3]

[^1]: décomposer un problème complexe en « sous-problèmes » plus simples [^2]: tweets, cartes Tinder, publications Facebook, Intagram, ou sur un forum [^3]: Jean-François Bert, Une histoire de la fiche érudite, 2019 [^4]: Olivier Le Deuf, La fiche entre économie informationnelle et attentionnelle, 2019

flot de contrôle

id :20200930183337
dernière édition :
type :programmation

Le flot de contrôle est un l’ordre d’exécution des instructions d’un programme tel qu’il est défini par l’inscription des structures de contrôle [[20200701214359]] et mots-clés d’un langage.

Pour le code ci-dessous, on fait appel deux fois aux instructions contenues dans la fonction isContainingPairs. La structure for est une boucle qui encapsule deux conditionnelles. La première court-circuite la boucle si le test n’est pas vrai. Le seconde interrompt l’exécution de la fonction (donc de toutes ses instructions) si le résultat du test n’est pas 0. Après l’exécution de la boucle, la fonction retourne la valeur true.

La valeur true est retournée dans tous les cas où la fonction n’a pas été interrompue lors des itérations.

// vérifier si le tableau en paramètre contient des nombre entiers pairs
function isContainingPairs(array) {

	for (i = 0; i < array.length; i++) {
		if (Number.isInteger(array[i]) !== true) {
  			continue; }
	
  		if (array[i] % 2 !== 0) {
  			return false; }
	}

	return true;
}

const one = isContainingPairs([2,16,'hello',4,12]) // true
const two = isContainingPairs([3,2,'bye',7]) // false

Le flot de contrôle peut être formalisé sous la forme d’un graphe [[20200625172823]] comme j’ai tenté de le faire ci-dessous pour la boucle :

graph LR

i
elt[element]

i --> elt
elt --> testInteger{est un nombre entier}
testInteger -->|non| i
testInteger -->|oui| testPair{est pair}
testPair -->|non| arret((arret))
testPair -->|oui| i

fonctions

id :20201224102746
dernière édition :
type :programmation
mots-clés :technique, Bruno Bachimont

Ce sont des séquences génériques de calcul. Elles peuvent être répétées, appelées en cascade ou intégrées les unes aux autres et ainsi (re)organisés à volonté, dans une logique combinatoire [[20210416144157]].

Une fonction admet les variables [[20210427194405]] suivantes :

  • paramètres : liste des intrants d’une fonction, éventuellement avec une valeur par défaut ;
  • intrants (ou entrées) : valeurs intégrées à la fonction, qu’elles soient globales[^1] ou passées en paramètre ;
  • extrants (ou sorties) : valeur retournée par la fonction.

Le mot-clé return permet généralement de mettre fin à l’exécution et de retourner la valeur finale que prendra la fonction. Si la fonction ne retourne pas de valeur, on l’appelle une routine (subroutine).

const foo = 5;

function multiplicate(number, multiplicator = 2) {
    return number * multiplicator;
}

Une fonction est une constante [[20210427194405]], ce qui veut dire que dans de nombreux langages, elle peut également être intrante dans une fonction, ou même être passée en paramètre.

Écriture

On écrit en algèbre la fonction f de la manière suivante, qui va permettre de multiplier le nombre x (entrée) par deux :

ƒ(x) = x * 2 tel quel ƒ(4) revient à écrire 8 ; le résultat remplace l’inscription du calcul, « Le propre du calcul est que le contenu ne porte pas sur lui les traces de sa manipulation »[^3].

[[20210109132504]] transparence référentielle

Dans la plupart des langages de programmation, cette même fonction va s’écrire de la manière suivante :

function f(x) {
    return x * 2;
}

const f = x => x * 2 ;

Usages

On distingue trois usages de fonctions[^2] :

  • Application : obtenir une valeur basée sur le traitement d’entrées ;
  • Procédural : répéter l’exécution d’une séquence d’instructions ;
  • Interface : commander des parties du système grâce aux fonctions proposées par le runtime [[20201224140951]].

[[20201224145634]] fonctions pures

On parle de fonctions d’ordre supérieur pour celles prenant en paramètre une autre fonction comme dans l’exemple suivant avec la fonction filter :

function isEven(v) {
    return v % 2 == 0;
}

let evens = [1,4,12,5].filter(isEven) // [4, 12]

[^1]: [[20200522093949]] la portée des variables [^3]: Bruno Bachimont, Le sens de la technique : le numérique et le calcul, 2010

fonctions pures

id :20201224145634
dernière édition :
type :programmation
mots-clés :technique

[[20201224102746]] fonctions

Une fonction pure est une fonction pour laquelle on a toujours la même sortie pour les mêmes entrées[^2] et sans effet de bord [[20210109130837]] : elle renvoie simplement le résultat de cette opération. Ce sont des éléments très simples du programme, facilement interchangeables, indépendants de l’état extérieur et qui ne peuvent donc muter.

On garanti ainsi la transparence référentielle [[20210109132504]].

Exemple

La fonction pure suivante se substitue à sa valeur de sortie, sans autre effet que de renvoyer systématiquement la même sortie pour la même entrée.

function double(int) {
    return int*2;
}

Ainsi, double(4); renvoie 8, indépendamment du contexte, du nombre d’appel, de sa place dans le flux de contrôle[^1].

Inversement, la fonction suivante déclenche l’arrêt du programme si la valeur globale sysIsActive vaut false. Ça n’est donc pas une fonction pure.

[[20200522093949]] la portée des variables

function double(int) {
    if(!sysIsActive) {
        process.exit();
    }
    
    return int*2;
}

[^1]: Eric Elliott, Master the JavaScript Interview: What is a Pure Function?, 2016

forge

id :20210111200221
dernière édition :
type :architecture
mots-clés :technique

[[20201224152456]] environnement de développement

Une forge est un système de maintenance collaboratif permettant de rassembler les productions de différents développeurs afin de les assembler (via des opérations systématiques) pour former un ou plusieurs logiciels.

[[20200707101208]] versionnement Git

Exemples :

formalisme de la connaissance

id :20200625115033
dernière édition :
type :architecture
mots-clés :Bruno Bachimont, Jack Goody, Samuel Goyet

L’écriture et le calcul permettent successivement d’appréhender la connaissance de manière formelle, respectivement selon la raison graphique et la raison computationnelle. Ce sont des « technologies de l’intellect »[^2] dans la mesure où elles permettent de gérer la complexité [[20210419170156]], ses représentations. Le formalisme « permet de manipuler des énoncés d’un point de vue formel, en ne considérant plus leur sens mais leur structure »[^5].

Il s’agit de constituer des « structures conceptuelles, conditionnant notre mode de pensée »[^1], des matrices, puis des systèmes automatiques.

Raison graphique

Dans son livre La Raison graphique (1979), Jack Goody évoque trois formes d’écriture (manuscrite ou numérique) pour formaliser la connaissance : la liste, le tableau et la formule.

« En délinéarisant le flux temporel pour le projeter sur une structure spatiale […], l’écriture permet l’émergence de structures de signification qui sont inexprimables par la seule parole »[^3]

« Le texte écrit est par lui-même générateur d’une conscience plus aiguë des structures du langages tant syntaxiques (ou grammaticales) que sémantique (systèmes catégoriels) »[^2] p.10

Bruno Bachimont décrit ainsi ces formes dans son livre Ingénierie des connaissances et des contenus (2007) :

  • liste : elle permet de découper, délinéariser un discours en unités qu’il est possible de prélever pour les classer, catégoriser, hiérarchiser ;
  • tableau : représentation d’un ensemble de rapports systémiques entre des données caractérisées par leur position (topologie) sur deux dimensions : vertical (colonne) et horizontal (ligne) et par rapport aux métadonnées en périphérie. Quand on est face à un tableau, on cherche les trous, les rapports entre les différentes dimensions dont on aurait pas encore trouvé la valeur comme lors d’un produit en croix ;
  • formule : raisonnement écrit dont on n’a pas besoin de comprendre la signification, mais dont on peut saisir le geste par la forme (normée).

L’informatique est la radicalisation de cette dernière forme d’écriture. Il n’y a pas de computationnel, de calcul, sans écriture.

Raison computationnelle

[[20210116135423]] inscription computationnelle

Bruno Bachimont va reprendre cette typologie comme prisme pour une analyse des structures de la connaissance en informatique. Elle sont basées sur la discrétisation [[20210405121526]] et la formalisation de signes destinés au calcul, à la computation. Ainsi, la liste, le tableau et la formules deviennent respectivement[^4] :

  • programme : selon la même idée que la liste, le programme [[20200808143420]] est une série d’instructions pouvant être interchangées puis finalement exécutés dans l’ordre prescrit ;
  • réseau [[20210414220755]] : une fois les données structurées comme dans un tableau (statique), le réseau propose de redisposer et réévaluer ces informations (dynamique) ;
  • couche : entendue comme niveau d’abstraction, la couche permet de faire abstraction de calculs sous-jacent pour se concentrer sur le résultat formalisé, comme la formule. [[20210115090700]]

[^1]: Bruno Bachimont, Ingénierie des connaissances et des contenus, 2007 [^2]: Jack Goody, La Raison graphique, 1979 [^3]: Bruno Bachimont, Herméneutique matérielle et Artéfacture : des machines qui pensent aux machines qui donnent à penser ; Critique du formalisme en intelligence artificielle, 1996 [^4]: Bruno Bachimont, Signes formels et computation numérique : entre intuition et formalisme, 2004 [^5]: Samuel Goyet, De briques et de blocs. La fonction éditoriale des interfaces de programmation (API) web : entre science combinatoire et industrie du texte, 2017

formats de fichier numériques

id :20200618141829
dernière édition :
type :inscription

L’ordinateur dresse un index des formats de fichiers et des outils permettant de les interpréter. Ainsi un certain nombre de formats de fichier dépendent d'un logiciel, voire de sa version. Le contenu d'un fichier peut aussi ne pas correspondre au format annoncé (en général par son extension).

Typologie

  • format propriétaire : les spécifications techniques sont détenues par une organisation privé comme pour le .docx de Microsoft ou le .pdf de Adobe. Toutefois, pour ces exemples, les spécifications techniques sont publiées.
    • format opaque : les spécifications ne sont pas diffusées comme pour l'ancien format .doc de Microsoft.
  • formats libres ou ouverts : les concepteurs ne revendiquent pas la propriété comme pour les formats .html, .json.

L’extension n'est qu'une information sur le format du fichier : elle peut être modifiée. Par exemple, changer l'extension .docx d'un fichier Word en .zip (archive) permet de se rendre compte que les fichiers .docx sont en fait des répertoires comportant une multitude de fichiers.

Choix

On ne choisit pas un format de fichier par hasard. Ils brident plus ou moins l'affichage et la modification des données qu'ils contiennent, sont plus ou moins interopérables, plus ou moins légers.

[[20200629161610]] texte brut [[20200619133835]] langages de balisage léger

formulaires

id :20210117100240
dernière édition :
type :inscription

Un formulaire est un document préparé pour recueillir des réponses d’une population ciblée. Il est formalisé comme une série de champs. Chaque champ est une question à laquelle l’usager peut répondre selon les modalités proposées.

L’intérêt du formulaire est de guider l’usager à trouver la réponse, mais aussi à la formuler. Pour une question, une série d’images ou d’autres documents on peut ainsi proposer des réponses prêtes à être approuvées par l’usager, ou bien le laisser s’exprimer plus librement.

Formater la saisie

Ce qui sont des consignes sur le papier peuvent devenir des conditions de saisie sur les supports numériques. Ainsi, on peut limiter les réponses d’un champ quant à leur type (alphabétique, numérique, alphanumérique, fichier), le nombre de caractère. On peut aussi mettre en place des contraintes formelles comme l’obligation de cocher un certain nombre de réponse.

Comme cela on s’assure que les informations récoltées peuvent rentrer dans un système d’information, qu’elles sont formatées pour pouvoir être prises en charge par le système.

framework ou cadriciel

id :20200701222949
dernière édition :
type :architecture

[[20200701083222]] dépendances logicielles

Un framework, ou cadritiel, est une base logicielle venant encadrer le développement d’un projet qu’il intègre et pour lequel il va prescrire une architecture, fournir des outils de développement. Les framework peuvent contrôler globalement les imports de bibliothèques [[20210417145938]] (voir l’exemple de VueJs ci-après).

Ils présentent plusieurs avantages :

  • accélération du développement ;
  • entraide de la communauté et documentation complète ;
  • sécurité et fiabilité sur une base de fonctionnalités.

Toutefois, il s’agit de projet open source [[20200710204125]] et ils peuvent dont être abandonnés. Aussi, les framework n’apportent pas de pluvalue métier : deux équipes qui travaillent avec le même cadriciel n’ont aucun avantage concurrentiel entre elles.

Cas

Le framwork Laravel cadre des logiciels PHP. Il met à disposition des développeurs de nombreuses classes et fonctions pour rediriger, authentifier l’utilisateur ou encore sécuriser et faciliter l’écriture des appels à une base de données.

Le framework Hugo permet de créer des sites statiques. Les fichiers qu’on y intègre ont une place très précise qui détermine leur traitement. Par exemple, un fichier de style placé dans le répertoire /assets/css prévaut sur (remplace) son équivalent provenant d’un dans un thème et placé dans le répertoire /themes/theme_name/assets/css. Hugo met à disposition des développeurs la commande hugo serve qui permet d’initialiser le site sur un serveur web local, automatiquement actualisé à chaque modification.

Le CMS Wordpress peut être considérer comme un framework dans le sens où il organise une base de données et met à disposition une série de fonctions pour construire des pages web compatibles avec des thèmes et mises à jour régulières.

VueJs peut être considéré comme une bibliothèque pouvant être intégrée à un site web pour en faire une interface dynamique. L’une de ses fonctionnalités est la création de web components (composants HTML prescrits en JavaScript et intégrés au DOM). Il est possible de pousser cet usage jusqu’à créer des composants mêlant HTML, JavaScript et CSS dans des fichiers .vue nécessitant un environnement d’exécution [[20201224140951]] adapté. Il devient alors un puissant framework pour générer des pages web dynamique très efficacement. Pour s’implémenter dans cet environnement d’exécution particulier, des bibliothèques se sont adaptées à VueJs avec une version particulière.

gestionnaire de dépendances

id :20210221151929
dernière édition :
type :architecture

[[20200701083222]] dépendances logicielles

Dans l’espace d’un logiciel [[20210221144451]] on retrouve de nombreuses bibliothèques [[20210417145938]], des frameworks [[20200701222949]] ainsi que des outils de développement [[20201224152456]]. Tous peuvent être installés en une commande grâce aux gestionnaires de dépendances.

Ce sont des logiciels installés sur la machine du développeur. Ils sont connectés à des serveurs de livraison de fichiers. À chaque installation d’un paquet une liste de configuration est complétée et peut être transmise à un autre développeur. C’est le fichier package.json de NodeJs. Il n’aura alors plus qu’à exécuter une commande qui téléchargera tous les paquets nécessaires.

Lors de l’enregistrement d’une dépendance, on prend garde à sa version. Elle elle notée dans la liste de configuration et fait référence. En effet, un changement majeur pour une dépendance peut entraîner le dysfonctionnement général du logiciel dépendant.

EnvironnementGestionnaireBase
JavaScriptNPM, Yarnhttps://www.npmjs.com/
PHPComposerhttps://packagist.org/
Pythonpiphttps://pypi.org/
RubyRubyGemshttps://rubygems.org/

git flow, programmation agile

id :20200707101657
dernière édition :
type :architecture
mots-clés :projet

[[20200707101208]] versionnement Git [[20200505212332]] méthode des projets agiles

Il n’est pas possible pour deux développeurs de travailler en même temps sur les mêmes fichiers. Ils doivent déplacer leur travail dans le temps ou l'espace pour pouvoir co-contribuer à un même projet. Les systèmes de gestion de version comme Git permettent de créer des branches et ainsi de réserver un espace à la contribution d’une personne et de reporter l’intégration de ces modifications dans le code source.

Ainsi la formation de l’équipe influe largement sur la modularisation du code [[20210313113130]]. On divise le code en fichiers et modules pour faciliter le travail des développeurs.

Équipe

Est lead-dev est une personne particulièrement soucieuse de la cohérence du projet, du respect de la présente convention de développement. Iel est capable de comprendre les différents langages et connaît les méthodes de développement. Sans nécessairement installer une hiérarchie, c’est un·e développeur·se qui obtient une responsabilité supplémentaire, celle de la revue de code. Iel ne corrige pas nécessairement le code, mais le relis et le valide ou non.

Git Flow

Le dépôt (repository) contenant le code source est divisé en plusieurs branches (branch) permettant de différencier plusieurs étapes dans le code source. Les branchs permettent de garder un code source bien lisibles

![schema git flow](./images fiches/git flow.png)

  • Master : c’est la branch unique maîtresse, dite de production. Elle ne contient que des produits finis répartis en versions et composés d’un code fonctionnel et abouti. À chaque merge dans le master on considère qu’une nouvelle version indépendante est créée, utilisable. On ne modifie jamais directement le master qui, s’il contient des bugs, est retravaillé dans la branch Develop.
  • Develop : c’est la branch unique de développement regroupant les fonctionnalités dernièrement développées et mises en commun : le tout doit encore y être debuggé par le·a lead-dev. Une fois que toutes les fonctionnalités ont été réunies et qu’elles interagissent sans bug, cette branch est merge dans le master.
  • Feature : c’est une branch de fonctionnalité. Il est possible d’en créer une multitude rigoureusement différenciées par leur nom feature-[nom_fonctionnalité]. On fait bien attention à y développer cette unique fonction tant qu’elle est indépendante (qu’elle se suffit à elle-même). Il est envisageable de fork une branch Feature sous ne nom feature-[nom_fonctionnalité]--[spécification], mais une à la fois et avec précaution. Une fois que cette fonctionnalité est aboutie, vérifiée et débuggée, elle peut être merge dans la branch Develop.

Source : https://fr.lutece.paris.fr/

Pour que les fonctionnalités soient bien indépendantes, il est nécessaire de découper préalablement le projet en travaux à assigner aux développeur·euse·s qui vont travailler dans leurs branch Feature.

Mouvements

Dans la mesure du possible, on ne merge que vers le haut : de Feature à Develop et de Develop à Master*.* L’appel (pull) d’une branch supérieure depuis une branch inférieure peut en effet causer des conflits. La supérieure, espace de merge et de débogage, peut être incompatible avec l’inférieure, non-débugué ou même compatible avec les merges d’autres Feature. Suite à un pull dans une Feature, elle devra être débuggée pour poursuivre son développement. Si ces corrections ne sont pas compatibles avec celles auparavant effectuées dans la branch supérieure, on va droit dans le mur. Même lorsque le pull ne cause pas immédiatement de bug, c’est lors du merge final de la Feature que peuvent apparaitre des anomalies complexes ; le code source est alors bon à jeter et il faut rollback. En prévention de cela, il ne faut pas supprimer les Feature qui n’ont pas été merge dans le Master.

Pour échanger autour du code qui a été commit, on profite des outils Git. Les développeur·euse·s doivent régulièrement envoyer leur travail sur le repository et annoncer leur avancement pour recueillir les remarques des collaborateurs et pouvoir profiter du rollback, utile en cas d’embourbement. Ainsi, un·e développeur·se qui pense avoir achevé son travail émet une demande de fusion (merge-request) pour la branch supérieure. Le·a lead-dev confirme ou non cette demande.

Il est important de ne pas accumuler les merges de Feature par intermittence, mais de les exécuter tous ensemble. Les forks de Develop donnant les branchs Feature doivent pouvoir partir d’une base fonctionnelle, débuggée. Sans cela il faudra re-alimenter (pull) les branches Feature avec la version corrigée et cela peut causer des conflits immédiatement ou par la suite. Le conflit, c’est l’échec du processus de versionning. Pour l’éviter, il faut débuter une nouvelle séquence de développement par un merge de toutes les branchs Feature au sein de Develop. Là on débugue et seulement ensuite on pourra fork pour développer les nouvelles fonctionnalités sur des bases saines. En attendant ce merge de toutes les branchs Feature au sein de Develop, les développeur·euse·s continuent de fork la même base de code source depuis Develop en laissant en attente les Feature abouties.

grammatisation

id :20200905210104
dernière édition :
type :inscription
mots-clés :Bruno Bachimont

C’est un concept de Bruno Bachimont. Il s’agit d’un « système d’expression qui donne lieu à une manipulation et qui de ce fait reconfigure nos possibilités même d’expression »[^1].

Il prend l’exemple de l’écriture comme grammatisation de la parole dans la mesure où l’écriture permet de « codifier dans un système de manipulation »[^1], comme l’alphabet, « permet de reconfigurer ce que l’on a à dire », le discours.

De la même manière, numériser une photographie argentique c’est faire la grammatisation du cliché : il pourra être manipulé sur des logiciels car transformé en code machine pouvant être calculé. On a ainsi augmenté nos possibilités d’expression.

« On réduit une expression à son pur potentiel calculatoire »[^1]

[[20210116135423]] inscription computationnelle

[^1]: Bruno Bachimont, Rhétorique de l’intelligibilité, vers des humanités du numérique, 2020

hacker

id :20210323194802
dernière édition :
type :undefined
mots-clés :politique

Un hacker est un débrouillard, une personne qui maîtrise l’outil informatique et s’emparent plus largement des questions d’éthique des réseaux (néthique, le partage des connaissances), de perfectionnisme du travail et qui refuse de l’autorité (du marché)[^1]. On le confond souvent avec son cousin cracker, destructeur de système informatique.

Il est opposé au lurker, l’utilisateur passif, au luser utilisateur irritant par sa non expérience de l’informatique. Ils sont critiques de l’arrivée massive des usagers d’Internet depuis le Septembre éternel de 1993, quand aux universitaires (formés entre septembre et octobre) s’est ajoutée la population inexpérimentée (impossible à former).

Communauté

Les hackers sont fondamentalement communautaires. Ils fabriquent des outils informatiques pour le bien communs. Parallèlement, ils sont soucieux de prouver (netiquette, reconnaissance en ligne) leur mérite par leurs compétences personnelles, leurs réalisations et revendiquent leur paternité sur leur réalisations, leur code.

Cela se mue chez en une volonté d’obscure. Celle de se réfugier dans (ou de concevoir) des interfaces inutilisables par le plus grand nombre (non usage ou non expérience). Elle leur donne un sentiment de satisfaction et de privilège dont ils jouissent en élite[^2]. Même dans cette élite, il doivent se distinguer parmi les nombreux challengers.

Culture du mot

Par le code, la ligne de commande, les hackers entretiennent la culture du mot[^3]. Ils manipulent en continu le clavier (sans être interrompus par la souris) et le vocabulaire, la syntaxe ; la composition d’un langage dans un système pour entretenir une « expression puissante et compacte »[^3].

« Les utilitaires du système UNIX sont une sorte de jeu de construction Lego pour les fabricants de mots. Des tuyaux et des filtres relient un utilitaire au suivant, le texte circule de manière invisible entre eux. Travailler avec un shell, des dérivés d'awk/lex, ou l'ensemble des utilitaires est littéralement une danse des mots. »[^3]

[^1]: Pekka Himanen, L’éthique hacker, 2001 [^2]: David M. Nichols, The Usability of Open Source Software, 2002 [^3]: Miller Freeman, The Elements Of Style: UNIX As Literature, 1998

headless CMS

id :20210312173555
dernière édition :
type :processus
mots-clés :technique

Par rapport aux CMS (Content Managment System) traditionnels (Wordpress, Joomla…) le headless CMS (système de gestion de contenus sans interface) n’a par d’interface front end. On ne garde que les interfaces suivantes :

  • la gestion des données, via une interface back end de modélisation et d’enregistrement ;
  • le système de requêtes via une API [[20200701221037]].

L’avantage de ce système est sa souplesse, sa robustesse grâce aux API. Il permet de réaliser des projet ad hoc, destiné à un usage particulier.

Souplesse

Greffés sur une seule base de données, les headless CMS peuvent recevoir et distribuer de l’information à une multitude d’interfaces et terminaux (site web, applications mobiles…) tout en centralisant les données qu’ils renvoient. L’API peut ainsi capter et renvoyer une variété de requêtes.

Ils permettent aussi à une variété d’usagers de modifier les données du site avec une gestion stricte des permissions d’utilisateurs authentifiés.

Robustesse

Séparer la base de données de son affichage permet de limiter les réactions en chaînes en cas de problèmes techniques ou simplement de maintenance [[20210304181626]] des interfaces connectées. L’accès est également plus difficile pour les intrus, les intéractions étanat limitées à des requêtes à une API limitée.

histoire de OpenSSL

id :20200705101927
dernière édition :
type :undefined

Dans son livre Sur quoi reposent nos infrastructures numériques ? (2017), Nadia Eghbal évoque le groupe de développeurs réunis en 1998 qui a construit OpenSSL. Un développeur à temps plein et une poignée de développeurs bénévoles maintiennent depuis un logiciel qui sécurise une très grande partie des infrastructures du web, même les GAFAM, Netflix, notamment pour les transactions bancaires.

Cette équipe a manqué de moyens durant toute son existence, et aujoud’hui encore elle compte sur un bien faible effectif et peu de dons par rapport au service qu’elle rend à l’humanité.

« Il y avait juste de quoi payer le salaire d’un développeur, Stephen Henson. Cela signifie que les deux tiers du Web reposaient sur un logiciel de chiffrement maintenu par un seul employé à temps plein »[^1]

Une faille majeur, Heartbleed, a permise « à n’importe quel pirate suffisamment doué de détourner des informations sécurisées en transit vers des serveurs vulnérables »[^1]

« Ce qui est mystérieux, ce n’est pas qu’une poignée de bénévoles surchargés de travail ait raté ce bug, mais plutôt qu’il n’y ait pas eu davantage de bugs de ce genre »

[^1]: Nadia Eghbal, Sur quoi reposent nos infrastructures numériques ?, 2017

hyper

id :20210114195936
dernière édition :
type :processus

hyper- est un préfixe largement utilisé dans le domaine du numérique avec hypertexte, hypermédia… On lui trouve un sens mathématique, celui d’extension, de généralisation[^1]. Ainsi, hyper- est relatif à la structure et non à la taille[^1].

« Sens spatial ou quasi-spatial de ‹ au-dessus ›, ‹ au-délà › »[^2]

Cette notion d’extension est bien souvent une notion de mise en réseau, de liaison entre des objets d’un espace donné.

[[20200622164608]] hypertexte

L’hyper- structure n’est pas perceptible directement par nos sens. Il faut une machine pour pouvoir l’apprécier.

[^1]: Ted Nelson, The Home Computer Revolution, 1977 [^2]: Trésor de la langue française

HyperCard

id :20200622183005
dernière édition :
type :architecture
mots-clés :histoire

HyperCard est un logiciel développé par Apple en 1987 pour Mac OS versions 9 (compatible avec les versions antérieures). Il inclut une interface graphique et un langage de programmation, HyperTalk (langage de programmation à la syntaxe très proche de la lange anglaise rendant la programmation accessible) permettant de réaliser des applications.

put the value of card field "typehere" into theValue

Le logiciel permet de créer des bases de données (piles de cartes si on utilise le jargon du logiciel), par exemple, un carnet d'adresses : l'utilisateur créer les champs (prénom, nom, adresse, téléphone… ) et n'a qu'à instancier les cartes ainsi formatées.

[[20200707113753]] instance informatique [[20200624194717]] fiche comme modèle de données [[20200623180525]] base de données

Les piles se présentaient sous la forme d'un diaporama et deux flèches permettaient de faire défiler les cartes. Le logiciel proposait nativement une série de pile pré-conçues et supportait textes, images et sons. Il était également possible d'ajouter des boutons, de leur associé des actions comme jouer un son.

Le logiciel inclut une fonction de recherche dans les données et il était possible au clic de passer d'une carte à une autre. C'est l'un des premiers procédé hypertexte assimilable à un système de fiche.

[[20200622164608]] hypertexte

« It's kind of the freedom to organize the information, according to are things or associate with each other, not just according to the next in the list »[^1]

[^1]: Bill Atkinson, vidéo Hypercard

hypermédia

id :20200625163043
dernière édition :
type :inscription

[[20210114195936]] hyper [[20200622164608]] hypertexte

Sont hypermédias les supports combinant plusieurs type de média comme la son, l’image ou la vidéo. Ils profitent de la technologie hypertexte qui permet « d’évoquer simultanément les questions liées à la nature du support ou du média et celles liées au type d’organisation qu’il met en œuvre »[^1]

« L'autre idée [avec l'hypertexte], qui est indépendante et largement une question de technologie et de temps, concerne les documents multimédias qui incluent des graphiques, de la parole et de la vidéo. Je ne discuterai pas davantage de ce dernier aspect ici, bien que j'emploierai le mot ‹ Hypermédia › pour indiquer que l'on n'est pas lié au texte. »[^2]

[^1]: Olivier Ertzscheid, Les enjeux cognitifs et stylistiques de l’organisation hypertextuelle, 2002 [^2]: Tim Berners-Lee, The original proposal of the WWW, HTMLized, 1990

hypertexte

id :20200622164608
dernière édition :
type :architecture

[[20210114195936]] hyper [[20200625163043]] hypermédia

Thed Nelson, considéré comme l'inventeur du terme, donne la définition suivante de l'hypertexte : « une écriture-lecture non-linéaire donnant à l’utilisateur une liberté de mouvement  » soit un système basé sur l’interaction (« hypertextualité »[^2]) dans l’espace d’une base documentaire.

Hypertexte désigne tantôt un principe d'organisation « réticulaire » (en réseau [[20210414220755]]) de l'information, tantôt une série de techniques et de logiciels. On retrouve son inspiration dans les techniques documentaires et informatique que l'hypertexte continue d'enrichir, mais aussi dans les théories utopistes du savoir universel (Paul Otlet, Vannevar Bush).

« l’hypertexte une notion et non une technologie, un mode de lecture-écriture qui s’est incarné à travers des techniques très différentes et qui ne saurait être réduit à une seule d’entre elles »[^1]

On retrouve l'hypertexte tant dans les documents papiers (index, sommaire, note de bas de page… ) que les documents numériques (fichier PDF, page web, fichier de code… ).

Histoire

L’hypertexte a été conceptualisé dans les années 1930, notamment par Paul Otlet dans son Traité de documentation et Vannevar Bush avec sa théorie du Memex, son article As we may think. Ils ont « nourri » ce concept avant qu’il n’arrive en informatique, dans les années 80, notamment grâce au logiciel HyperCard de Apple.

[[20200622110109]] memex de Vannevar Bush [[20200622164608]] HyperCard de Apple

Déploiement

[[20200829163448]] organisation, structure et système

Un système hypertexte se déploie dans une base documentaire dans la mesure où chaque élément cible est identifié dans les limites de la base. C’est à cette condition que les liens sont fonctionnels et pérennes.

[[20200622101202]] namespace (espace de nom)

« L’hypertexte est ce qui reste de l’édifice du sens, une fois la pierre du texte ôtée »[^2]

L’hypertexte est « une structure indéfiniment récursive du sens »[^2] : il projette son sens propre, donne du sens à sa source, et recommence.

Cardinalité

La cardinalité d’un système hypertexte est « la possibilité d’établir des liens hypertextuels non plus mono-directionnels mais multi-directionnels (depuis un ou plusieurs documents, vers un ou plusieurs autres), leurs ancres faisant alors office de pivot »[^2]. On décentralise la connaissance : « L’hypertexte est un système infiniment dé-centrable et re-centrable dont le point de focalisation provisoire dépend du lecteur »[^3]. L’hypertexte dépasse les trois dimensions, le domaine de ce qui peut être perçu, d’où le préfixe hyper-. L’hypertexte est la géométrie non euclidienne du texte.

Vue graphique

Une base hypertexte est une organisation rhizomatique dans la mesure où toute idée (nœud) peut réciproquement en influencer une autre, sans soucis hiérarchique.

[[20200625115033]] formalisme de la connaissance [[20200625172823]] théorie des graphes

On retrouve la notion de hiérarchie dans la structure interne des documents hypertexte (enchaînement des titres de différents niveaux). Elle permet notamment de réaliser des transclusions (inclusion d’une référence dans une autre).

Notre esprit procède notamment par associations : on estime qu’une idée est le résultat de la combinaison d’autres idées, elles-mêmes synthèses de champs conceptuels plus ou moins larges et puisés dans une galaxie. C’est de là que vient le besoin de « non-linéarité » que l’on évoquait dans la définition de Thed Nelson : on ne peut saisir une idée sans saisir son champ. Lequel ne s’étend pas de manière linéaire.

« toute l’acquisition du langage consiste à associer des mots et des objets, à désigner des abstractions par des concepts […] tout effort intellectuel, du plus simple au plus complexe, passe par l’activation d’un réseau d’associations qui permettent à la pensée de se mettre en place et de saisir les objets et/ou les concepts qu’elle vise à appréhender »[^2]

Inscription

L’hypertexte comme système est basé sur l’inscription d’hyperliens comme unités. Un hyperlien se compose « d’une ancre reliant un nœud-source et un nœud-cible »[^2].

[[20200622140512]] wikilinks

Cette définition inclut volontairement de très nombreux systèmes nés avec l’écriture. Les notes de page et unités de glossaires, index, ou même simples listes de documents sont autant de lien hypertextes.

Utilisation

On cherche à mettre en place de la sérendipité : permettre aux utilisateurs de découvrir par hasard ou sagacité. C’est particulièrement pertinent car l’esprit humain fonctionne par association d’idée.

[^1]: Alexandre Serres, Hypertexte : une histoire à revisiter, 2015. [^2]: Olivier Ertzscheid, Les enjeux cognitifs et stylistiques de l’organisation hypertextuelle: le Lieu, Le Lien, Le Livre, 2002 [^3]: George Landow, Hypertext, 1991

index de l’API

id :20210524081927
dernière édition :
type :programmation

[[20200701221037]] API, interface de programmation

L’index (liste ordonnée avec renvois) de l’API recense exhaustivement toutes les entités de l’espace de nom [[20200622101202]]. Ils peuvent être générés grâce à des logiciels comme JSDoc ou phpDocumentor qui vont analyser les commentaires inscrits et leur cible dans le code source [[20201220084534]] pour générer des fichiers HTML (effectuer une documentarisation [[20210408172535]]) avec une navigation, une mise en page permettant de retrouver ces entités et leurs caractéristiques.

JSDoc

Ce générateur produit une série de fichiers HTML pour traiter l’espace de nom [[20200622101202]] sur deux plans : global et par sous-espace, selon la portée des variables [[20200522093949]]. Ainsi, les variables [[20210427194405]] inscrites à la racine comme authorName et findBook sont indexés dans une liste « Global » tandis que book est la racine de l’espace de nom (liste « namespaces ») éponyme, contenant l’attribut nb et la méthode create. Il sera plus aisé pour un lecteur de se déplacer dans les espaces de nom.

/**
 * An author name
 * @default
 */
const authorName = 'Marguerite Yourcenar';

/**
 * Create a book
 * @param {number} bookId - Id of the book
 * @return {object} Book object
 */
function findBook(bookId) { … }

/** @namespace */

const book = {

    /**
     * Number of books
     * @default
     */
    nb: 30,

    /**
     * Create a book
     * @param {string} title - Title of the book
     * @param {string} author - Author name of the book
     * @param {string} content - Text of the book
     */
    create: function(title, author, content) { … }
}

inscription computationnelle

id :20210116135423
dernière édition :
type :inscription
mots-clés :REVUE

[[20210502102039]] computationnel [[20201012091721]] signe formel

Dans ce sens, le code qui est transmis à la machine porte essentiellement sur ses opérations. Il n’est lui même qu’une abstraction d’un système basé sur la combinaison du binaire, via de portes logiques.

[[20210121192437]] matérialité d’un programme

« il est possible de comprendre la machine computationnelle comme une machine à écrire […] parce qu’elle permet aux humains d’écrire, mais parce que son fonctionnement repose sur un certain type d’écriture […] qui ne répond pas aux mêmes impératifs que ceux des humains »[^1]

L’écriture des machines « est unidimensionnelle et elle repose des signes monosémiques : la machine scanne un ensemble fini de signes sur un support »[^1].

« une machine computationnelle ‹ écrit › au sens où elle inscrit des symboles univoques sur un espace discrétisé et monodimensionnel »[^2] (p.461)

D’après Alan Turing[^3], une machine n’écrit pas, ne lit pas ; elle scanne (to scan), elle inscrit (to write down) et elle « manipule des symboles »[^2] (p.140). Elle n’interprète pas, n’a pas de mémoire ; elle suit en permanence le cours d’opérations pour effectuer des changements d’état sur ses supports (circuits, disques…).