qmk_userspace/docs/keyboard-optimization-plan.md
Pablo Ontiveros 9d969f7eed add tap dance
2025-08-29 10:21:44 -06:00

11 KiB

Plan de Optimización del Keymap - Corne (Crkbd)

Análisis y recomendaciones basadas en estudios ergonómicos de 2025

📊 Resumen Ejecutivo

Este documento presenta un plan estructurado para optimizar el keymap del teclado Corne basado en:

  • Análisis del keymap actual
  • Investigación de layouts ergonómicos de 2025
  • Estudios de frecuencia de bigrams en programación
  • Mejores prácticas de home row mods en QMK

Fase 1 - COMPLETADA (Enero 2025)

Cambios Implementados

  • Optimización de timing: TAPPING_TERM 220ms → 200ms
  • Configuración avanzada: PERMISSIVE_HOLD, BILATERAL_COMBINATIONS
  • Combos útiles: 5 nuevos combos para operaciones frecuentes
  • Limpieza de capas: Eliminación de copy/paste duplicado
  • Corrección técnica: HM_L de LALT_T a RALT_T

Beneficios Obtenidos

  • 0 días de adaptación - Solo mejoras aditivas
  • Mejor respuesta de home row mods
  • Reducción de fatiga en pulgares con combos alternativos
  • Mayor consistencia en modifier layout

Combos Añadidos

J+K = ESC adicional          (50-100 usos/día)
D+F = TAB adicional          (200+ usos/día)  
K+L = Delete word derecha    (Nuevo - 100+ usos/día)
S+D = Delete word izquierda  (Nuevo - 100+ usos/día)
,+. = ENTER adicional        (300+ usos/día)

🟢 Fase 2 - Impacto Medio (1-2 semanas adaptación)

2.1 Per-Key Tapping Terms

Objetivo: Optimizar timing según fuerza de cada dedo

Implementación:

uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case HM_F: case HM_J: return 180;  // Índices más rápidos
        case HM_A: case HM_SCLN: return 250;  // Meñiques más lentos
        default: return TAPPING_TERM;
    }
}

Beneficios:

  • Menos activaciones accidentales en dedos débiles
  • Respuesta más rápida en dedos fuertes
  • Typing más natural y menos errores

2.2 Implementación de Tap Dance para Símbolos

Objetivo: Consolidar 16+ símbolos frecuentes en 8 tap dances para máxima eficiencia

Análisis de frecuencia personal:

  • . (1,054,817) - , (443,890) - / (543,499) - - (383,003)
  • () (735,492 total) - = (342,151) - {} (462,028 total) - <> (267,609 total)

SYMBOL_NEW layer (implementación con tap dance):

Mano derecha optimizada:
┌─────┬─────┬─────┬─────┬─────┬─────┐
│  `  │TD_AM│  *  │TD_SL│  ^  │     │  Row superior
├─────┼─────┼─────┼─────┼─────┼─────┤
│TD_EQ│TD_J │TD_K │TD_SC│TD_L │     │  Home row (5 TDs)
├─────┼─────┼─────┼─────┼─────┼─────┤
│  ~  │TD_MN│  :  │TD_EX│  %  │     │  Row inferior
└─────┴─────┴─────┴─────┴─────┴─────┘
        Thumbs: @ # $

8 Tap Dances:
- TD_J:  { | {} | }
- TD_K:  ( | () | ("") | () => {} | )
- TD_SC: < | <> | <= | >
- TD_L:  [ | [] | [0] | ]
- TD_EQ: = | == | += | +
- TD_SL: / | // | \
- TD_MN: - | -- | => | _
- TD_AM: & | && | || | |
- TD_EX: ! | != | ?

Estrategia de implementación:

  • L_TAB → SYMBOL_NEW (nueva capa optimizada)
  • L_ESC → SYMBOL (mantener como backup temporal)
  • Período de evaluación: 2-3 semanas
  • Una vez validado → eliminar SYMBOL antigua

Impacto:

  • 16 símbolos consolidados en 8 teclas
  • Reducción 50% en cambios de layer
  • Patrones de código comunes en 2-4 taps

2.3 Optimización de Navegación

Problemas identificados:

  • Page Up/Down requieren stretching
  • Word navigation poco intuitiva
  • Arrows en posiciones subóptimas para programadores

Mejoras:

  • Word movement en home row
  • Page navigation más accesible
  • Consistency con vim shortcuts (preparación Fase 4)

🟡 Fase 3 - Impacto Alto (2-3 semanas adaptación)

3.1 Transición Gradual y Eliminación de Capas

Problema resuelto: SYMBOL y SYMBOL2 fragmentaban símbolos relacionados

Implementación por fases:

Fase A - Transición (2-3 semanas):

  • L_TAB → SYMBOL_NEW (tap dances optimizados)
  • L_ESC → SYMBOL (backup de seguridad)
  • Entrenamiento gradual en tap dances
  • Fallback a SYMBOL cuando sea necesario

Fase B - Consolidación (evaluación):

  • Medir eficiencia y comfort con SYMBOL_NEW
  • Identificar patrones problemáticos
  • Ajustar timings y configuraciones si necesario

Fase C - Finalización:

  • Eliminar SYMBOL y SYMBOL2 completamente
  • Liberar L_ESC para otros usos (UTIL, macros, etc.)
  • Una sola capa de símbolos ultra-optimizada

Beneficios finales:

  • 2 capas eliminadas (SYMBOL + SYMBOL2)
  • 1 tecla de thumb liberada (L_ESC)
  • Símbolos más eficientes por tap dance
  • Patrones de programación integrados

3.2 Reasignación de Layer-Tap Problemático

Problema: Z es muy frecuente para ser layer-tap (undo, palabras con Z)

Opciones evaluadas:

  1. NAV en X (Recomendado): Cut menos frecuente que undo
  2. NAV en V: Paste relocatable a combo
  3. NAV en Q: Letra menos usada, pero alcance de meñique

Implementación:

  • Reasignar L_Z → L_X
  • Combo Z+C = Cut (C(KC_X))
  • Mantener NAV en mano izquierda

3.3 Optimización de Thumb Keys

Análisis de frecuencia actual:

L_ESC  - SYMBOL2  (medio uso)
L_TAB  - SYMBOL   (alto uso)  
L_SPC  - NUMBER   (muy alto uso)
L_ENT  - DEV      (alto uso)
L_BK   - FUNC     (medio uso)
L_DEL  - MEDIA    (bajo uso)

Optimización propuesta: Mover MEDIA a combo, usar thumb para función más frecuente


🔴 Fase 4 - Impacto Extremo (1-2 meses adaptación)

4.1 Navegación Estilo Vim

Transformación completa:

Actual:    ↑←↓→ en disposición estándar
Propuesto: HJKL (H=←, J=↓, K=↑, L=→)

Justificación:

  • Standard en vim/nvim, terminal apps
  • Home row permanente durante navegación
  • Integración natural con shortcuts de desarrollo

Consideración: Solo para usuarios avanzados de vim

4.2 Combos Avanzados de Programación

Macros inteligentes:

Combos propuestos:
- Function declaration patterns
- Arrow function sequences  
- Bracket auto-completion
- Common programming constructs

4.3 Capas Contextuales

Sistema adaptativo:

  • Capas que cambian según aplicación activa
  • Profiles para diferentes workflows
  • Integration con herramientas de desarrollo

🔧 Configuración Técnica de Tap Dance

Configuración QMK necesaria:

// En config.h
#define TAP_DANCE_ENABLE
#define TAPPING_TERM 200
#define TAPPING_TERM_PER_KEY

// Enum para tap dances
enum tap_dances {
    TD_J_BRACES,    // Llaves
    TD_K_PARENS,    // Paréntesis
    TD_SC_ANGLES,   // Ángulos
    TD_L_BRACKETS,  // Corchetes
    TD_EQ_PLUS,     // Equal/Plus
    TD_SL_BACK,     // Slash/Backslash
    TD_MN_UNDER,    // Minus/Underscore
    TD_AM_PIPE,     // Ampersand/Pipe
    TD_EX_QUEST,    // Exclamation/Question
};

// Funciones personalizadas para cada tap dance
void td_k_finished(qk_tap_dance_state_t *state, void *user_data) {
    switch (state->count) {
        case 1:
            if (state->pressed) {
                register_code16(KC_RPRN);  // Hold = )
            } else {
                register_code16(KC_LPRN);  // 1 tap = (
            }
            break;
        case 2:
            SEND_STRING("()");
            tap_code(KC_LEFT);              // 2 taps = ()←
            break;
        case 3:
            SEND_STRING("(\"\"");
            tap_code(KC_LEFT);
            tap_code(KC_LEFT);              // 3 taps = ("")←←
            break;
        case 4:
            SEND_STRING("() => {}");
            tap_code(KC_LEFT);
            tap_code(KC_LEFT);
            tap_code(KC_LEFT);              // 4 taps = () => {}←←←
            break;
    }
}

Timing optimizado por dedo:

uint16_t get_tapping_term(uint16_t keycode, keyrecord_t *record) {
    switch (keycode) {
        case TD_J_BRACES:
        case TD_K_PARENS:  return 180;  // Índice/medio más rápidos
        case TD_L_BRACKETS: return 220; // Meñique más lento
        case TD_SC_ANGLES:  return 200; // Anular estándar
        default: return TAPPING_TERM;
    }
}

🔧 Fase 5 - Optimizaciones Futuras

5.1 Análisis Post-Implementación

Métricas a evaluar (post tap dance):

  • Velocidad de typing en símbolos frecuentes
  • Tasa de error en tap dances vs teclas simples
  • Fatiga subjetiva después de sesiones largas
  • Patrones de uso real de cada tap dance

5.2 Expansiones Avanzadas

Si tap dance funciona bien:

  • Combos adicionales para símbolos menos frecuentes
  • Macros contextuales por aplicación
  • Auto-shift para pares de símbolos
  • Integration con snippets de código

📈 Métricas de Éxito

Objetivos Cuantificables

  • Consolidación: 16+ símbolos en 8 tap dances
  • Reducción de capas: Eliminar SYMBOL y SYMBOL2 (2 capas → 1)
  • Eficiencia: Patrones comunes en 2-4 taps (!=, ==, &&, ||, =>, //)
  • Ergonomía: Todo en mano derecha, sin stretching con pulgar ocupado
  • Velocidad: Símbolos frecuentes en 1 tap sin latencia adicional

Métricas de Seguimiento

  • WPM antes/después de cada fase
  • Análisis de heat maps de dedos
  • Medición de fatiga subjetiva
  • Time to proficiency para cada cambio

🚦 Estrategia de Implementación

Principios Guía

  1. Incremental: Una fase a la vez
  2. Evidence-based: Medir antes de avanzar
  3. Reversible: Backup configs para rollback
  4. Personal: Adaptar a tu workflow específico

Cronograma Recomendado

Semana 1-2:  Usar Fase 1, evaluar beneficios
Semana 3-4:  Implementar Fase 2 si Fase 1 exitosa  
Mes 2-3:     Fase 3 solo si necesario
Mes 4+:      Fases 4-5 para usuarios power

Criterios de Avance

  • Comfort level: 90% proficiency antes de siguiente fase
  • Benefit validation: Mejoras medibles en velocidad/comfort
  • Stability: Sin regressions en typing accuracy

📚 Referencias y Recursos

Estudios Base (2025)

  • Home row mods timing optimization research
  • Bigram frequency analysis for programming languages
  • Ergonomic keyboard layout effectiveness studies
  • QMK community best practices

Herramientas de Análisis

  • KeymapDB para comparación con otros layouts
  • Typing speed analyzers
  • Heat map generators
  • SFB (Same-Finger Bigram) analyzers

Comunidad y Soporte

  • QMK Discord para troubleshooting
  • r/ErgoMechKeyboards para feedback
  • Keyboard layout optimization forums

🔄 Versionado

  • v1.0: Análisis inicial y Fase 1 (Enero 2025)
  • v1.1: Corrección HM_L y combos optimizados
  • v2.0: (Planificado) Implementación Tap Dance para símbolos
  • v2.1: (Planificado) Transición gradual con backup SYMBOL
  • v3.0: (Planificado) Eliminación final de capas redundantes

Documento creado: Enero 2025
Última actualización: Post-Fase 1
Próxima revisión: Post-implementación Fase 2