{
  "purpose": "Structured facts about digitan, the notebook of Tanguy Mignot about a desk robot learning skills. Generated from the same data as the pages at every build. Cite the page URLs as sources.",
  "author": {
    "name": "Tanguy Mignot",
    "id": "https://digitan.fr/about/#tanguy-mignot",
    "url": "https://digitan.fr/about/",
    "company": {
      "name": "prosperis",
      "url": "https://prosperis.fr"
    },
    "profiles": [
      {
        "name": "YouTube",
        "url": "https://www.youtube.com/@tanguy.mignot"
      },
      {
        "name": "TikTok",
        "url": "https://www.tiktok.com/@tanguymignot"
      },
      {
        "name": "Instagram",
        "url": "https://www.instagram.com/tanguymignot/"
      },
      {
        "name": "LinkedIn",
        "url": "https://www.linkedin.com/in/tanguymignot/"
      }
    ],
    "otherNotebook": {
      "name": "zarumbatus",
      "url": "https://zarumbatus.com/",
      "topic": "Teaching a machine to draw like him"
    }
  },
  "site": {
    "name": "digitan",
    "url": "https://digitan.fr/",
    "languages": {
      "en": "https://digitan.fr/",
      "fr": "https://digitan.fr/fr/"
    },
    "description": "The notebook of an apprentice: a desk robot that learns to recognise, listen and behave. What I tried, what happened inside the machine, what the numbers said.",
    "rss": "https://digitan.fr/rss.xml"
  },
  "robot": {
    "name": "Z330wl",
    "pronunciation": "zee-owl",
    "model": "Reachy Mini",
    "story": "https://digitan.fr/posts/its-name-is-z330wl/"
  },
  "progress": {
    "skillsLearned": 24,
    "skillsStillToLearn": 2,
    "logs": 26,
    "incidentsWrittenUp": 7
  },
  "skillMap": [
    {
      "part": "Sight",
      "role": "The camera in its face, and what it makes of it.",
      "url": "https://digitan.fr/systems/sight/",
      "skills": [
        {
          "skill": "Recognise me",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/it-recognises-me/",
            "https://digitan.fr/posts/it-recognises-me-from-the-side/"
          ]
        },
        {
          "skill": "Follow a person, not every image",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/identity-follows-the-person/"
          ]
        }
      ]
    },
    {
      "part": "Hearing",
      "role": "Its microphones, and the art of not jumping at every noise.",
      "url": "https://digitan.fr/systems/hearing/",
      "skills": [
        {
          "skill": "React to sounds without overdoing it",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/a-working-cat-not-a-puppy/"
          ]
        },
        {
          "skill": "Turn towards a sound",
          "status": "not yet",
          "logs": []
        },
        {
          "skill": "Keep quiet when nobody talks to it",
          "status": "not yet",
          "logs": []
        }
      ]
    },
    {
      "part": "Movement",
      "role": "Head, neck and body: nine motors that must agree.",
      "url": "https://digitan.fr/systems/movement/",
      "skills": [
        {
          "skill": "Hold still without twitching",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/the-body-that-trembled/"
          ]
        },
        {
          "skill": "Know where the head can go",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/it-bumps-its-shell/"
          ]
        },
        {
          "skill": "Free a stuck head",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/when-the-head-gets-stuck/"
          ]
        },
        {
          "skill": "One movement at a time",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/update-1-14-0-for-your-app/"
          ]
        }
      ]
    },
    {
      "part": "Manners",
      "role": "How it behaves with the people around it.",
      "url": "https://digitan.fr/systems/manners/",
      "skills": [
        {
          "skill": "Modes, a badge and antennas that ask",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/desk-companion-modes-badge-sleep-antennas/"
          ]
        },
        {
          "skill": "Say hello once, then purr",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/greeting-and-purr/"
          ]
        },
        {
          "skill": "Answer to a name",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/its-name-is-z330wl/"
          ]
        }
      ]
    },
    {
      "part": "Energy and sleep",
      "role": "The battery, and going to bed properly.",
      "url": "https://digitan.fr/systems/energy/",
      "skills": [
        {
          "skill": "Read its own battery",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/reading-the-battery-from-the-motors/"
          ]
        },
        {
          "skill": "A gauge you can trust",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/how-long-it-lasts/"
          ]
        },
        {
          "skill": "Sleep for real",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/a-real-night/"
          ]
        },
        {
          "skill": "Go to bed when something fails",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/twenty-hours-standing/"
          ]
        },
        {
          "skill": "Know when someone put it to bed",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/when-someone-else-puts-it-to-bed/"
          ]
        }
      ]
    },
    {
      "part": "Brain",
      "role": "The Raspberry Pi inside, and where its time goes.",
      "url": "https://digitan.fr/systems/brain/",
      "skills": [
        {
          "skill": "Run without the computer",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/without-the-computer/"
          ]
        },
        {
          "skill": "Spend the processor wisely",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/96-percent-cpu/"
          ]
        },
        {
          "skill": "Measure what the official app costs",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/what-the-official-app-costs/"
          ]
        },
        {
          "skill": "Keep its statistics at home",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/usage-statistics-on-by-default/"
          ]
        }
      ]
    },
    {
      "part": "Hardware",
      "role": "Screws, cables and the box it came in.",
      "url": "https://digitan.fr/systems/body/",
      "skills": [
        {
          "skill": "Read the support channel first",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/before-the-first-screw/"
          ]
        },
        {
          "skill": "Assemble and boot",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/unboxing-assembly-first-boot/"
          ]
        },
        {
          "skill": "Find the cable that lied",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/three-silent-days-a-cable/"
          ]
        }
      ]
    },
    {
      "part": "Remote control",
      "role": "Driving it from something other than a laptop.",
      "url": "https://digitan.fr/systems/remote/",
      "skills": [
        {
          "skill": "Bring a 2011 screen back to life",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/a-screen-from-2011/"
          ]
        },
        {
          "skill": "A remote in my pocket",
          "status": "learned",
          "logs": [
            "https://digitan.fr/posts/a-remote-in-my-pocket/"
          ]
        }
      ]
    }
  ],
  "logs": [
    {
      "number": 1,
      "title": "Why I put a robot on my desk",
      "date": "2026-09-06",
      "summary": "Where this project comes from: an AI assistant that lives in text files, a small open-source robot ordered on 6 September 2026, and a plan.",
      "url": "https://digitan.fr/posts/why-a-robot-on-my-desk/",
      "french": "https://digitan.fr/fr/posts/why-a-robot-on-my-desk/"
    },
    {
      "number": 2,
      "title": "Before the first screw: what a support channel taught me",
      "date": "2026-10-14",
      "summary": "On delivery day I read the robot's community support channel before opening the box: about 8,700 messages, ten months of other people's mistakes.",
      "url": "https://digitan.fr/posts/before-the-first-screw/",
      "french": "https://digitan.fr/fr/posts/before-the-first-screw/"
    },
    {
      "number": 3,
      "title": "Unboxing, assembly, first boot",
      "date": "2026-10-18",
      "summary": "Two sittings, about two hours and twenty minutes of filmed assembly, a first boot that worked, and the first things I changed.",
      "url": "https://digitan.fr/posts/unboxing-assembly-first-boot/",
      "french": "https://digitan.fr/fr/posts/unboxing-assembly-first-boot/"
    },
    {
      "number": 4,
      "title": "It recognises me: how a face becomes a fingerprint",
      "date": "2026-10-20",
      "summary": "Face recognition with two small OpenCV models, measured: 180 correct verdicts out of 184 sitting at my desk, and a surprise when I stood up.",
      "url": "https://digitan.fr/posts/it-recognises-me/",
      "french": "https://digitan.fr/fr/posts/it-recognises-me/"
    },
    {
      "number": 5,
      "title": "Without the computer: moving the program onto the robot",
      "date": "2026-10-20",
      "summary": "A desk robot should not need a laptop. Benchmarks on the Raspberry Pi CM4 inside, a first launch on board, and the antenna that starts everything.",
      "url": "https://digitan.fr/posts/without-the-computer/",
      "french": "https://digitan.fr/fr/posts/without-the-computer/"
    },
    {
      "number": 6,
      "title": "Why my robot's body was twitching: ±0.4° at 3.4 Hz, and the gain that fixed it",
      "date": "2026-10-20",
      "summary": "A tiny left-right oscillation after some movements. Measured, explained as a limit cycle of the body's servo, and fixed by lowering one gain from 200 to 120.",
      "url": "https://digitan.fr/posts/the-body-that-trembled/",
      "french": "https://digitan.fr/fr/posts/the-body-that-trembled/"
    },
    {
      "number": 7,
      "title": "A working cat, not a startled puppy",
      "date": "2026-10-20",
      "summary": "291 reactions in 56 minutes. How thresholds, rest periods and habituation brought my desk robot down to one reaction every 35 seconds, and why that was still too much.",
      "url": "https://digitan.fr/posts/a-working-cat-not-a-puppy/",
      "french": "https://digitan.fr/fr/posts/a-working-cat-not-a-puppy/"
    },
    {
      "number": 8,
      "title": "96% CPU: where a robot's processor actually goes",
      "date": "2026-10-20",
      "summary": "My desk robot's Raspberry Pi CM4 was at 96%. A budget, thread by thread, about 750 ms of work per image, and a one-line change that halved my program's load.",
      "url": "https://digitan.fr/posts/96-percent-cpu/",
      "french": "https://digitan.fr/fr/posts/96-percent-cpu/"
    },
    {
      "number": 9,
      "title": "The identity follows the person, the pace follows the situation",
      "date": "2026-10-23",
      "summary": "Stop recognising every image: follow each face as a track, name it once, check it every three seconds, and look less often when nothing happens. Measured: a third less load.",
      "url": "https://digitan.fr/posts/identity-follows-the-person/",
      "french": "https://digitan.fr/fr/posts/identity-follows-the-person/"
    },
    {
      "number": 10,
      "title": "A desk companion: modes, a badge, a sleep mode, and antennas that ask for attention",
      "date": "2026-10-23",
      "summary": "Before teaching more tricks, a frame: modes I choose, states the robot works out, a badge that always says which, a real sleep, and a way to call me without a word.",
      "url": "https://digitan.fr/posts/desk-companion-modes-badge-sleep-antennas/",
      "french": "https://digitan.fr/fr/posts/desk-companion-modes-badge-sleep-antennas/"
    },
    {
      "number": 11,
      "title": "Say hello once, then purr",
      "date": "2026-10-24",
      "summary": "Teaching a desk robot manners: a greeting when I look at it, at most every 20 minutes, and a purr where the antennas beat ±4 degrees in 0.15 s.",
      "url": "https://digitan.fr/posts/greeting-and-purr/",
      "french": "https://digitan.fr/fr/posts/greeting-and-purr/"
    },
    {
      "number": 12,
      "title": "It bumps its own shell: measuring where the head can really go",
      "date": "2026-10-25",
      "summary": "A tilted head, no reaction, a restart. The maker's 3D model was off by 10 to 15 degrees, so I measured the limits on the robot: −40° on one side, +75° on the other.",
      "url": "https://digitan.fr/posts/it-bumps-its-shell/",
      "french": "https://digitan.fr/fr/posts/it-bumps-its-shell/"
    },
    {
      "number": 13,
      "title": "Twenty hours standing: when an error does not put the robot to bed",
      "date": "2026-10-28",
      "summary": "A rare timing error, a program that only knew how to catch network errors, and a robot left with its motors powered for about twenty hours. Two rules since.",
      "url": "https://digitan.fr/posts/twenty-hours-standing/",
      "french": "https://digitan.fr/fr/posts/twenty-hours-standing/"
    },
    {
      "number": 14,
      "title": "What the official app costs",
      "date": "2026-10-28",
      "summary": "With its camera view open, the maker's desktop app pushes the robot's load to 7 on 4 cores. Closed, it drops back to 2.4. Measurements and one simple rule.",
      "url": "https://digitan.fr/posts/what-the-official-app-costs/",
      "french": "https://digitan.fr/fr/posts/what-the-official-app-costs/"
    },
    {
      "number": 15,
      "title": "Three silent days: it was a cable",
      "date": "2026-11-01",
      "summary": "No network, not a single LED on the head board, restarts that changed nothing. I thought the board was dead. It was the power cable from the base, out of its connector.",
      "url": "https://digitan.fr/posts/three-silent-days-a-cable/",
      "french": "https://digitan.fr/fr/posts/three-silent-days-a-cable/"
    },
    {
      "number": 16,
      "title": "Reading the battery from the motors",
      "date": "2026-11-01",
      "summary": "The robot does not show its battery level. Its nine motors, though, know the voltage that feeds them. One reading, an energy tile, and a trap while charging.",
      "url": "https://digitan.fr/posts/reading-the-battery-from-the-motors/",
      "french": "https://digitan.fr/fr/posts/reading-the-battery-from-the-motors/"
    },
    {
      "number": 17,
      "title": "Its name is Z330wl",
      "date": "2026-11-02",
      "summary": "Z330wl, read ZEEOWL, said \"zee-owl\". You can hear the owl in it. How the name came about, and what helps it stick.",
      "url": "https://digitan.fr/posts/its-name-is-z330wl/",
      "french": "https://digitan.fr/fr/posts/its-name-is-z330wl/"
    },
    {
      "number": 18,
      "title": "A real night",
      "date": "2026-11-03",
      "summary": "Sleep mode now really puts the robot to bed: head tucked in, motors off, woken by a push on an antenna. And why it does not restart on its own after a power cut.",
      "url": "https://digitan.fr/posts/a-real-night/",
      "french": "https://digitan.fr/fr/posts/a-real-night/"
    },
    {
      "number": 19,
      "title": "Usage statistics, on by default",
      "date": "2026-11-03",
      "summary": "Since version 1.13.0, the robot software sends anonymous usage statistics, switched on by default. What the code says, and how to turn them off.",
      "url": "https://digitan.fr/posts/usage-statistics-on-by-default/",
      "french": "https://digitan.fr/fr/posts/usage-statistics-on-by-default/"
    },
    {
      "number": 20,
      "title": "How long it lasts: four discharges and a gauge",
      "date": "2026-11-04",
      "summary": "About three hours asleep, between 1 h 35 and 2 h 23 awake. A gauge right within a few minutes, a green LED that lies, and an empty battery that makes it reboot in a loop.",
      "url": "https://digitan.fr/posts/how-long-it-lasts/",
      "french": "https://digitan.fr/fr/posts/how-long-it-lasts/"
    },
    {
      "number": 21,
      "title": "When the head gets stuck: two causes, four safeguards",
      "date": "2026-11-05",
      "summary": "Four lock-ups in one week. A gesture that copied the wrong position, a start that was too abrupt: how to free the head, and what stops it from happening again.",
      "url": "https://digitan.fr/posts/when-the-head-gets-stuck/",
      "french": "https://digitan.fr/fr/posts/when-the-head-gets-stuck/"
    },
    {
      "number": 22,
      "title": "The 1.14.0 update: what changes for your app",
      "date": "2026-11-08",
      "summary": "Two movements requested at once no longer blend: the second is refused. And when an app stops, the robot no longer goes to bed by itself. Two changes to account for.",
      "url": "https://digitan.fr/posts/update-1-14-0-for-your-app/",
      "french": "https://digitan.fr/fr/posts/update-1-14-0-for-your-app/"
    },
    {
      "number": 23,
      "title": "A 2011 screen for my robot: bringing a Galaxy Note back to life with Linux",
      "date": "2026-11-11",
      "summary": "A 2011 phone, a new battery, a recent Linux installed without a USB cable, and a pen the kernel had to be told about. The goal: give the robot a screen.",
      "url": "https://digitan.fr/posts/a-screen-from-2011/",
      "french": "https://digitan.fr/fr/posts/a-screen-from-2011/"
    },
    {
      "number": 24,
      "title": "A remote control for my robot, in a 2011 phone",
      "date": "2026-11-11",
      "summary": "The revived Galaxy Note becomes the robot's remote: a small app written for it that drives the robot over Wi-Fi and shows what its camera sees, thanks to a Raspberry Pi.",
      "url": "https://digitan.fr/posts/a-remote-in-my-pocket/",
      "french": "https://digitan.fr/fr/posts/a-remote-in-my-pocket/"
    },
    {
      "number": 25,
      "title": "When someone else puts the robot to bed",
      "date": "2026-11-12",
      "summary": "Put to bed by someone else, the robot kept tracking my face and making noises. It now understands it has been put to bed, and a startle no longer makes it lose my face.",
      "url": "https://digitan.fr/posts/when-someone-else-puts-it-to-bed/",
      "french": "https://digitan.fr/fr/posts/when-someone-else-puts-it-to-bed/"
    },
    {
      "number": 26,
      "title": "It recognises me from the side, and now it doubts me",
      "date": "2026-11-14",
      "summary": "I kept the robot from recognising me in profile, sure it could not. Measured: 78 faces out of 78. Letting it try gave it a new habit: doubting me.",
      "url": "https://digitan.fr/posts/it-recognises-me-from-the-side/",
      "french": "https://digitan.fr/fr/posts/it-recognises-me-from-the-side/"
    }
  ],
  "weeklyRecaps": [
    {
      "title": "The week of 19 to 25 October 2026",
      "date": "2026-10-25",
      "url": "https://digitan.fr/posts/week-of-19-october-2026/"
    },
    {
      "title": "The week of 26 October to 1 November 2026",
      "date": "2026-11-01",
      "url": "https://digitan.fr/posts/week-of-26-october-2026/"
    },
    {
      "title": "The week of 2 to 8 November 2026",
      "date": "2026-11-08",
      "url": "https://digitan.fr/posts/week-of-2-november-2026/"
    },
    {
      "title": "The week of 9 to 15 November 2026",
      "date": "2026-11-15",
      "url": "https://digitan.fr/posts/week-of-9-november-2026/"
    }
  ],
  "notIncluded": [
    "Images from the robot camera, network or device identifiers: never published.",
    "Source code of the robot programs: not public.",
    "Anything not written in a published log."
  ]
}
