diff --git a/CLAUDE.md b/CLAUDE.md index 67434a0..576de35 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -96,6 +96,7 @@ Appliquer systématiquement pour tout problème : - `stratégie/` : Plans stratégiques - `WIP/` : Work in progress - `food/` : Recettes, restaurants +- `tools/` : Scripts utilitaires (diagnostic réseau Windows, etc.) ### ⚠️ Désactivé diff --git a/Birthday_ClassMeeting_LessonPlan.md b/WorkTingting/Birthday_ClassMeeting_LessonPlan.md similarity index 100% rename from Birthday_ClassMeeting_LessonPlan.md rename to WorkTingting/Birthday_ClassMeeting_LessonPlan.md diff --git a/anki_tingting/.state.json b/anki_tingting/.state.json index 55fa35c..cdcf6f2 100644 --- a/anki_tingting/.state.json +++ b/anki_tingting/.state.json @@ -1 +1 @@ -{"streak": 1, "last_check_date": "2025-11-18", "days_skipped": 2, "last_skip_date": "2025-11-19"} \ No newline at end of file +{"streak": 2, "last_check_date": "2025-11-25", "days_skipped": 0, "last_skip_date": "2025-11-19"} \ No newline at end of file diff --git a/anki_tingting/card_database.md.backup b/anki_tingting/card_database.md.backup deleted file mode 100644 index 58617a2..0000000 --- a/anki_tingting/card_database.md.backup +++ /dev/null @@ -1,511 +0,0 @@ -# Card Database - Tingting Daily Check - -**Dernière mise à jour** : 19/11/2025 -**Total cartes actives** : 23 -**Total cartes retirées** : 0 -**Total reviews** : 6 cartes (3 session 15/11, 3 session 18/11) - -**Breakdown par catégorie** : -- Relation (Tingting) : 14 cartes -- Personnel : 7 cartes -- Famille : 1 carte -- Tech/Projets : 1 carte - ---- - -## Active Cards - -### Card #1 - Complacency Problem ⚠️ CRITICAL -**ID** : CORE-001 -**Question** : Pourquoi Tingting dit que tu "think" pas ? -**Answer** : Manque d'implication mentale quotidienne. Je suis devenu complacent vs last year. Avant j'étais attentif et présent, maintenant je suis plus dans mes jeux/code que présent pour elle. -**Tags** : core-problem, daily, critical -**Difficulty** : Hard -**Frequency** : Daily (jusqu'à maîtrisé) -**Created** : 07/11/2025 -**Last Review** : 18/11/2025 -**Success Rate** : 100% (1 review) -**Times Asked** : 1 -**Times Failed** : 0 -**Notes** : C'est LE problème central. Si j'oublie ça, j'oublie tout. ✅ 18/11 : Bonne compréhension - identifie autopilot vs thinking intentionnel, reconnaît que daily check aide. - ---- - -### Card #2 - Towel Detail -**ID** : ACTION-001 -**Question** : Towel de Tingting - qu'est-ce que je dois faire ? -**Answer** : La mettre dans son sac AVANT de sortir. Elle me l'a déjà dit last time. C'est un exemple concret de "thinking" à elle. -**Tags** : action, detail, daily -**Difficulty** : Medium -**Frequency** : Every 2-3 days -**Created** : 07/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Déclencheur du conflit 07/11. Exemple parfait de détail que j'oublie. - ---- - -### Card #3 - Communication Paradox -**ID** : CORE-002 -**Question** : Quel est le paradoxe de communication avec Tingting ? -**Answer** : Double-bind : Si je dis rien → "tu me dis jamais rien". Si je dis quelque chose de négatif → elle se vénère et retourne contre moi. Si je montre pas d'émotion → "pourquoi t'es pas en colère ?". Résultat : j'évite, ce qui crée de la distance. -**Tags** : core-problem, communication, pattern -**Difficulty** : Hard -**Frequency** : Every 2-3 days -**Created** : 07/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Failed** : 0 -**Notes** : Pattern structurel. Comprendre ça m'aide à naviguer les conversations difficiles. - ---- - -### Card #4 - Honest Feedback ⚠️ CRITICAL -**ID** : ACTION-002 -**Question** : Qu'est-ce que Tingting veut que je fasse quand elle fait des trucs wrong ? -**Answer** : LUI DIRE. Être honnête et direct (mais gentil). Le silence = désintérêt, peur du conflit, ou accumulation de frustration. Elle VEUT du feedback même si c'est dur à entendre. -**Tags** : action, communication, critical -**Difficulty** : Hard (parce que ça va contre mon instinct d'évitement) -**Frequency** : Daily (jusqu'à maîtrisé) -**Created** : 07/11/2025 -**Last Review** : 15/11/2025 -**Success Rate** : 0% (1 review) -**Times Asked** : 1 -**Times Failed** : 1 -**Notes** : Elle a dit que c'est "LE PIRE" que je ne lui dise pas. Donc TRÈS important. ⚠️ ÉCHEC 15/11 : A inversé la réponse (dit qu'il faut "rassurer" au lieu de donner feedback honnête) - ---- - -### Card #5 - Processing Time ⚠️ CRITICAL -**ID** : LEAD-001 -**Question** : Que dois-je faire après qu'elle finisse un long monologue pendant un conflit ? -**Answer** : DEMANDER 10 MINUTES DE PROCESSING. Je ne peux pas "lead" efficacement sans avoir compris et analysé ce qu'elle vient de dire. Dire : "Tu viens de dire beaucoup de choses importantes. J'ai besoin de 10 minutes pour bien tout comprendre avant qu'on continue, ok ?" Puis m'isoler, ouvrir Claude, processer, préparer ma réponse structurée. -**Tags** : lead, conflict, processing, critical -**Difficulty** : Medium (oser demander le temps) -**Frequency** : Every conflict (systématique) -**Created** : 13/11/2025 -**Last Review** : 18/11/2025 -**Success Rate** : 100% (1 review) -**Times Asked** : 1 -**Times Failed** : 0 -**Notes** : ✅ Prouvé efficace la dernière fois (elle aux toilettes, j'ai process, résolu direct après). C'est MA RESPONSABILITÉ de demander ce temps, pas d'attendre qu'il se présente. ✅ 18/11 : Excellente compréhension - sait qu'il faut 10-15min max (sinon elle spirale), BON état d'esprit (résoudre pas venger), identifie besoin système Claude pour rappeler purpose. - ---- - -### Card #6 - Domination par l'Esprit -**ID** : LEAD-002 -**Question** : Qu'est-ce que "dominer par l'esprit" pendant un conflit ? -**Answer** : Avoir une vision CLAIRE et STRUCTURÉE de la situation : mémoire des faits, compréhension de ses émotions sous-jacentes, vision d'ensemble du pattern, anticipation de la direction de la conversation, stratégie claire à appliquer. Ce n'est PAS "gagner l'argument" ou "avoir raison", c'est avoir la CLARTÉ nécessaire pour "lead" efficacement. Sans ça, je parais stupide/sans mémoire et elle ne peut pas me faire confiance pour lead. -**Tags** : lead, conflict, theory, mental-clarity -**Difficulty** : Hard (nécessite processing + documentation) -**Frequency** : Every conflict (systématique) -**Created** : 13/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Failed** : 0 -**Notes** : C'est POURQUOI le processing time (LEAD-001) est critique. Je suis le seul capable de clarté pendant le conflit → C'est ma force et ma responsabilité. - ---- - -### Card #7 - Initier Conversations ⚠️ CRITICAL -**ID** : ACTION-003 -**Question** : As-tu initié une conversation importante cette semaine avec Tingting ? -**Answer** : Je dois PRENDRE L'INITIATIVE de lancer les conversations importantes. Ne pas attendre qu'elle initie tout. J'ai des sujets préparés dans conversation_topics/ qui attendent d'être discutés. C'est MON RÔLE de les lancer. Pattern d'oubli identifié : je prépare mais n'initie jamais. -**Tags** : action, initiation, communication, critical -**Difficulty** : Medium (oser initier) -**Frequency** : Every 2-3 days (vérifier régulièrement) -**Created** : 13/11/2025 -**Last Review** : 15/11/2025 -**Success Rate** : 33% (1 review - partiel) -**Times Asked** : 1 -**Times Failed** : 0 (mais partiel) -**Notes** : Elle dit que c'est mon rôle de "provoquer les sujets". Pattern récurrent : je réfléchis mais n'initie pas → Les fichiers conversation_topics/ existent mais ne sont jamais discutés. Si je n'ai pas initié cette semaine, PLANIFIER une conversation dans les 48h. -⚠️ 15/11 : Dit avoir initié 3-4 conversations mais ne peut nommer AUCUN exemple concret. Pattern d'oubli critique - mémoire par activation = si elle doit toujours trigger, il ne lead pas vraiment. BESOIN de logging post-conversation. - ---- - -### Card #8 - Plan Long Terme ⚠️ CRITICAL -**ID** : ACTION-004 -**Question** : Qu'est-ce que tu as réfléchi ou proposé récemment pour votre avenir ensemble ? -**Answer** : C'est MON RÔLE de "lead" le planning long terme du couple : voyages (courts/longs), enfants (timing, préparation), carrière/finances, où vivre, projets communs. Elle me reproche de ne pas "think" à notre avenir. Je dois PRENDRE L'INITIATIVE de réfléchir ET de proposer des plans concrets. Ne pas juste dire "oui oui" mais AGIR. Venir vers elle avec "Hey, j'ai réfléchi à [X], on en parle ?" -**Tags** : action, planning, future, lead, critical -**Difficulty** : Hard (nécessite réflexion + initiative) -**Frequency** : Every 3-4 days (vérifier régulièrement) -**Created** : 13/11/2025 -**Last Review** : 15/11/2025 -**Success Rate** : 33% (1 review - partiel) -**Times Asked** : 1 -**Times Failed** : 0 (mais partiel) -**Notes** : Pattern identifié : j'oublie que c'est mon rôle. Timing "jamais bon" = excuse. Si je n'ai rien proposé cette semaine, réfléchir à UN sujet long terme et l'initier dans les 48h. -⚠️ 15/11 : A des notes (voyages Beijing/France) mais PAS ENCORE partagées avec Tingting ni transformées en proposition concrète. Pattern classique : notes dans la tête ≠ action visible. ACTION REQUISE 48h : Intégrer dans système + préparer proposition + INITIER conversation. - ---- - -### Card #9 - Checklist Quotidienne -**ID** : ACTION-005 -**Question** : As-tu fait ta checklist avant de sortir aujourd'hui ? -**Answer** : Checklist AVANT DE SORTIR : (1) Towel de Tingting dans son sac, (2) [À compléter avec autres items]. C'est pas juste la towel, c'est RÉFLÉCHIR à ce que je fais et ce dont elle a besoin. Prendre 30 secondes pour mentalement checker "qu'est-ce qu'elle pourrait avoir besoin ?" avant de partir. -**Tags** : action, daily, details, thinking -**Difficulty** : Easy (juste prendre l'habitude) -**Frequency** : Daily (avant chaque sortie) -**Created** : 13/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Exemple concret de "thinking" à elle quotidiennement. La towel était l'exemple déclencheur (conflit 07/11), mais le principe c'est de PENSER à ses besoins dans les petits détails du quotidien. - ---- - -### Card #10 - Plan Voyage Beijing ⚠️ CRITICAL -**ID** : PLAN-001 -**Question** : Quel est le statut du plan de voyage à Beijing ? As-tu une proposition concrète à présenter à Tingting ? -**Answer** : Je dois avoir un plan CONCRET : dates proposées (même rough), durée (combien de jours), budget estimé, itinéraire basique (quoi voir/faire), logement (quel quartier). Ne pas juste dire "on devrait y aller" mais venir avec "J'ai réfléchi, voilà ce que je propose, qu'en penses-tu ?" C'est MON RÔLE de lead le planning voyage. -**Tags** : action, planning, travel, lead, critical -**Difficulty** : Hard (nécessite recherche + structuration) -**Frequency** : Every 2-3 days (jusqu'à proposition faite) -**Created** : 15/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Identifié dans daily check du 15/11. Pattern : j'ai des notes mais elles ne deviennent jamais des propositions concrètes présentées à Tingting. Beijing est important pour elle (capitale, culture, histoire). Une fois la proposition faite ET discutée avec elle, cette carte peut passer en fréquence réduite pour suivre l'exécution. - ---- - -### Card #11 - Plan Voyage France ⚠️ CRITICAL -**ID** : PLAN-002 -**Question** : Quel est le statut du plan de voyage en France ? As-tu une proposition concrète à présenter à Tingting ? -**Answer** : Je dois avoir un plan CONCRET : dates proposées (quelle saison, combien de temps), villes/régions à visiter (Paris obligatoire, autres ?), budget estimé, logistique (trains/voiture), ce qu'elle voudrait voir/faire. C'est MON PAYS donc c'est MON RÔLE de lead ce voyage et de le rendre spécial pour elle. Venir avec "Voilà ce que j'ai pensé pour te montrer la France, qu'en penses-tu ?" -**Tags** : action, planning, travel, lead, critical, france -**Difficulty** : Hard (nécessite recherche + connaître ses envies) -**Frequency** : Every 2-3 days (jusqu'à proposition faite) -**Created** : 15/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Identifié dans daily check du 15/11. C'est particulièrement important : France = mon pays, ma culture, ma famille. Elle veut voir que je pense à lui faire découvrir mon monde. Pattern identique : notes non transformées en plan concret. Une fois la proposition faite ET discutée avec elle, cette carte peut passer en fréquence réduite pour suivre l'exécution. - ---- - -### Card #12 - Post-Event Negativity ⚠️ CRITICAL -**ID** : PATTERN-001 -**Question** : Qu'est-ce que Tingting dit à propos de ta réaction après les événements (même positifs) ? -**Answer** : "Negative after event. Even positive one. Nice as a engineer but not so much as a lover." Je tends à analyser/critiquer/identifier les problèmes APRÈS les événements au lieu de juste apprécier le moment passé ensemble. Mindset ingénieur = chercher ce qui peut être amélioré. Mais pour elle en tant que lover, elle veut que je savoure les bons moments, que je montre de la gratitude, que je dise "c'était cool". Au lieu de ça, je pointe ce qui n'allait pas. Ça tue la magie et la fait sentir que rien n'est jamais assez bien. -**Tags** : pattern, emotional, critical, mindset -**Difficulty** : Hard (va contre mon instinct d'analyse) -**Frequency** : Every 2-3 days (vérifier pattern récent) -**Created** : 15/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Pattern identifié par Tingting. C'est un problème de **mindset** : l'analyse critique est utile pour le code, destructive pour la romance. APRÈS un événement positif (date, sortie, moment ensemble), je dois CONSCIEMMENT choisir de savourer au lieu d'analyser. Dire "Merci bébé, c'était vraiment cool" au lieu de "C'était bien mais...". Elle veut un lover qui apprécie, pas un QA engineer qui debug. - ---- - -### Card #13 - Reddit Saves Review -**ID** : PERSONAL-001 -**Question** : As-tu reviewé tes Reddit saves cette semaine pour extraire des infos utiles ? -**Answer** : Je save des posts Reddit avec des infos importantes (tips, guides, resources) mais je ne les review JAMAIS. Pattern d'oubli : je collecte mais n'utilise pas. Je dois RÉGULIÈREMENT (au moins 1x/semaine) parcourir mes saves, extraire les infos utiles, les intégrer dans mes systèmes/notes, puis unsave ce qui est traité. Sinon c'est juste du hoarding digital inutile. -**Tags** : personal, productivity, knowledge-management -**Difficulty** : Medium (nécessite discipline) -**Frequency** : Weekly (1x semaine) -**Created** : 15/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Pattern d'accumulation sans action. Les saves Reddit sont utiles seulement si je les traite. Bloquer 30 minutes 1x/semaine pour review + extract + intégrer. - ---- - -### Card #14 - Social Media Automation Papa -**ID** : FAMILY-001 -**Question** : Quel est le statut du système d'automatisation des réseaux sociaux pour papa ? -**Answer** : Papa a besoin d'aide pour automatiser sa présence sur les réseaux sociaux (probablement pour son activité pro). C'est MON DOMAINE (tech/automation) donc c'est ma responsabilité de l'aider. Je dois : (1) Comprendre ses besoins exacts, (2) Rechercher les solutions/outils adaptés, (3) Proposer un plan concret, (4) L'aider à l'implémenter. Ne pas juste dire "oui je vais regarder" et oublier - AGIR. -**Tags** : family, project, tech, automation, responsibility -**Difficulty** : Hard (nécessite recherche + temps) -**Frequency** : Every 3-4 days (jusqu'à plan proposé) -**Created** : 15/11/2025 -**Last Review** : 18/11/2025 -**Success Rate** : 100% (1 review) -**Times Asked** : 1 -**Times Failed** : 0 -**Notes** : Papa a besoin de mon expertise. Pattern risqué : oublier les demandes de la famille parce que "pas urgent". C'est important pour lui = doit être important pour moi. Une fois le système en place, cette carte peut être retirée ou réduite en fréquence pour maintenance. ✅ 18/11 : A relancé le sujet parce que situation a changé - pattern positif, réagit quand contexte évolue au lieu de laisser moisir. - ---- - -### Card #15 - Class Generator Adapter Mac -**ID** : TECH-001 -**Question** : As-tu adapté class_generator pour Mac cette semaine ? -**Answer** : J'ai un outil class_generator qui doit être adapté pour fonctionner sur Mac. Pattern classique : projet utile qui reste dans la todo list sans jamais être fait. Je dois : (1) Identifier les incompatibilités Mac, (2) Adapter le code, (3) Tester sur Mac, (4) Déployer. Bloquer du temps dédié pour le faire au lieu de dire "je ferai ça plus tard". -**Tags** : tech, project, tools, mac -**Difficulty** : Medium (technique mais limité en scope) -**Frequency** : Every 3-4 days (jusqu'à terminé) -**Created** : 15/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Projet perso qui traîne. Une fois adapté et testé, cette carte peut être retirée. Si bloqué techniquement, demander de l'aide ou prioriser autrement - mais ne pas laisser moisir indéfiniment dans la backlog. - ---- - -### Card #16 - Fiches Nutritionnelles -**ID** : ACTION-006 -**Question** : As-tu utilisé les fiches nutritionnelles (food/Raw/) pour planifier ou cuisiner quelque chose cette semaine ? -**Answer** : J'ai créé 100+ fiches nutritionnelles détaillées sur poissons, fruits, viandes, légumes, herbes. C'est du "thinking" à elle SEULEMENT si je les UTILISE concrètement pour cuisiner des plats sains pour elle. Faire des fiches sans action = Pattern d'oubli classique (documenter mais pas agir). Je dois soit : planifier des repas basés sur ces fiches, OU cuisiner en utilisant les infos nutritionnelles. -**Tags** : action, food, nutrition, thinking -**Difficulty** : Medium (passer de la théorie à l'action) -**Frequency** : Every 3-4 days -**Created** : 13/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Créé sur laptop au lieu d'étudier le chinois. C'est "thinking" à elle SI utilisé concrètement. Sinon c'est juste de la procrastination intellectuelle. -**Card File** : `cards/fiches_nutritionnelles.md` - ---- - -### Card #17 - Cuisiner pour Elle -**ID** : ACTION-007 -**Question** : Quand as-tu cuisiné pour Tingting la dernière fois ? -**Answer** : Cuisiner pour elle = Action concrète de "thinking". J'ai des recettes dans food/ (beef broccoli, pasta salad curry, braised beef, honey apple dessert, soup system) + fiches nutritionnelles dans food/Raw/. Je dois UTILISER ces ressources pour cuisiner régulièrement. Ne pas laisser les recettes et fiches dormir dans le repo. Si je n'ai pas cuisiné cette semaine : PLANIFIER un repas dans les 48h. -**Tags** : action, food, cooking, thinking, care -**Difficulty** : Medium (prendre le temps de cuisiner) -**Frequency** : Every 2-3 days (vérifier régulièrement) -**Created** : 13/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Lié à CORE-001 (Complacency). Cuisiner pour elle = Démonstration concrète que je "think" à elle. C'est pas juste l'idée, c'est l'ACTION qui compte. -**Card File** : `cards/cuisiner_pour_elle.md` - ---- - -### Card #18 - Memory Decay Pattern (META) -**ID** : META-001 -**Question** : Pourquoi tu oublies d'utiliser les outils que tu crées, et pourquoi ce système Daily Check existe ? -**Answer** : Ce n'est PAS de la procrastination ou du manque de motivation. Pattern identifié : Je CRÉE des outils sophistiqués (fiches nutritionnelles, recettes, docs, conversation topics) et j'AGIS avec effort réel (je cuisine, je réfléchis, je documente). MAIS : Temps passe → Mémoire s'érode → J'OUBLIE QUE CES OUTILS EXISTENT → Pas de réutilisation. Le problème = Memory persistence, pas motivation. Le Daily Check existe pour maintenir la CONSCIENCE des ressources disponibles. Sans rappel systématique, la chaîne se brise : Création ✅ → Usage initial ✅ → Oubli de l'existence ❌ → Jamais réutilisé ❌. C'est un problème cognitif de mémoire, pas un problème de caractère. -**Tags** : meta, theory, memory, system, understanding -**Difficulty** : Medium (comprendre et accepter ce pattern) -**Frequency** : Weekly (rappel régulier du pourquoi) -**Created** : 13/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : CARTE THÉORIQUE CRITIQUE. Comprendre ce pattern évite l'auto-flagellation inutile ("je suis nul, je procrastine"). Non : tu as un pattern cognitif spécifique qui nécessite des systèmes de rappel. Le perfectionisme et les standards élevés sont des forces, pas des faiblesses. Le système Daily Check compense la memory decay, c'est tout. -**Card File** : `cards/memory_decay_pattern.md` - ---- - -### Card #19 - Manage Music on Phone -**ID** : PERSONAL-002 -**Question** : As-tu géré la musique sur ton téléphone cette semaine ? -**Answer** : J'ai besoin de maintenir une bibliothèque musicale organisée et à jour sur mon téléphone. Pattern classique : laisser la musique en désordre, playlists obsolètes, ou ne pas ajouter de nouvelles chansons. Actions concrètes : (1) Nettoyer les playlists existantes, (2) Ajouter de nouvelles musiques, (3) Supprimer ce que je n'écoute plus, (4) Organiser par mood/contexte. Si pas fait cette semaine : bloquer 30 minutes pour le faire. -**Tags** : personal, music, organization, maintenance -**Difficulty** : Easy (juste prendre le temps) -**Frequency** : Every 7 days -**Created** : 18/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Projet perso de maintenance. Une fois organisé, devrait juste nécessiter des mises à jour régulières. Ne pas laisser s'accumuler pendant des mois. -**Card File** : `cards/manage_music_phone.md` - ---- - -### Card #20 - Les 3 Premières Secondes -**ID** : PERSONAL-003 -**Question** : Que dois-tu faire dans les 3 premières secondes en entrant dans un espace social ? -**Answer** : (1) Tête droite - position neutre, ni arrogante ni timide. (2) Regard calme - balayer la pièce tranquillement, comme si j'avais ma place ici. (3) Contact visuel bref - quand mon regard croise quelqu'un, maintenir 1 seconde + léger sourire ou signe de tête. C'est une "porte ouverte" non verbale. ERREUR À ÉVITER : Entrer tête baissée, yeux sur téléphone/sol = signal "ne me dérangez pas". Les 3 premières secondes définissent si je parais ouvert ou fermé. -**Tags** : personal, social-skills, approachability, body-language, first-impression -**Difficulty** : Medium (oser lever la tête et regarder) -**Frequency** : Every 3-4 days (pour ancrer l'habitude) -**Created** : 19/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Technique #1 du système "Devenir Plus Abordable". Application immédiate : restaurants, social events, même au bureau. Lié à CORE-001 (Complacency) - être présent et attentif dès l'entrée, pas en autopilot. Applicable avec Tingting : quand je rentre à la maison, comment j'entre définit le ton. -**Card File** : `cards/trois_premieres_secondes.md` - ---- - -### Card #21 - Validation Interne vs Externe ⚠️ CRITICAL -**ID** : PERSONAL-004 -**Question** : Quelle est la différence entre validation interne et validation externe, et pourquoi c'est critique ? -**Answer** : VALIDATION EXTERNE = Attendre que les autres me remarquent, me valident, m'approuvent. Mesurer ma valeur au nombre de personnes qui me parlent. Cette énergie de "besoin" REPOUSSE les gens. VALIDATION INTERNE = Ne pas attendre la permission d'exister dans un espace. Mantra : "Je n'ai pas besoin que tu m'aimes, mais je suis ouvert à te connaître". Paradoxe puissant : Quand j'arrête d'avoir BESOIN d'attention, je commence à l'ATTIRER. Cette autosuffisance est intrigante et rend les interactions authentiques au lieu de pesantes. -**Tags** : personal, mindset, core-concept, validation, neediness, critical -**Difficulty** : Hard (va contre l'instinct de chercher approbation) -**Frequency** : Every 2-3 days (jusqu'à intégré comme mindset par défaut) -**Created** : 19/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Technique #5 - LA PLUS IMPORTANTE selon le texte source. C'est le fondement de toutes les autres techniques. Lié directement à CORE-001 (Complacency) et mes interactions avec Tingting : si je cherche constamment son approbation au lieu d'être authentiquement présent, ça crée une dynamique "needy". Elle veut un homme qui n'a pas BESOIN d'elle pour se sentir complet, mais qui CHOISIT d'être avec elle. Mindset shift fondamental. -**Card File** : `cards/validation_interne_externe.md` - ---- - -### Card #22 - Curiosité Sincère vs Être Intéressant -**ID** : PERSONAL-005 -**Question** : Quelle est la différence entre "être intéressant" et "être intéressé", et laquelle attire les gens ? -**Answer** : ÊTRE INTÉRESSANT = Préparer des histoires captivantes, des répliques intelligentes, attendre mon tour pour parler. Résultat : je n'écoute pas vraiment. ÊTRE INTÉRESSÉ = Curiosité sincère pour l'autre personne. Poser de vraies questions qui montrent un intérêt réel : "Quelle est la partie la plus difficile dans ce que tu fais ?" au lieu de questions superficielles. L'objectif : faire en sorte que l'autre se sente ENTENDU et IMPORTANT. Les gens se souviennent pas de ce que j'ai dit, mais de comment je les ai fait sentir. Leur offrir ma pleine attention est profondément magnétique. -**Tags** : personal, communication, curiosity, listening, connection -**Difficulty** : Medium (arrêter de penser à ma prochaine réplique et vraiment écouter) -**Frequency** : Every 3-4 days -**Created** : 19/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Technique #3. DIRECTEMENT applicable avec Tingting : quand elle me parle, suis-je vraiment CURIEUX de comprendre ce qu'elle ressent, ou est-ce que je prépare déjà ma défense/réponse ? Lié à ACTION-003 (Initier conversations) - quand j'initie, c'est pour COMPRENDRE elle, pas pour performer ou prouver que je suis un bon boyfriend. Aussi lié à LEAD-001 (Processing Time) - prendre le temps de vraiment COMPRENDRE avant de répondre. -**Card File** : `cards/curiosite_sincere.md` - ---- - -### Card #23 - Needy vs Magnétique : Les Signaux -**ID** : PERSONAL-006 -**Question** : Quels sont les signaux comportementaux qui rendent quelqu'un "needy" vs "magnétique" ? -**Answer** : NEEDY (repousse) : (1) Combler chaque silence avec bavardage nerveux, (2) Chercher constamment validation/attention, (3) Posture fermée (mains dans poches, épaules voûtées, tête baissée), (4) Parler de soi pour impressionner au lieu d'écouter. MAGNÉTIQUE (attire) : (1) À l'aise avec les silences - présent et calme, (2) Validation interne - n'attend pas permission d'exister, (3) Posture ouverte (épaules détendues, bras naturels, regard calme), (4) Curieux sincère - pose vraies questions, écoute vraiment. Le calme et la confiance tranquille sont CONTAGIEUX - les gens se détendent et s'ouvrent. -**Tags** : personal, pattern, neediness, magnetism, synthesis, social-skills -**Difficulty** : Medium (reconnaître mes propres patterns) -**Frequency** : Every 4-5 days -**Created** : 19/11/2025 -**Last Review** : Never -**Success Rate** : N/A (nouveau) -**Times Asked** : 0 -**Times Failed** : 0 -**Notes** : Synthèse des erreurs courantes vs approches magnétiques. Permet de self-check : "Est-ce que je suis en mode needy ou magnétique en ce moment ?" Applicable avec Tingting : quand je sens que j'ai besoin de son approbation ou que je cherche à la convaincre que je suis un bon boyfriend, je suis en mode needy. Quand je suis juste présent, calme, et authentiquement curieux de la comprendre, je suis magnétique. Lié à PATTERN-001 (Post-Event Negativity) - le besoin de validation se manifeste aussi par la critique pour prouver que je suis "smart". -**Card File** : `cards/needy_vs_magnetique.md` - ---- - -## Retired Cards - -(Aucune pour l'instant - les cartes sont retirées quand le problème est durablement résolu) - ---- - -## Card Creation Guidelines - -### Quand créer une nouvelle carte ? - -**Créer quand** : -- Nouveau pattern identifié dans un conflit -- Truc important qu'elle a dit et que je risque d'oublier -- Action concrète convenue ensemble -- Insight important sur la dynamique couple - -**Ne PAS créer quand** : -- C'est trop spécifique/temporaire (genre "acheter du lait demain") -- C'est redondant avec une carte existante -- C'est pas vraiment important - -### Format de carte - -```markdown -### Card #X - [Nom Court] -**ID** : [CATEGORY-XXX] -**Question** : [Question claire, directe] -**Answer** : [Réponse complète, avec contexte si nécessaire] -**Tags** : [tags séparés par virgule] -**Difficulty** : Easy / Medium / Hard -**Frequency** : [À quelle fréquence la poser] -**Created** : [Date] -**Last Review** : [Date ou "Never"] -**Success Rate** : [X% ou N/A] -**Times Failed** : [Nombre] -**Notes** : [Contexte additionnel, pourquoi c'est important] -``` - -### Tag System - -**Categories** : -- `core-problem` : Problèmes fondamentaux de la relation -- `action` : Actions concrètes à faire -- `communication` : Patterns de communication -- `detail` : Détails pratiques à retenir -- `pattern` : Patterns comportementaux - -**Importance** : -- `critical` : À ne JAMAIS oublier -- `daily` : À checker quotidiennement -- `weekly` : Moins urgent mais important - -### Difficulty Levels - -**Easy** : Je peux répondre facilement, juste besoin de maintenir -**Medium** : Je dois y penser, risque d'oubli moyen -**Hard** : J'oublie systématiquement, ou c'est difficile émotionnellement - -### Frequency Guidelines - -**Daily** : Cartes critical ou hard que j'oublie souvent -**Every 2-3 days** : Cartes medium, pour maintenir -**Weekly** : Cartes easy, juste pour pas oublier complètement - ---- - -## Spaced Repetition Algorithm (Simple) - -### Logique de base - -**Si réponse correcte** : -- Easy card : +7 jours avant prochaine review -- Medium card : +3 jours -- Hard card : +1 jour - -**Si réponse incorrecte** : -- Toutes difficultés : Review demain (reset) - -**Si échec 3x sur même carte** : -- Augmenter frequency à "daily" -- Flagged pour attention spéciale - -### Update après chaque session - -Après chaque daily check, update : -1. **Last Review** : Date d'aujourd'hui -2. **Success Rate** : Calculer nouveau % -3. **Times Failed** : Incrémenter si échec -4. **Next Review** : Calculer selon l'algo ci-dessus - ---- - -## Stats Overview - -**À calculer hebdomadairement** : - -```markdown -### Week of [DATE] - -**Total Reviews** : X -**Average Score** : X/3 -**Cards Mastered** : X (success rate > 80% sur 5+ reviews) -**Cards Struggling** : X (success rate < 50%) -**Longest Streak** : X days -**Times Skipped** : X - -**Most Failed Card** : [Card ID] - [X failures] -**Best Performing Card** : [Card ID] - [X% success rate] -``` - ---- - -## Next Actions - -- [ ] Review ces 4 cartes lors du prochain daily check -- [ ] Après 1 semaine, analyser quelles cartes sont les plus difficiles -- [ ] Créer nouvelles cartes si nouveaux patterns identifiés -- [ ] Retirer cartes si problèmes durablement résolus (3+ semaines de succès) diff --git a/anki_tingting/daily_sessions.md b/anki_tingting/daily_sessions.md index 0ff6ed8..0d58fe0 100644 --- a/anki_tingting/daily_sessions.md +++ b/anki_tingting/daily_sessions.md @@ -831,3 +831,25 @@ Bon retour après 2 jours d'absence. Montre une meilleure compréhension des con --- + +### 2025-11-24 16:26 + +**Triggered by** : TTS Service +**Check Time** : 16:00 +**Status** : completed +**Streak** : 1 jours +**Days Skipped** : 0 + +--- + + +### 2025-11-25 07:41 + +**Triggered by** : TTS Service +**Check Time** : 07:00 +**Status** : completed +**Streak** : 2 jours +**Days Skipped** : 0 + +--- + diff --git a/anki_tingting/test_popup.py b/anki_tingting/test_popup.py deleted file mode 100644 index 8ac6550..0000000 --- a/anki_tingting/test_popup.py +++ /dev/null @@ -1,39 +0,0 @@ -""" -Test rapide du popup + TTS sans attendre les heures programmées -""" - -import sys -import os - -# Add parent directory to path -sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) - -from tingting_guardian_service import speak, DailyCheckPopup, state - -print("🧪 Test du système popup + TTS") -print(f"Current streak: {state.streak}") -print(f"Days skipped: {state.days_skipped}") -print("\n") - -# Test prompt -test_prompt = "Test système. Bonjour Alexis. Jour 1 de ta streak. Qu'est-ce que Tingting a besoin aujourd'hui ?" - -print("🔊 Lecture du prompt avec TTS...") -speak(test_prompt) - -print("📋 Affichage du popup...") -popup = DailyCheckPopup(test_prompt, "14:00") -response = popup.show() - -print(f"\n✅ Réponse reçue: {response}") - -if response == "DO_CHECK": - print("✅ Bouton 'Faire le Check' cliqué - Ouverture de Claude...") - # Ne pas vraiment ouvrir Claude pour le test - print("(Claude ne s'ouvre pas en mode test)") -elif response == "SNOOZE": - print("⏰ Bouton 'Snooze' cliqué") -elif response == "SKIP": - print("❌ Bouton 'Skip' cliqué") - -print("\n✅ Test terminé !") diff --git a/anki_tingting/test_voices.py b/anki_tingting/test_voices.py deleted file mode 100644 index 9fa5e43..0000000 --- a/anki_tingting/test_voices.py +++ /dev/null @@ -1,27 +0,0 @@ -"""Test script to list and preview available TTS voices""" -import pyttsx3 - -engine = pyttsx3.init() -voices = engine.getProperty('voices') - -print("Available voices on your system:\n") -for i, voice in enumerate(voices): - print(f"{i}. {voice.name}") - print(f" ID: {voice.id}") - print(f" Languages: {voice.languages}") - print() - -# Test the first few voices -print("\n--- Testing voices ---\n") -test_text = "Yo Alexis, daily check time. Tu fais le check ou tu vas oublier ?" - -for i, voice in enumerate(voices[:3]): # Test first 3 - print(f"Testing voice {i}: {voice.name}") - engine.setProperty('voice', voice.id) - engine.setProperty('volume', 1.0) - engine.setProperty('rate', 150) - engine.say(f"Voice {i}. {test_text}") - engine.runAndWait() - input("Press Enter for next voice...") - -print("\nDone!") diff --git a/anki_tingting/test_voices_winrt.py b/anki_tingting/test_voices_winrt.py deleted file mode 100644 index 8a3ab24..0000000 --- a/anki_tingting/test_voices_winrt.py +++ /dev/null @@ -1,44 +0,0 @@ -"""Test Windows modern TTS voices using WinRT""" -import asyncio -import edge_tts - -async def test_edge_voices(): - """Test Edge TTS voices (cloud-based, high quality)""" - - # List some good voices - voices = [ - ("en-US-GuyNeural", "English Male (Guy)"), - ("en-US-JennyNeural", "English Female (Jenny)"), - ("fr-FR-HenriNeural", "French Male (Henri)"), - ("fr-FR-DeniseNeural", "French Female (Denise)"), - ] - - test_text = "Yo Alexis, daily check time. Tu fais le check ou tu vas oublier ?" - - print("Testing Edge TTS voices (high quality):\n") - - for voice_id, voice_name in voices: - print(f"Testing: {voice_name} ({voice_id})") - - # Generate speech - communicate = edge_tts.Communicate(test_text, voice_id) - output_file = f"test_{voice_id}.mp3" - await communicate.save(output_file) - - # Play it - import os - os.system(f'start {output_file}') - - input(f"Press Enter for next voice...") - - # Cleanup - try: - os.remove(output_file) - except: - pass - - print("\nDone! Which voice did you prefer?") - -if __name__ == "__main__": - # First install: pip install edge-tts - asyncio.run(test_edge_voices()) diff --git a/birthday_slides/slide_1.html b/birthday_slides/slide_1.html deleted file mode 100644 index abe2908..0000000 --- a/birthday_slides/slide_1.html +++ /dev/null @@ -1,170 +0,0 @@ - - -
- - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_10.html b/birthday_slides/slide_10.html deleted file mode 100644 index af7b041..0000000 --- a/birthday_slides/slide_10.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_11.html b/birthday_slides/slide_11.html deleted file mode 100644 index 258ae75..0000000 --- a/birthday_slides/slide_11.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_12.html b/birthday_slides/slide_12.html deleted file mode 100644 index 33b1446..0000000 --- a/birthday_slides/slide_12.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_13.html b/birthday_slides/slide_13.html deleted file mode 100644 index 2f755a9..0000000 --- a/birthday_slides/slide_13.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_14.html b/birthday_slides/slide_14.html deleted file mode 100644 index d0deea1..0000000 --- a/birthday_slides/slide_14.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_15.html b/birthday_slides/slide_15.html deleted file mode 100644 index 82dcc64..0000000 --- a/birthday_slides/slide_15.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_16.html b/birthday_slides/slide_16.html deleted file mode 100644 index f2e6a10..0000000 --- a/birthday_slides/slide_16.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_17.html b/birthday_slides/slide_17.html deleted file mode 100644 index 588f531..0000000 --- a/birthday_slides/slide_17.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_18.html b/birthday_slides/slide_18.html deleted file mode 100644 index 8d8daef..0000000 --- a/birthday_slides/slide_18.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_2.html b/birthday_slides/slide_2.html deleted file mode 100644 index d4dab38..0000000 --- a/birthday_slides/slide_2.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_3.html b/birthday_slides/slide_3.html deleted file mode 100644 index 07a8c98..0000000 --- a/birthday_slides/slide_3.html +++ /dev/null @@ -1,177 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_4.html b/birthday_slides/slide_4.html deleted file mode 100644 index a9d552e..0000000 --- a/birthday_slides/slide_4.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_5.html b/birthday_slides/slide_5.html deleted file mode 100644 index 992a696..0000000 --- a/birthday_slides/slide_5.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_6.html b/birthday_slides/slide_6.html deleted file mode 100644 index 90222ab..0000000 --- a/birthday_slides/slide_6.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_7.html b/birthday_slides/slide_7.html deleted file mode 100644 index ebd86f1..0000000 --- a/birthday_slides/slide_7.html +++ /dev/null @@ -1,175 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_8.html b/birthday_slides/slide_8.html deleted file mode 100644 index e9a0e35..0000000 --- a/birthday_slides/slide_8.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/birthday_slides/slide_9.html b/birthday_slides/slide_9.html deleted file mode 100644 index 276ee70..0000000 --- a/birthday_slides/slide_9.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/create_birthday_classmeeting.js b/create_birthday_classmeeting.js deleted file mode 100644 index f895602..0000000 --- a/create_birthday_classmeeting.js +++ /dev/null @@ -1,495 +0,0 @@ -const pptxgen = require('pptxgenjs'); -const path = require('path'); -const fs = require('fs'); -const html2pptx = require('./.claude/skills/pptx/scripts/html2pptx.js'); - -// Tingting's signature color palette + celebration touches -const colors = { - primary: '#6B2C3E', // Bordeaux profond - accent: '#B8974F', // Or antique - background: '#F5F1E8', // Crème ivoire - celebration: '#E8B4B8', // Rose doux pour anniversaire - warm: '#D4AF37', // Or chaud pour bougies - text: '#2C1810' // Brun foncé pour lisibilité -}; - -// CSS shared styles -const sharedStyles = ` - * { margin: 0; padding: 0; box-sizing: border-box; } - - body { - width: 960px; - height: 540px; - margin: 0; - padding: 0; - overflow: hidden; - } - - .slide { - width: 960px; - height: 540px; - position: relative; - font-family: 'Microsoft YaHei', 'Segoe UI', sans-serif; - overflow: hidden; - } - - .bg-primary { background: ${colors.primary}; } - .bg-warm { background: ${colors.background}; } - .bg-celebration { background: ${colors.celebration}; } - - .title-main { - position: absolute; - top: 50%; - left: 50%; - transform: translate(-50%, -50%); - text-align: center; - width: 90%; - } - - .title-main h1 { - font-size: 48px; - color: ${colors.background}; - margin-bottom: 20px; - font-weight: 700; - letter-spacing: 2px; - } - - .title-main .subtitle { - font-size: 24px; - color: ${colors.celebration}; - font-weight: 300; - } - - .title-main .class-info { - font-size: 20px; - color: ${colors.accent}; - margin-top: 15px; - font-weight: 400; - } - - .content-slide { - padding: 50px 70px 60px 70px; - } - - .content-slide h2 { - font-size: 32px; - color: ${colors.primary}; - margin-bottom: 25px; - font-weight: 700; - } - - .content-slide p { - font-size: 20px; - line-height: 1.8; - color: ${colors.text}; - margin-bottom: 15px; - } - - .content-slide ul { - margin-left: 40px; - margin-top: 20px; - } - - .content-slide li { - font-size: 18px; - line-height: 1.8; - color: ${colors.text}; - margin-bottom: 8px; - } - - .quote-box { - background: white; - padding: 25px 30px; - margin: 25px 0; - border-radius: 8px; - box-shadow: 0 2px 8px rgba(0,0,0,0.1); - } - - .quote-box p { - font-size: 22px; - color: ${colors.primary}; - font-style: italic; - line-height: 1.6; - } - - .number-highlight { - display: inline-block; - background: ${colors.accent}; - color: white; - padding: 5px 15px; - border-radius: 20px; - font-weight: bold; - font-size: 24px; - } - - .decoration-top { - position: absolute; - top: 0; - right: 0; - width: 200px; - height: 200px; - background: ${colors.accent}40; - opacity: 0.3; - border-radius: 50%; - } - - .decoration-bottom { - position: absolute; - bottom: 0; - left: 0; - width: 150px; - height: 150px; - background: ${colors.celebration}40; - opacity: 0.3; - border-radius: 50%; - } - - .v-center { - position: absolute; - top: 50%; - transform: translateY(-50%); - width: 100%; - padding: 0 60px; - } - - .section-title { - background: ${colors.primary}; - display: flex; - align-items: center; - justify-content: center; - } - - .section-title h2 { - font-size: 48px; - color: ${colors.background}; - text-align: center; - font-weight: 700; - padding: 0; - } -`; - -// Slide templates -const slides = [ - // Slide 1: Title - ``, - - // Slide 2: Opening - ``, - - // Slide 3: 373 Days - ``, - - // Slide 4: Section title - ``, - - // Slide 5: Welcome Birthday Stars - ``, - - // Slide 6: Meaning of Birthdays - ``, - - // Slide 7: Surprise (TYPO FIXED) - ``, - - // Slide 8: Hosts' Birthday - ``, - - // Slide 9: Growing Together (OPTIMIZED) - ``, - - // Slide 10: Making a Wish - ``, - - // Slide 11: Blow Candles - ``, - - // Slide 12: Gifts - ``, - - // Slide 13: Interactive Blessings - ``, - - // Slide 14: Gratitude to Parents - ``, - - // Slide 15: Birthday Wishes (TYPO FIXED: 住→祝) - ``, - - // Slide 16: Class Photo - ``, - - // Slide 17: Looking Forward - ``, - - // Slide 18: Thank You - `` -]; - -// Create HTML files for each slide -function createHTMLFiles() { - const slideDir = path.join(__dirname, 'birthday_slides'); - if (!fs.existsSync(slideDir)) { - fs.mkdirSync(slideDir); - } - - slides.forEach((slideContent, index) => { - const htmlContent = ` - - - - - - -${slideContent} - -`; - - const filename = path.join(slideDir, `slide_${index + 1}.html`); - fs.writeFileSync(filename, htmlContent, 'utf-8'); - console.log(`✓ Created: slide_${index + 1}.html`); - }); - - return slideDir; -} - -async function createPresentation() { - console.log('🚀 Generating Birthday Class Meeting PowerPoint...\n'); - - // Create HTML files - const slideDir = createHTMLFiles(); - console.log('\n📄 HTML files created successfully\n'); - - const pptx = new pptxgen(); - pptx.layout = 'LAYOUT_16x9'; - pptx.author = 'Tingting - Class 7-3'; - pptx.title = '七年三班生日主题班会'; - - try { - // Process each slide - for (let i = 0; i < slides.length; i++) { - const slideFile = path.join(slideDir, `slide_${i + 1}.html`); - console.log(`📊 Processing Slide ${i + 1}/${slides.length}...`); - await html2pptx(slideFile, pptx); - } - - // Save presentation - await pptx.writeFile({ fileName: 'Birthday_ClassMeeting_Class73.pptx' }); - - console.log('\n✅ PowerPoint generated successfully!'); - console.log('📁 File: Birthday_ClassMeeting_Class73.pptx'); - console.log('🎨 Style: Tingting Signature Elegant + Celebration'); - console.log(`📊 Total slides: ${slides.length}`); - console.log('\n✏️ Corrections applied:'); - console.log(' • Slide 7: Fixed surprise moment text'); - console.log(' • Slide 9: Optimized content (removed repetition)'); - console.log(' • Slide 15: Fixed typo 住→祝'); - console.log('\n➕ New slides added:'); - console.log(' • Slide 13: Interactive classmate blessings'); - console.log(' • Slide 14: Gratitude to parents'); - console.log(' • Slide 16: Class photo moment'); - console.log(' • Slide 17: Looking forward'); - console.log('\n💡 All elements are 100% editable in PowerPoint!'); - - } catch (error) { - console.error('\n❌ Error:', error.message); - if (error.stack) { - console.error('\nStack:', error.stack); - } - } -} - -createPresentation(); diff --git a/network_diagnostic_ultimate.bat b/network_diagnostic_ultimate.bat deleted file mode 100644 index 5da769d..0000000 --- a/network_diagnostic_ultimate.bat +++ /dev/null @@ -1,525 +0,0 @@ -@echo off -chcp 65001 >nul -setlocal enabledelayedexpansion - -:: ═══════════════════════════════════════════════════════════════════ -:: NETWORK DIAGNOSTIC ULTIMATE v1.0 -:: Analyse complète réseau : Interfaces, VPN, DNS, Routes, Devices, Latency -:: ═══════════════════════════════════════════════════════════════════ - -set OUTPUT_DIR=%~dp0network_analysis -set TIMESTAMP=%date:~-4%%date:~3,2%%date:~0,2%_%time:~0,2%%time:~3,2%%time:~6,2% -set TIMESTAMP=%TIMESTAMP: =0% -set REPORT=%OUTPUT_DIR%\network_report_%TIMESTAMP%.txt -set HTML_REPORT=%OUTPUT_DIR%\network_report_%TIMESTAMP%.html - -:: Create output directory -if not exist "%OUTPUT_DIR%" mkdir "%OUTPUT_DIR%" - -echo ╔════════════════════════════════════════════════════════════════╗ -echo ║ NETWORK DIAGNOSTIC ULTIMATE - Starting... ║ -echo ╚════════════════════════════════════════════════════════════════╝ -echo. -echo [*] Output: %REPORT% -echo [*] HTML Report: %HTML_REPORT% -echo. - -:: Start TXT report -( -echo ═══════════════════════════════════════════════════════════════════ -echo NETWORK DIAGNOSTIC REPORT - %date% %time% -echo ═══════════════════════════════════════════════════════════════════ -echo. -) > "%REPORT%" - -:: Start HTML report -( -echo ^ -echo ^ -echo ^ -echo ^ -echo ^Generated: %date% %time%^
-) > "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 1: SYSTEM INFORMATION -:: ═══════════════════════════════════════════════════════════════════ - -echo [1/15] Collecting System Information... -( -echo. -echo ═══ 1. SYSTEM INFORMATION ═══ -echo. -systeminfo | findstr /C:"Host Name" /C:"OS Name" /C:"OS Version" /C:"System Type" -echo. -) >> "%REPORT%" - -( -echo ^^Host Name:^ %%a^
>> "%HTML_REPORT%" -) -for /f "tokens=2 delims=:" %%a in ('systeminfo ^| findstr /C:"OS Name"') do ( - echo ^^OS:^ %%a^
>> "%HTML_REPORT%" -) - -echo ^-ipconfig /all -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 3: ACTIVE CONNECTIONS -:: ═══════════════════════════════════════════════════════════════════ - -echo [3/15] Listing Active Connections... -( -echo. -echo ═══ 3. ACTIVE NETWORK CONNECTIONS ═══ -echo. -netstat -ano | findstr ESTABLISHED -echo. -) >> "%REPORT%" - -( -echo ^
-netstat -ano | findstr ESTABLISHED -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 4: ROUTING TABLE -:: ═══════════════════════════════════════════════════════════════════ - -echo [4/15] Dumping Routing Table... -( -echo. -echo ═══ 4. ROUTING TABLE ═══ -echo. -route print -echo. -) >> "%REPORT%" - -( -echo ^
-route print -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 5: ARP CACHE (Connected Devices) -:: ═══════════════════════════════════════════════════════════════════ - -echo [5/15] Checking ARP Cache (Local Devices)... -( -echo. -echo ═══ 5. ARP CACHE - LOCAL DEVICES ═══ -echo. -arp -a -echo. -) >> "%REPORT%" - -( -echo ^
Devices detected on your local network:^
-echo ^-arp -a -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 6: DNS CONFIGURATION -:: ═══════════════════════════════════════════════════════════════════ - -echo [6/15] Analyzing DNS Configuration... -( -echo. -echo ═══ 6. DNS CONFIGURATION ═══ -echo. -ipconfig /displaydns | more -echo. -nslookup google.com -echo. -nslookup baidu.com -echo. -) >> "%REPORT%" - -( -echo ^
-nslookup google.com -echo ^-echo ^
-nslookup baidu.com -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 7: VPN DETECTION -:: ═══════════════════════════════════════════════════════════════════ - -echo [7/15] Detecting VPN Connections... -( -echo. -echo ═══ 7. VPN DETECTION ═══ -echo. -echo --- RAS Connections --- -rasdial -echo. -echo --- Network Adapters (VPN Search) --- -ipconfig /all | findstr /I "VPN TAP Tunnel WireGuard OpenVPN" -echo. -echo --- PowerShell VPN Check --- -powershell -Command "Get-VpnConnection 2>$null | Format-Table Name, ConnectionStatus, ServerAddress" -echo. -) >> "%REPORT%" - -( -echo ^
-powershell -Command "Get-VpnConnection 2>$null | Format-Table Name, ConnectionStatus, ServerAddress" -echo ^-echo ^
-ipconfig /all | findstr /I "VPN TAP Tunnel WireGuard OpenVPN" -echo ^-echo ^
^Default Gateway:^ %GATEWAY%^
-echo ^-ping -n 4 %GATEWAY% -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 9: INTERNET CONNECTIVITY TESTS -:: ═══════════════════════════════════════════════════════════════════ - -echo [9/15] Testing Internet Connectivity... -( -echo. -echo ═══ 9. INTERNET CONNECTIVITY TESTS ═══ -echo. -echo --- Google DNS (8.8.8.8) --- -ping -n 4 8.8.8.8 -echo. -echo --- Cloudflare DNS (1.1.1.1) --- -ping -n 4 1.1.1.1 -echo. -echo --- Baidu (China) --- -ping -n 4 baidu.com -echo. -echo --- Google (International) --- -ping -n 4 google.com -echo. -) >> "%REPORT%" - -( -echo ^
-ping -n 4 8.8.8.8 -echo ^-echo ^
-ping -n 4 1.1.1.1 -echo ^-echo ^
-ping -n 4 baidu.com -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 10: TRACEROUTE -:: ═══════════════════════════════════════════════════════════════════ - -echo [10/15] Running Traceroute... -( -echo. -echo ═══ 10. TRACEROUTE ANALYSIS ═══ -echo. -echo --- Trace to Google (8.8.8.8) --- -tracert -d -h 15 8.8.8.8 -echo. -echo --- Trace to Baidu --- -tracert -d -h 15 baidu.com -echo. -) >> "%REPORT%" - -( -echo ^
-tracert -d -h 15 8.8.8.8 -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 11: OPEN PORTS -:: ═══════════════════════════════════════════════════════════════════ - -echo [11/15] Scanning Open Ports... -( -echo. -echo ═══ 11. OPEN PORTS (LISTENING) ═══ -echo. -netstat -ano | findstr LISTENING -echo. -) >> "%REPORT%" - -( -echo ^
-netstat -ano | findstr LISTENING -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 12: WIRELESS INFO (IF WIFI) -:: ═══════════════════════════════════════════════════════════════════ - -echo [12/15] Collecting Wireless Information... -( -echo. -echo ═══ 12. WIRELESS INFORMATION ═══ -echo. -netsh wlan show interfaces -echo. -echo --- Available WiFi Networks --- -netsh wlan show networks mode=bssid -echo. -echo --- Saved WiFi Profiles --- -netsh wlan show profiles -echo. -) >> "%REPORT%" - -( -echo ^
-netsh wlan show interfaces -echo ^-echo ^
-netsh wlan show networks mode=bssid -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 13: FIREWALL STATUS -:: ═══════════════════════════════════════════════════════════════════ - -echo [13/15] Checking Firewall Status... -( -echo. -echo ═══ 13. FIREWALL STATUS ═══ -echo. -netsh advfirewall show allprofiles -echo. -) >> "%REPORT%" - -( -echo ^
-netsh advfirewall show allprofiles -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 14: NETWORK SHARES -:: ═══════════════════════════════════════════════════════════════════ - -echo [14/15] Listing Network Shares... -( -echo. -echo ═══ 14. NETWORK SHARES ═══ -echo. -net share -echo. -) >> "%REPORT%" - -( -echo ^
-net share -echo ^-) >> "%HTML_REPORT%" - -:: ═══════════════════════════════════════════════════════════════════ -:: SECTION 15: PUBLIC IP & GEOLOCATION -:: ═══════════════════════════════════════════════════════════════════ - -echo [15/15] Detecting Public IP... -( -echo. -echo ═══ 15. PUBLIC IP DETECTION ═══ -echo. -echo --- Your Public IP --- -) >> "%REPORT%" - -:: Try multiple services -powershell -Command "(Invoke-WebRequest -Uri 'https://api.ipify.org' -UseBasicParsing).Content" >> "%REPORT%" 2>nul -if errorlevel 1 ( - powershell -Command "(Invoke-WebRequest -Uri 'https://ifconfig.me' -UseBasicParsing).Content" >> "%REPORT%" 2>nul -) - -echo. >> "%REPORT%" -echo --- IP Geolocation Info --- >> "%REPORT%" -powershell -Command "(Invoke-WebRequest -Uri 'https://ipinfo.io/json' -UseBasicParsing).Content | ConvertFrom-Json | Format-List" >> "%REPORT%" 2>nul - -( -echo ^
^Public IP:^ -) >> "%HTML_REPORT%" - -powershell -Command "(Invoke-WebRequest -Uri 'https://api.ipify.org' -UseBasicParsing).Content" >> "%HTML_REPORT%" 2>nul - -echo ^
>> "%HTML_REPORT%" -echo ^-echo Internet ^<---^> ISP Box/Modem ^<---^> Gateway (%GATEWAY%^) ^<---^> Your PC -echo ^
-) >> "%HTML_REPORT%" - -:: Count devices -for /f %%a in ('arp -a ^| find /c "dynamic"') do set DEVICE_COUNT=%%a -echo ^^%DEVICE_COUNT% devices detected on local network^^
>> "%HTML_REPORT%" - -echo ^Report generated by Network Diagnostic Ultimate^
-echo ^