Auteur/autrice : Éric

  • I know jiu jitsu

    Je me remets pour la troi­sième fois à l’ap­pren­tis­sage de Rust à partir du livre plus ou moins offi­ciel. Les deux fois précé­dentes, j’avais lâché par manque d’en­vie ou d’at­ten­tion.

    Cette fois ça tient.

    Parfois c’est le moment, parfois non. Peut-être est-ce juste ça, mais je note tout de même une diffé­rence dans la méthode.

    Les dernières fois j’avais plein de ques­tions, sur « pourquoi pas comme ça … ? », « et si je veux faire … ? », « est-ce qu’on ne pour­rait pas faire … ? ». Avan­cer en lais­sant plein de ques­tions qui ne trouvent pas de réponse faci­le­ment sur Inter­net c’est possible mais vite pénible. Ça frei­nait clai­re­ment mon appren­tis­sage.

    Cette fois-ci je suis dans Cursor, avec un LLM à mes côtés qui répond à tout de façon rela­ti­ve­ment satis­fai­sante. Ça semble faire une diffé­rence.

  • Seul mais avec les autres

    J’ai déserté les réseaux sociaux il y a plus d’un mois.

    J’étais en surcharge. Ça n’au­rait pas été la première fois, mais j’ai commencé à avoir des échanges tendus avec des personnes que j’aime parti­cu­liè­re­ment, à qui je tiens.

    Quelque part ça m’a peut-être fait du bien.

    En même temps ces réseaux c’est l’es­pace où j’ar­rive à expri­mer des pensées. C’est aussi celui où je retrouve ces personnes auxquelles je tiens.

    Ce soir j’ai revu une de ces personnes pour un verre, son sourire. Je crois que c’est impor­tant pour moi.

    Partir c’est me retrou­ver encore plus seul, me couper des autres. Ça ne résout rien.

    Je ne sais pas trop comment équi­li­brer tout ça.

  • Quel statut ?

    On me pose régu­liè­re­ment la ques­tion alors je pose mes notes ici pour y faire réfé­rence.

    Aver­tis­se­ment : Je ne suis pas expert. Je ne garan­tis abso­lu­ment rien et je ne rempla­ce­rai pas un conseil expert. L’objec­tif est juste de vous permettre de savoir dans quel sens cher­cher.

    Sans enga­ge­ment
    Sans complexité
    Micro-entre­prise
    Portage sala­rial
    Avec protec­tion chômagePortage sala­rial
    En paral­lèle d’une indem­nité chômageSASU en divi­dendes
    Acti­vité annexe, sans fraisMicro-Entre­prise
    Acti­vité annexe, possi­bi­lité de factu­rer des fraisSASU en divi­dendes
    EURL
    Acti­vité prin­ci­paleEURL
    SASU en salai­re+­di­vi­dendes

    Petite acti­vité avec très peu de frais

    La micro-entre­prise a une fisca­lité vrai­ment avan­ta­geuse et des contraintes décla­ra­tives très réduites (décla­rer le chiffre d’af­faire trimes­triel­le­ment, et la TVA si vous y êtes soumis).

    Deux écueils :

    1. La fisca­lité se fait sur le chiffre d’af­faire et pas sur le résul­tat. Si vous avez des frais, ils ne se retran­che­ront pas au montant impo­sable. Le régime peut alors deve­nir bien moins inté­res­sant.
    2. Le chiffre d’af­faire est plafonné (77 k€ par an pour de la pres­ta­tion de service) et un dépas­se­ment deux ans de suite vous fait sortir du statut.

    La seconde contrainte peut toute­fois être contour­née si vous orga­ni­sez vos factu­ra­tions pour ne dépas­ser qu’un an sur deux. La limite l’an­née du dépas­se­ment est alors celle du régime simpli­fié (254 k€, ce qui laisse de quoi voir venir).

    Acti­vité annexe durable où factu­rer des frais

    Si l’ac­ti­vité dure, il peut être inté­res­sant de passer à une SASU et se payer annuel­le­ment en divi­dendes.

    Vous pouvez passer votre micro-ordi­na­teur, l’im­pri­mante, le smart­phone, les dépla­ce­ments, la moitié de l’abon­ne­ment télé­pho­nique, la moitié de la connexion Inter­net et tout le reste qui vous sert profes­sion­nel­le­ment en frais. Si vous travaillez depuis une pièce dédiée vous pouvez aussi vous la sous-louer avec pour effet de réduire votre résul­tat impo­sable. Si vous ne le faites pas, vous payez TVA, IS, coti­sa­tions et IR pour rien, ce qui finit par faire de vraies sommes.

    Le défaut des divi­dendes c’est que vous ne les attri­buez qu’une fois par an et qu’e vous ne coti­sez pas au chômage, à la retraite ou à l’as­su­rance mala­die avec. Ça n’a de sens qu’en tant qu’an­nexe à une acti­vité prin­ci­pale.

    Note : Tant que vous ne touchez rien, les recettes de votre SASU n’entrent pas en conflit avec d’éven­tuelles indem­ni­tés chômage.

    Il y a plus de contraintes que sur la micro-entre­prise. Il y a une procé­dure de décla­ra­tion avec des statuts, une comp­ta­bi­lité annuelle à faire avec les décla­ra­tions asso­ciées, et le compte bancaire profes­sion­nel est obli­ga­toire. En pratique, toute­fois, il y a des services en ligne qui s’oc­cu­pe­ront de tout pour 50 à 100 € par mois.

    Acti­vité prin­ci­pale impor­tante

    Vous pouvez garder une SASU et vous payer en salaire. Si vous voulez opti­mi­ser les coti­sa­tions sociales (moins de coti­sa­tion mais moins de couver­ture) vous pouvez aussi faire un mix entre salaire et de divi­dendes.

    Si vous n’avez pas déjà une struc­ture, L’EURL sera cepen­dant vrai­ment plus inté­res­sante fisca­le­ment, au prix d’une protec­tion sociale un peu moindre.

    À l’op­posé, si vous voulez vous voir ce que ça donne 6 à 18 mois sans vous enga­ger dans une struc­ture, le portage sala­rial est proba­ble­ment une alter­na­tive inté­res­sante. Une fois les frais retran­chés (très variables, de 100€ par mois chez Jump à 10 ou 15% du CA chez les plus chers) c’est la même situa­tion qu’un sala­rié clas­sique, avec les mêmes coti­sa­tions et les mêmes protec­tions, chômage inclus. C’est le moins opti­misé fisca­le­ment et la société de portage sala­rial vous pren­dra son pour­cen­tage au passage.

  • Réglage fin du volume sur Macos

    Before you press the volume or bright­ness controls, hold down the Option and Shift keys toge­ther on your keyboard. Now go ahead and make your adjust­ments, and you should see the onscreen indi­ca­tor move forwards and back­wards in smal­ler incre­ments (four over each segment).

    Macru­mors

  • Appel à l’aide : train+­vélo

    On aime­rait aller de Lille à Amster­dam à vélo avec toute la famille. Ce trajet j’y tiens énor­mé­ment, notam­ment pour sortir de France et montrer autre chose au fiston.

    Ça veut dire un trajet Lyon->Amster­dam à l’al­ler, puis un Bruges, Lille, Dunkerque ou Calais->Lyon au retour, avec vélos et sacoches.

    Malheu­reu­se­ment, je sèche et j’ai besoin d’aide.

    Avant les réponses que vous m’avez faites, j’étais à deux doigts d’an­nu­ler les vacances d’été avec le fiston. Je retrouve un peu d’es­poir mais je n’y suis pas encore. Je suis preneur de tout ce qui pour­rait me faire avan­cer.


    Tout ça semblait simple mais trou­ver des trajets de train avec vélo est un vrai parcours du combat­tant. Souvent les sites ne proposent pas les combi­nai­sons néces­saires, ou ne savent pas véri­fier les places vélo.

    Grâce à votre aide, pour désor­mais je sais faire :

    • Lille -> Kortrijk -> Anvers -> Amster­dam
    • Lille -> Tour­nai -> Bruxelles -> Amster­dam
    • Bruxelles -> Amster­dam
    • Zurich -> Amster­dam

    Il me reste donc à rejoindre une de ces gares depuis Lyon pour complé­ter l’al­ler. C’est clai­re­ment le trajet en France qui est le plus diffi­cile.

    J’ai une option Lyon -> Paris Bercy mais l’ar­ri­vée ne se fait pas avant 16h30, ce qui veut dire ne pas repar­tir à Gare du Nord avant 17h30 au mieux. Je peux bien évidem­ment faire ça en deux jours mais si je dois encore rajou­ter une troi­sième jour­née pour aller jusqu’à Amster­dam, je vais faire plus de train que de vélo.

    J’ai l’im­pres­sion de pouvoir faire Paris Nord ->Lille Flandres en TER via Cambrai ou via Amiens mais les sites refusent de me montrer les horaires si filtre les trains pour n’avoir que ceux avec place vélo, ce qui ne me rassure pas non plus.

    Je n’ai pour l’ins­tant pas trouvé d’op­tion qui rejoigne direc­te­ment

    Au retour il me faudra de toutes façons pouvoir repar­tir en train vers Lyon depuis Bruges, Lille, Dunkerque, ou Calais. Je sèche de la même façon.


    Contrainte spéci­fique : Nous sommes 3. Il y a donc 3 vélos, dont un élec­trique assez lourd. Ma femme et mon fils ne portent pas les vélos. Je serai seul pour les travaux de force. Il faut comp­ter une dizaine de sacoches à trim­bal­ler par dessus.

    • Pour les corres­pon­dances il faut que je sorte tout du train, que je descende puis remonte chaque vélo dans les esca­liers jusqu’au nouveau train, et qu’on déplace toutes les sacoches en même temps. Il faut prévoir du temps.
    • Dans le même esprit, s’il faut en plus démon­ter les vélos puis les porter avec bagages jusqu’à la bonne voiture, je ne sais pas si j’au­rai vrai­ment le temps de le faire entre l’an­nonce du quai et le départ du train. Les options avec vélos démon­tés sont vrai­ment celles de dernier recours.
    • On ne peut pas mettre une personne à un bout du train et les deux autres à l’autre bout, encore moins s’il faut démo­ter les vélos. La plupart des TGV et Euros­tar ne permettent pas d’avoir une seule réser­va­tion pour trois voya­geurs à vélo : C’est à cause de ça.
    • Le fait qu’un des vélos soit élec­trique exclut les Flix­bus et Blabla­bus (qui ne les acceptent pas).
  • Sauve­gar­der Pocket

    Je suis toujours dans mes sauve­gardes. Je veux avoir une copie de tout dans mes sauve­garde, données des services en ligne incluses.

    Je pensais faire ça faci­le­ment avec Pocket. Ils ont une API, assez simple.

    En pratique je me retrouve à faire essen­tiel­le­ment de l’in­gé­nie­rie inverse. La docu­men­ta­tion indique des choses qui n’existent pas ou ne fonc­tionnent pas, et ne donne aucune infor­ma­tion sur des éléments essen­tiels qu’on reçoit (genre la gestion des erreurs).

    Authen­ti­fi­ca­tion

    Contrai­re­ment aux méca­nismes OAuth habi­tuels, leur autho­rize ne renvoie pas de code tempo­raire à échan­ger. Pour récu­pé­rer l’access_token, il faut le deman­der avec le request_token obtenu lors de l’échange serveur à serveur initial.

    Ce request_token semble ne pas avoir de durée de vie. Il n’a en tout cas pas de refresh_token asso­cié.

    Méca­nisme de régu­la­tion

    L’API indique des limi­ta­tions à 320 appels par heure. C’est d’au­tant plus impor­tant que pour télé­char­ger mes plus de 29 0001 items par pages de 30 maxi­mum, je vais forcé­ment dépas­ser le nombre de requêtes que je peux faire en une heure.

    Il y a un méca­nisme auto­ma­tique prévu pour la régu­la­tion mais le serveur n’en­voie pas les entêtes prévues pour ça. Je sais juste qu’au bout d’un moment j’ob­tiens des erreurs 403 et que ça semble venir de là.

    Je vais devoir gérer ça à la main. Pour l’ins­tant je note l’heure de chaque requête dans un tableau. Quand mon tableau fait 320 éléments, je retire le premier élément et attend l’heure de cet élément + 1 heure avant de conti­nuer.

    Pagi­na­tion

    Le méca­nisme pour la pagi­na­tion est assez famé­lique : 30 items maxi­mum par requête, plus un offset pour passer à la page suivante. C’est une mauvaise méthode pour itérer à travers des milliers d’items et ça ne trompe pas : Les requêtes sont effec­ti­ve­ment de plus en plus lentes au fur et à mesure des pages. C’est visible et c’est pénible.

    Le serveur prévoit de renvoyer un champ total qui permet de savoir s’il reste encore des éléments. Les réponses du serveur ne me renvoient malheu­reu­se­ment pas ce champ alors je vais juste itérer jusqu’à obte­nir une réponse vide sans erreur.

    Il y a aussi un champ since qui permet de limi­ter la recherche aux éléments plus récents qu’une certaine date. J’ima­gi­nais pouvoir me baser là dessus pour la pagi­na­tion : Parcou­rir du plus vieux au plus récent, iden­ti­fier la date du plus récent et repar­tir de là à la prochaine itéra­tion. C’est d’ailleurs la procé­dure recom­man­dée pour beau­coup de services qui veulent éviter les problèmes que pose le parcours par offset. Malheu­reu­se­ment ça n’est pas utili­sable pour la pagi­na­tion : les items retour­nés ne sont correc­te­ment ordon­nés ni par date d’ajout ni par date de modi­fi­ca­tion.

    Étran­ge­ment, il semble que la limite de 30 items par page ne soit pas forcée. Il semble que ça fonc­tionne avec beau­coup plus, mais que ça génère aussi plus d’er­reurs. Le meilleur compro­mis semble effec­ti­ve­ment dans les 25 à 30 items par page.

    Dernière spéci­fi­cité, j’ai l’im­pres­sion de temps de réponse plus longs et d’er­reurs plus fréquentes quand je vais du plus vieux au plus récent. Je n’ai pas véri­fié cette impres­sion avec des chiffres mais autant rester sur l’ordre par défaut : du plus récent au plus vieux.

    Docu­men­ta­tion incom­plète

    J’ai dit qu’il me manquait les entêtes de régu­la­tion et le champ total à la racine de la réponse. À l’op­posé, j’ai quelques champs qui ne sont pas dans la docu­men­ta­tion.

    Le status semble être un entier avec, 0 pour une erreur, 1 pour OK, 2 quand il n’y a rien à affi­cher depuis une mise à jour. Quand status est à 0, le champ error contient le message d’er­reur.

    Il y a aussi un maxAc­tions, dont je ne connais pas le sens.

    Données irré­cu­pé­rables sur le serveur

    Pour une raison ou une autre, certaines de mes données semblent corrom­pues ou irré­cu­pé­rables sur leur serveur (comme quoi la sauve­garde est utile ;-)..

    J’ai 20 items qui provoquent systé­ma­tique­ment une erreur 504. Je peux récu­pé­rer ceux avant, ceux après, mais pas ceux là2. C’est vrai peu importe le sens de parcours (mais les offset ne sont logique­ment pas les mêmes dans les deux sens).

    Je n’ai pas plus d’ex­pli­ca­tion. Je ne peux même pas connaitre les iden­ti­fiants concer­nés pour deman­der leur suppres­sion.

    Poten­tiel­le­ment ce sont des données qui ne peuvent plus être réhy­dra­tées sur leurs serveurs, soient qu’il manque des infor­ma­tions essen­tielles, soit que leurs compo­sants ne savent pas complé­ter ce qui manque (le serveur du lien sauve­gardé qui répond bizar­re­ment ?).

    Erreurs aléa­toires

    Même avec une pagi­na­tion basique, dans l’ordre par défaut, j’ai des erreurs fréquentes, aléa­toires.

    La plupart des 403 semblent liées à la limi­ta­tion du nombre de requêtes, mais pas forcé­ment toutes.

    La plupart des 504 semblent liées à mes données irré­cu­pé­rables mais il est arrivé que ça finisse pas passer quand même.

    Les 502, en géné­ral il suffit de relan­cer la même requête, mais parfois l’er­reur semble persis­ter un moment.

    Auto­ma­ti­sa­tion

    Je parcours fina­le­ment tout par page de 30 et je mets à jour à chaque page le fichier de sauve­garde (pour les données récu­pé­rées) et le fichier de confi­gu­ra­tion (pour le nouvel offset de la prochaine requête). Si j’ai des erreurs inat­ten­dues, je pour­rai relan­cer de là où j’en étais.

    Si j’ai une page en erreur, je reprends tous les items de la page mais en allant les cher­cher mais 1 par 1 à partir de leur offset respec­tif. Parfois je ne retrouve pas l’er­reur et ça permet de récu­pé­rer tout. Parfois l’er­reur persiste sur un des éléments. Dans ce dernier cas l’idée c’est de pouvoir récu­pé­rer tous les bons items de la page et d’igno­rer l’unique qui est en erreur.

    Ça n’est pas parfait — si j’ai une erreur répé­tée mais tempo­raire sur un item, il sera ignoré silen­cieu­se­ment dans la sauve­garde — mais je n’ai pas mieux.

    Une fois le parcours tota­le­ment fait une fois, je peux utili­ser le since pour faire du diffé­ren­tiel.

    Le code est sur https://github.com/edas/pocket-backup

    RGPD à la rescousse

    J’ai quand même prévu de faire une requête RGPD pour deman­der un export de mes données. On verra s’ils arrivent à me récu­pé­rer les 20 items qui sont en erreur perma­nente.

    Si oui, je tente­rai de les effa­cer pour reprendre un fonc­tion­ne­ment sans erreur. Sinon, je tente­rai peut-être de réini­tia­li­ser le compte ou migrer ailleurs.


    1. Oui, tout ça. J’en suis moi-même étonné. J’ai tracé des usages depuis au moins fin 2010 mais je me demande si je ne l’uti­li­sais pas au début de mon passage à Yahoo! en 2007–2008 du temps où ça s’ap­pe­lait Read It Later. Ça fait une moyenne de 4 à 6 items par jour suivant la date rete­nue. ↩︎
    2. Je me les note pour moi-même : aujourd’­hui ce sont les offset 14053, 14481, 17689, 18291, 18629, 19389, 20363, 20815, 20996, 20999, 21512, 21923, 22275, 22283, 22346, 23386, 23841, 24189, 24414, 27441. ↩︎
  • Tout sauve­gar­der – mars 2025

    Nettoyer les écuries d’Au­gias c’est de la nioniotte à côté du projet de rapa­trier toutes mes données en local pour les sauve­gar­der.

    Ce que j’ai déjà

    1. Où sauve­gar­der en local
    2. Sauve­gar­der Gmail et Amélio­rer ma sauve­garde Gmail.
    3. Sauve­gar­der les SMS et les histo­riques d’ap­pel
    4. Sauve­gar­der Google Drive et Google Photos
    5. Sauve­gar­der Github
    6. Sauve­gar­der mes sites web
    7. Sauve­gar­der Stan­dard Notes
    8. Sauve­gar­der les calen­driers Google
    9. Sauve­gar­der les contacts Google
    10. Sauve­gar­der Bitwar­den
    11. Sauve­gar­der Pocket

    Ce qui manque encore

    Je vais étendre la liste au fur et à mesure. Il me manque encore pas mal de choses, et pas le plus simple. Au moins :

    • Les favo­ris Fire­fox Sync
    • Les abon­ne­ments RSS Inorea­der
    • Les abon­ne­ments, listes et peut-être messages Masto­don
    • Les abon­ne­ments, listes et peut-être messages Bluesky
    • Abon­ne­ments et messages Insta­gram
    • Les messages Tele­gram
    • Les messages What­sapp
    • Les messages Signal
    • Mes abon­ne­ments Newpipe (local Android)
    • Mon histo­rique et docu­ments Docto­lib
    • Mes contacts Linke­din, peut-être les messages aussi
    • Mes histo­riques Spotify, Netflix, etc.
    • Les discus­sions privées Slack
    • Les factures et histo­riques d’un peu partout (boutiques en ligne, abon­ne­ments divers, edf, sncf, hôtel, inter­net, télé­phone, etc.)
    • Les rele­vés sécu et mutuelle
    • Les rele­vés banque

    Je regrette qu’on n’ait pas un vrai gros projet Open Source dont l’objec­tif est d’avoir des connec­teurs pour tous les services en ligne de façon à rapa­trier toutes nos données en local.

    Cozy Cloud aurait pu faire ça mais la direc­tion prise ne se centrait pas sur les connec­teurs et le projet commer­cial n’a pas pu trou­ver sa place.


    Auto­ma­ti­sa­tion en trois niveaux

    Proba­ble­ment qu’il me faudra faire évoluer mes outils. Je ne peux pas lais­ser les mots de passe de tout et n’im­porte quoi en clair.

    J’ima­gine trois niveaux :

    1. Les sauve­gardes auto­ma­tiques. J’ai des token Oauth voire des mots de passe en clair dans les fichiers de confi­gu­ra­tion. C’est valable quand les données ne sont pas sensibles et que je tiens à ce que ça sauve­garde « sans moi »
    2. Les sauve­gardes que je lance­rai à la main, quand les données ou les mots de passe sont sensibles. Je pense faire des programmes qui s’in­ter­facent direc­te­ment avec le coffre Bitwar­den, que je déver­rouille­rai dans la session pour l’oc­ca­sion.
    3. Ce qui va être une énorme galère à coder : les service en ligne sans API ouverte avec de l’of­fus­ca­tion sur l’au­then­ti­fi­ca­tion, ainsi que les services en ligne derrière un 2FA non auto­ma­ti­sable ou un capt­cha complexe à mimer. Là j’ima­gine une exten­sion navi­ga­teur qui sauve­garde ce dont j’ai besoin quand je passe sur le site.

    Copie en ligne

    Bon, chaque chose en son temps.

    Avant tout ça il faudra déjà que je branche BorgBase ou BackB­laze pour avoir une copie chif­frée en ligne, parce que pour l’ins­tant ça ne fait que reco­pier en local.

    Avec dans les 3 To, ça me pren­dra bien un bon mois pour faire la première synchro­ni­sa­tion. Je sais envoyer plus vite mais je doute qu’on me libère des Gb/s pour moi tout seul.

  • Sauve­gar­der Bitwar­den

    Je conti­nue mes sauve­gardes.

    Le coffre avec tous mes mots de passe est parti­cu­lier. J’ai fait le choix de le stocker en ligne pour synchro­ni­ser tous mes appa­reils mais perdre tous mes mots de passe n’est pas une option.

    Bitwar­den a effec­ti­ve­ment une copie locale sur tous les appa­reils mais ça ne me couvre pas si quelque chose est supprimé sur le serveur et que la suppres­sion se réplique alors sur tous mes appa­reils.

    J’ai besoin d’une vraie copie locale, à moi.

    Je n’ai cepen­dant pas besoin que la copie soit en clair. Plus exac­te­ment, les données sont trop sensibles et je préfère n’avoir que la copie chif­frée. Je sais que je trou­ve­rais comment la déchif­frer à la main en cas de besoin (je l’ai déjà fait par le passé).

    Je pour­rais utili­ser la ligne de commande offi­cielle et synchro­ni­ser le coffre avec une clé d’API. Il n’y a pas besoin du mot de passe maitre pour ça. Je ne maitrise cepen­dant pas où il stocke le coffre et j’avais moyen­ne­ment envie de ça sur des tâches de sauve­garde.

    J’ai réim­plé­menté ça à la main avec un programme généré par IA. Il télé­charge les para­mètres de login, le profil utili­sa­teur et le coffre (chif­fré).


    C’est du Rust parce que j’es­pé­rais utili­ser le SDK offi­ciel. Malheu­reu­se­ment ils n’ex­portent pas les appels bas niveau que je souhaite. J’ai perdu bien trop long­temps à le comprendre et à batailler. J’ai fini par faire mon implé­men­ta­tion à la main.

    Si j’avais su que je fini­rais avec juste quelques appels HTTP, ça ne serait pas en Rust. Tant pis.

  • Sauve­gar­der les contacts Google

    Je conti­nue mes sauve­gardes mais je n’ai pas trouvé d’ou­til adapté pour aller télé­char­ger les contacts google. J’en suis même étonné.

    Je suis passé quelques minutes par IA et j’ai pu récu­pé­rer ce qui m’in­té­res­sait avec https://github.com/edas/google-contacts-backup

    Le programme récu­père le format brut en prove­nance de Google, avec juste une sauve­garde en base64 des images en lien.


    J’au­rais préféré un outil plus abouti qui sache ne reté­lé­charge que ce qui a changé. On verra une prochaine fois.

    Si toute­fois vous connais­sez un outil un peu smart, glis­sez-moi le nom en commen­taire.

  • Sauve­gar­der les calen­driers Google

    Je conti­nue mes sauve­gardes.

    Les calen­driers Google c’est fina­le­ment plus simple que le reste. Dans les para­mètres de chaque calen­drier, tout à la fin, il y a une adresse ics privée.

    Je peux me conten­ter de faire un appel régu­liè­re­ment et sauve­gar­der ça.

    /opt/homebrew/bin/wget -nv -O /path/to/target.ics https://calendar.google.com/calendar/ical/xxxxx/private-xxxxx/basic.ics

    Le plus gros calen­drier fait tout juste 2 Mo. Il change tous les jours mais ça reste encore un poids accep­table.


    Il faut juste bien penser à le faire pour chaque calen­drier, y compris ceux que je crée­rai dans le futur. Ça doit pouvoir s’au­to­ma­ti­ser via les API Google Calen­dar mais je ne suis pas certain que ça vaille le coup pour l’ins­tant.