Comment j'ai buté Excel

25 views
Skip to first unread message

Laurent Caillette

unread,
Jun 4, 2018, 2:37:55 AM6/4/18
to tec...@googlegroups.com

Maintenant que par la vertu d'une précédente prophétie auto-réalisatrice les SGBDR sont pratiquement morts, il est temps de passer à l'étape suivante, le sacro-saint tableur, dont la principale incarnation se trouve être Microsoft Excel. J'étais confiant, je n'étais pas à mon coup d'essai dans l'extermination de produits emblématiques. Après tout j'avais déjà consacré 2 ans à réinventer le traitement de texte avec "Novelang"
, puis 1 an à "mettre fin au règne des SGBDR"
. Donc l'extermination d'Excel me semblait tout à fait atteignable, avec cependant la contrainte de ne pas y passer plus de deux jours. Je suis fier d'annoncer que c'est chose faite. 


== Excel c'est quoi ?

Tout d'abord il convient de rappeler ce qu'est un tableur.

C'est un outil de calcul qui donne accès interactivement à une matrice dont les cellules peuvent être des valeurs, ou des formules référençant d'autres cellules. Dans les années 80 c'est devenu l'objet d'une adoration mystique par des gens qui croyaient par ce biais comprendre quelque chose à l'informatique, alors qu'en général ils se contentaient de faire de la mise en page et d'administrer des bases de données avec un outil qui n'est évidemment pas fait pour. 

Le tableur, c'est le triomphe d'un discours ambivalent qui glorifie les vertus révolutionnaires de l'informatique tout en prétendant que l'histoire s'arrête à un seul outil, qui le plus souvent se retrouve mal compris et mal utilisé. C'est vrai qu'Excel, c'est bien pour écrire des programmes en faisant un gros doigt à tous ces idiots d'informaticiens qui ont besoin de cinq années d'études post-bac pour apprendre faire une addition. (Bon d'accord les SGBDR ne les ont pas aidés mais je me suis déjà exprimé là-dessus.) 

Dans ce contexte, le tableur n'est là que pour être tué.

Il y a eu des tentatives de réinventer cette bête-là. J'aime particulièrement `Spreadsheet 2000`, décrit à la p. 17 de "An Extended Spreadsheet Paradigm for Data Visualisation Systems, and its Implementation"
. `Spreadsheet 2000` définit des sources de données tabulaires et des opérateurs de transformation qui produisent d'autres sources. Au moins c'est compréhensible et élégant. Mais `Spreadsheet 2000` est mort depuis 20 ans et personne n'a l'air pressé de lui redonner vie. Tant pis ou tant mieux.


== Le problème

Il y a peu j'ai du mettre en place une comptabilité domestique. J'étais dans le cas typique du truc simple qui devrait se résoudre avec une feuille de calcul, éventuellement avec une base de donnée bureautique. Je voulais un logiciel libre comme OpenOffice. Je voulais un maximum de contrôles lors de la saisie. Après il y a juste quelques rapprochements à faire entre diverses écritures pour sortir quelques totaux. Donc pas la mort, apparemment.

Je découvrais la comptabilité donc j'ai bricolé un peu. J'ai compris que le plus important c'était de bien dissocier la date d'un mouvement de l'exercice auquel il s'appliquait. J'ai vu que tout pouvait se modéliser sous forme d'événements de type preuve de vente, facture ou réglement. 

Mais plus j'essayais de faire rentrer ça dans un outil bureautique moins ça marchait. 


== La solution

Je me suis dit "Bande d'enfoirés ça serait plus simple en Kotlin. Surtout si les lignes d'événements je les déclare directement comme constantes dans le code !"

Les constantes dans le code ça limite la séparation donées-traitement et on n'a pas besoin d'écrire un parseur ou une couche d'accès aux données. 

Après il faut bien utiliser les possibilités du langage. J'ai mis les dates des mouvements et des exercices, ainsi que les imputations comptables dans des ``enum`` de façon à limiter les erreurs de saisie. J'ai créé des ``data class`` pour représenter les différents événements. J'ai écrit des fonctions pour faire les rapprochements et pour imprimer des rapports en mode caractère.

Une ``enum`` Java possède au plus 65535 éléments, donc si on y met une série de dates elle s'étendent au moins sur 179 ans. Les événements sont dans une liste, qui accepte jusqu'à 2 milliards d'éléments. Donc j'ai la paix pour quelques temps.

Si j'ai besoin de restructurer j'ai les outils de refactorisation d'IntelliJ IDEA, ainsi que l'éditeur avec des regex bien pratiques, ainsi que l'édition multicurseur (géniale). Si je veux un rapport particulier, je me le code en Kotlin qui manipule très bien les collections. Tout est testable unitairement. Le code est versionné avec git. 

Voici à quoi ressemble une ligne d'événement :

<<<
  Reglement( D_2018_01_31, E_2018_02, FRAIS, 60.39f, "Leclerc (essence)" ),
>>>

Ça veut dire que le 1^er mars on effectue un réglement de ``60,39 €`` pour des frais durant l'exercice de février. Et une fois que le programme qui pond tous les rapports compile et s'exécute sans erreur, on est sûr que toutes les validations possibles ont eu lieu. 

En plus il est facile d'intégrer des fonctionnalités qui seraient horribles à développer en VBA, comme l'import de fichiers OFX pour pointer les mouvements dans un compte bancaire. 


== Utilisabilité

Il est clair que ma solution uniquement basée sur un langage de programmation ne peut pas être mise entre les mains de gens "normaux". 

Ah, vraiment ?

J'ai mis en place une solution analogue pour une plateforme de négociation de produits dérivés. L'expert fonctionnel élabore une liste de produits prédéfinis. Pour gagner du temps on a décidé de se passer de procédés biscornus comme l'import de feuilles Excel et de lui faire taper directement du code Java. Il y a IntelliJ IDEA sur la machine du gars, il sait faire un pull et un commit-and-push dans son repo perso sur GitHub. Il sait sur quel bouton appuyer pour tout construire et lancer la démo. 

Comme la syntaxe est très simple et que l'éditeur montre les erreurs, on n'a jamais eu de souci de ce côté-là. Et s'il y a besoin de refactoriser c'est le programmeur qui le fait, après on se synchronise avec git.

On pourrait penser que le tableur est plus facile d'emploi du fait de la saisie interactive. Par exemple, il détecte certains formats invalides. Mais c'est très limité. Ce qu'on veut c'est un message d'erreur qui dise que la donnée X ne colle pas avec la donnée Y et pourquoi, et si c'est un peu compliqué ça ramène fatalement au traitement par lot. Il faut noter qu'en amont de ça un éditeur pleine page avec de la coloration syntaxique fournit déjà un retour d'erreur satisfaisant.

Donc Excel ne nous manque pas.


== Conclusion

IntelliJ IDEA est capable d'indexer des millions de symboles pour fournir une aide à la saisie. Autant que je sache il supporte la compilation différentielle. Comme on peut tester son code unitairement il y a moyen de vérifier que les rapports fonctionnent sans charger toutes les données. Si on a besoin de rapports sophistiqués, Kotlin est le meilleur langage généraliste du moment, réunissant tous les avantages de Java, Python et JavaScript. Et si on a besoin de jolis rapports, la bibliothèque "``kotlinx.html``"
fournit un langage de patronnage hors-pair pour du XML ou du HTML. 

Depuis qu'elles existent, les suites bureautiques naviguent péniblement parmi des exigences contradictoires, la principale étant de faire croire à leurs utilisateurs qu'ils n'étaient pas des développeurs. Pendant ce temps là, les environnement de développement et les langages ont évolué, la mémoire disponible a formidablement augmenté. Pour automatiser des traitements on s'aperçoit que l'important c'est la restructuration, le versionnage et la testabilité, ce qui met hors-jeu les solutions de type base de donnée bureautique ou tableur.

Emmanuel Puybaret

unread,
Jun 4, 2018, 9:22:14 AM6/4/18
to tec...@googlegroups.com
Intéressant mais on n'est pas aussi obligé de faire du VB pour utiliser Excel, ça peut être juste utile pour faire un bô tableau avec deux trois sommes...
En tout cas, si c'était aussi pour de débarrasser de Microsoft, c'est raté :D

A+
--
Emmanuel PUYBARET
Sweet Home 3D developer

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "techos".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse techos+un...@googlegroups.com.
Pour envoyer un message à ce groupe, envoyez un e-mail à l'adresse tec...@googlegroups.com.
Visitez ce groupe à l'adresse https://groups.google.com/group/techos.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

Laurent Caillette

unread,
Jun 4, 2018, 10:22:14 AM6/4/18
to tec...@googlegroups.com
Salut Emmanuel,

Hé hé les deux ou trois sommes, si c'est juste des sommes tu peux les faire en Kotlin, et si c'est de la mise en page alors je recomande un outil de mise en page. Non blague à part si tu veux dire que tant que c'est du jetable ça peut être fait avec Excel, oui allons-y, et si ça dure on le recode avec un vrai outil. Une objection courante à ce genre de recodage, c'est qu'une interface graphique avec une base de données ça va coûter cher. Ce que je propose c'est une approche où tu t'affranchis des trucs qui coûtent cher, à savoir l'interactivité et la persistance. Et ça je ne l'avais jamais vu avant. Tu as déjà rencontré des gens qui disent qu'ils utilisent javac comme moteur de base de données ?

Concernant GitHub je suis atterré. Quand tu vois la poubelle qu'est devenu Skype après le rachat par Microsoft, ça fait peur pour GitHub. Heureusement si tu n'utilises que les fonctionnalités de git la migration peut être indolore. Celui qui n'aime pas Bitbucket et ses nombreux cousins peut s'en sortir avec un `git daemon` sur un serveur accessible par un tunnel SSH.

Mais non le coup de lance-flammes sur Excel ce n'était pas pour se débarrasser de Microsoft, vu que dans ma vie c'est déjà fait. C'est juste que le tableur ça aurait du rester un truc de niche qui ne dérange personne, comme la programmation en Maple (je prends cet exemple parce que je ne sais pas à quoi ça ressemble).




Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse techos+unsubscribe@googlegroups.com.

Pour envoyer un message à ce groupe, envoyez un e-mail à l'adresse tec...@googlegroups.com.
Visitez ce groupe à l'adresse https://groups.google.com/group/techos.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "techos".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse techos+unsubscribe@googlegroups.com.

Sylvain Rey

unread,
Jun 4, 2018, 1:03:53 PM6/4/18
to tec...@googlegroups.com
Hello

Dis-donc, Laurent, tu es encore en mode bazooka ? C'est toujours raffraichissant, mais pas forcément très fin :-D
Quelques remarques pour le plaisir d'être contrariant et de me faire l'avocat du diable) :

* La mort d'Excel parce que tu ne l'as pas utilisé sur un use case, c'est un peu osé non ?
La force d'Excel, c'est que n'importe qui peut faire une des choses les plus dures... une GUI. Tu auras du mal à lui enlever ça.
Accessoirement, oui, c'est aussi une base de données, un IDE qui ne veut pas mourir, une communauté d'"experts", des tonnes de plugins... Pris séparément, chaque partie est le pire de ce qu'on peut faire actuellement, j'en conviens. Mais c'est un tout dont le cout d'entrée est ridiculement faible.

* Skype, c'était déjà pourri bien avant le rachat, non ?

* Je sais pas ce que Microsoft veut faire avec Github mais je sais ce qu'ils ont fait avec Git, ils l'ont amélioré, et ils ont tout redonné à la communauté - comme les temps changent !
Allez, si, je sais ce qu'ils veulent faire avec Github, ils veulent être présent dans toutes les communautés de développement : .net core sur toutes les plateformes, linux sous windows, Visual Studio Code pour tout le monde, tous les produits possibles sous Azure, etc.
Vous voulez vraiment avoir peur ? imaginer leurs prochaines emplettes : StackExchange, Docker, Atlassian ? Ca fait mal rien que d'y penser, hein ? allez, imaginez Suse, pardon, Redhat maintenant...


Oh et puis, tant que j'y suis, allons-y de ma diatribe à 2 centimes :

* La mort des RDBMS, tu es bon pour le ressortir encore dans 5 ans... et encore dans 5 ans... Bien sûr que le modèle relationnel ne fait pas tout, mais on a déjà eu ce débat en 1996, 2001, 2006, 2012, 2016...

* Même si Oracle a fait fuir beaucoup de monde et a du retard sur l'adhésion à son offre cloud, il me semble qu'ils sont encore à la pointe d'un paquet de choses ; j'essaierai bien des tas de produits chez eux mais on n'est pas encore assez riches

* dans les autres news du jour, on a la nième mort d'Intel avec ARM qui annonce avoir la puissance d'un i5 d'il y a deux ans pour dans deux ans... et on nous rappelle que le dernier iphone le fait déjà (oui peut-être pendant 30s, le temps que la coque fonde)

* L'IA c'est la fête, tout le monde en fait, les API sont gratos chez Google, Azure te mets plein de crédits si tu essayes chez eux, DataRobot te fait tourner tous les algos du monde en parallèle. En fait, on fait juste du ML à la noix et tout le monde se vautre lamentablement sur le reste parce que même avec cette débauche de technologie, je rencontre encore plein de gens qui ne calibrent pas leurs modèles, ne comprennent pas leurs propres données, qui confondent corrélation et causalité, voire même cause et conséquence.
Parfois, j'ai peur que ce soit moi qui évite les collisions avec un bus, une voiture ou un pont quand résoud en recaptcha.

* les ordinateurs quantiques sont pour dans 5 ans, promis juré craché, avaec au passage la mort de SSL par la quantum supremacy. La preuve on a déjà des trucs qui valent des dizaines de millions qui manipulent 5 pauvres qbits une fois qu'on les a abaissés à 0,01 degrés kelvin et qui ne résolvent qu'une seule classe de problème avec, accrochez-vous, "seulement" 80% d'erreur. Yeah baby! 


C'est pas que tous ces changements ne déplairaient, que j'ai peur des nouveaux paradigmes, mais b(*$el, maintenant faut se sortir les doigts et livrer, les gars !
Et puis faut comprendre, on s'est déjà tappé les trotinettes en l'an 2000 à la place des voitures volantes, on a legitimement le droit de râler. Et l'an 2000, c'était y a longtemps. Les types nés en 2000 vont se faire embaucher par nos senior managers (appelés Kevin) dans deux ou trois ans. Bonne chance avec tous ces marroniers qu'on vous laissent ! En plus, on vous rajoute que vos jobs vont être pris par les IA que vous aurez vous-même codées !

Nous, la techno avec laquelle on a grandit, et dont on est le plus fier, c'est le web ! Ca vous la coupe, bande de petits morveux, hein ! C'est grâce à nous tout ça.
Et comptez-pas sur nous pour vous avouer qu'après plus de 20 ans, on ne sait toujours pas vraiment si oui ou non, c'est une bonne idée de faire du HTML pour faire nos GUI.

C'est moche d'avoir 40 ans.

Sylvain

Henri Tremblay

unread,
Jun 4, 2018, 1:20:19 PM6/4/18
to tec...@googlegroups.com
Mouarf...

J'ai plein de crédit Oracle (Oracle Developer Champion et tout ça...) si tu veux t'amuser. Le règle c'est que tu me fasses un compte rendu pour voir si ça marche :-) Parce que j'ai juste pas le temps de tester.

Emmanuel Puybaret

unread,
Jun 4, 2018, 1:50:13 PM6/4/18
to tec...@googlegroups.com
Après du Laurent Caillette "j'vais tout casser", du grand Sylvain Rey "j'remets tout à sa place" !
Merci pour la bonne tranche de rire :D
Bonne soirée,

--
Emmanuel PUYBARET
Sweet Home 3D developer

Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse techos+un...@googlegroups.com.

Sylvain Rey

unread,
Jun 4, 2018, 1:52:24 PM6/4/18
to tec...@googlegroups.com
Ah ah, mais c'est qu'on pourrait potentiellement s'arranger !
On a bien embauché, dès que l'équipe fait tout mon boulot, je repars à l'assaut des nouveautés :-)

Sylvain Rey

unread,
Jun 4, 2018, 1:54:25 PM6/4/18
to tec...@googlegroups.com
Promis, ça n'avait pas vocation de plus que la rigolade:-)
Et dans 6 mois, je serai à mon tour dans un cycle "on va tout casser" - je compte sur Laurent pour continuer à me booster d'ici là !

Laurent Caillette

unread,
Jun 4, 2018, 4:03:14 PM6/4/18
to tec...@googlegroups.com
Salut Sylvain,

Hein que ça fait du bien de se lâcher !

Sérieux Skype à un moment ça marchait bien et c'était décentralisé. Pour le boulot on est passés à Jitsi. C'est pas franchement pire.

La mort des SGBDR toujours au programme dans 10 ans ? J'espère bien ! Ça serait dommage de perdre une telle occasion de rigoler.

Concernant Oracle je ne sais pas ce qu'ils ont de bien à part les produits développés par Sun (Java et VirtualBox notamment). Il y a évidemment des trucs très fort dans leur SGBDR mais il y a tellement de bordel autour que tu as l'impression que comprendre leur catalogue ça devient ton boulot à plein temps. 

Pour l'IA je ne regarde pas trop les détails mais il doit y avoir moyen de bien se marrer, un peu comme les portails Web dans les années 2000. Je suis en train de mater le playthrough de Detroit: Become Human. Je peux mettre ça sur mon CV comme compétence en IA ? Ou faut que j'achète le jeu ?

Pour les trottinettes ça fait 20 ans que je rêve d'un modèle pliable hyper-compact. Par exemple le guidon serait une canne pliable avec un élastique à l'intérieur (comme les cannes d'aveugle) et un pommeau pour ne pas avoir un truc qui se mette à la perpendiculaire de l'axe de l'engin replié. Donc la voiture volante j'en suis encore très loin. Des idées pour un modèle nucléaire à base de MHD ?

Pour le Web, j'hésite, il ne faut pas confondre Web et Internet. Tu fait du ssh c'est pas du Web. Concernant le Web à la base on voulait un réseau de documents hypertexte, c'était l'Encyclopédia Universalis version électronique, et c'est complètement parti en testicule. Moi tout ce que je veux c'est un générateur de pages statiques qui marche, avec un moteur de patronnage plus supportable que les XSLT. Mais c'est encore trop demander.

Par contre, si le HTML pour les GUI est une bonne idée, ça je peux répondre. 

40 ans c'est encore jeune.






Chris Z

unread,
Jun 5, 2018, 8:01:11 AM6/5/18
to tec...@googlegroups.com
Intéressante analyse... Pour ta compta, t'avais regardé le "plain text accounting" (http://plaintextaccounting.org/) ? Y'a pas mal d'implémentations existantes et c'est du pur texte. J'ai personnellement utilisé Beancount pendant un temps pour ma compta perso.

Mais l'idée d'utiliser un IDE est séduisante. On passe d'un DSL externe (comme ledger) à un DSL interne (le code est la donnée et inversement) avec toute la puissance d'édition de l'outil. Hum, je me demande si y'a pas encore de la place pour un projet opensource de ce type...

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "techos".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse techos+un...@googlegroups.com.

Laurent Caillette

unread,
Jun 5, 2018, 9:47:01 AM6/5/18
to tec...@googlegroups.com
Salut Chris Z,

Pour la compta je n'avais aucune connaissance de cette approche pur texte, mais j'adore ! Cela dit j'aurais peut-être eu du mal à faire rentrer quelques spécificités dans les outils existants.

J'aimerais bien montrer ce que j'ai fait mais il y a trop d'informations personnelles. Dans les trucs qui pourraient resservir il y a le chargement des fichiers OFX basé sur ofx4j ainsi qu'un mini-générateur de rapports en texte pur (ça je peux le diffuser). 

Ceux qui voudront populariser leurs créations pourront les rendre exécutables dans le navigateur, avec Kotlin c'est facile, surtout si on a juste une sortie console.


Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse techos+unsubscribe@googlegroups.com.

Pour envoyer un message à ce groupe, envoyez un e-mail à l'adresse tec...@googlegroups.com.
Visitez ce groupe à l'adresse https://groups.google.com/group/techos.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "techos".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse techos+unsubscribe@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages