やめて arrête

Détection de claques pour MacBook Apple Silicon.

Tapez le portable, il fait un bruit. Le plus intéressant, c'est que ça marche : le capteur n'est pas documenté, CoreMotion ne le voit pas, et distinguer une claque d'un choc sur le bureau demande le gyroscope.

macOS 13+ · portables Apple Silicon · M2 et plus, ou M1 Pro/Max

Icône yamete : un MacBook cartoon qui rougit
accélération 0.8 g
rotation 60 °/s

0.52 g 47.7 °/s détecte

Deux vrais enregistrements, mêmes axes. Le choc bureau est l'impact le plus fort de 39 % et le détecteur le rejette — il ne fait quasiment pas tourner la machine.

Le discriminateur

Le coup le plus fort est celui à jeter

Un choc à travers le bureau secoue la machine plus qu'une claque sur le couvercle. Trier par force donne quelque chose qui se déclenche sur le mobilier.

rotation, °/s
Bump the desk Slap the lid Trackpad click Typing 60 0.8 g
g
Quatre enregistrements réels. Horizontal : accélération de crête ; vertical : rotation de crête. Seule la claque est assez haut sur l'axe de rotation pour passer le filtre gyro.

Sensibilité

Ce qu'il attrape, et ce qu'il rate

40 claques enregistrées, et 150 secondes de frappe, trackpad, chocs bureau, mouvement de couvercle et un portable immobile qui doivent rester silencieux. Un curseur traverse tout ça.

0.50
Claques détectées 35 / 40
Faux positifs 0

La valeur par défaut.

Actions

Puis quelque chose se passe

Trois types de réponse, filtrés selon la force du coup. Chacune peut lire la claque à laquelle elle répond.

Jouer un son

Pointez des fichiers ou un dossier entier : il en choisit un à chaque fois, en ordre ou au hasard, jamais le même deux fois de suite. Le volume peut suivre la force.

# out of the box
/System/Library/
  Sounds/Sosumi.aiff

Appeler un webhook

N'importe quelle méthode, en-têtes et corps. URL et corps sont templés : Home Assistant, Raccourci ou IFTTT sans cas particulier.

# POST body
{
  "tier": "{{tier}}",
  "g": {{peak_g}}
}

Lancer une commande

La claque arrive deux fois : variables d'environnement pour les one-liners shell, et JSON sur stdin pour ce qui préfère le parser.

$ osascript -e "set volume 0"
# $YAMETE_TIER → major
# $YAMETE_PEAK_G → 0.52

Derrière un interrupteur avancé

Il attend 200 ms d'abord

La détection est assez rapide pour qu'un son démarre pendant que la claque physique est encore audible. La réponse doit arriver après l'impact. 200 ms choisis à l'oreille, réglables par action.

Sévérité et confiance sont des questions distinctes

Combien de détecteurs ont voté répond à « est-ce un impact ? ». La force est l'amplitude, et elle seule décide si une action major se déclenche.

L'app

Elle vit dans la barre de menus

L'ouvrir démarre la détection, la quitter l'arrête. Le démon fait le vrai travail via un socket unix ; la fenêtre est un contrôleur qui s'y attache.

The window follows the system appearance rather than picking a look. A menu bar utility that ignores light and dark reads as broken rather than styled.

It ships the daemon inside itself and owns its lifetime, so there is nothing to install separately and nothing left running when you quit. If a daemon is already running the app attaches to it and leaves it alone.

You can also skip the app. The daemon runs on its own as a user LaunchAgent, and the protocol is newline-delimited JSON — you can drive it by hand with nc -U.

Sur votre Mac

Rien ne part sauf si vous l'envoyez

Détection, config et logs restent dans le répertoire personnel. Pas de compte, pas de cloud Chipcolate, pas de SDK d'analytics. Les seuls chemins réseau sont ceux que vous configurez.

  • Local uniquement

    Les échantillons du capteur restent sur l'appareil. La télémétrie du scope est un flux socket local vers l'app, désactivé quand personne ne regarde.

  • Pas de compte

    Pas d'inscription, pas de profil, aucun serveur de notre côté. Désinstallez et supprimez quelques chemins sous ~/Library.

  • Vos actions

    Les sons restent locaux. Webhooks et commandes ne parlent qu'aux endpoints ou programmes que vous définissez.

Politique complète Questions via GitHub Issues

Installation

Si votre Mac peut le faire tourner

Fonctionne sur
Portables Apple Silicon sous macOS 13 ou plus — M2 et suivants, plus M1 Pro et M1 Max.
Sans capteur
MacBook Pro M1 (2020), Air M1, tout desktop et tout Intel. yamete probe le dit clairement au lieu de bloquer.
Demande
Surveillance des entrées au premier lancement. macOS l'exige pour tout accès HID, y compris un capteur de mouvement qui n'est pas un périphérique d'entrée utile.

Signé et notarié · Apple Silicon · ouvrez le DMG et glissez-le

Ou juste le démon

Il tourne très bien sans l'app — c'est ainsi que le détecteur a été développé. Un LaunchAgent utilisateur garde la détection active sans rien à l'écran.

# probe
yamete probe

# watch
yamete watch --scores

# install
yamete install --copy

Tout — détecteur, corpus et outils de réglage — est sur github.com/chipcolate/yamete .