Funcionamiento del Sistema de Límites y sus Limitaciones
El sistema de límites diarios en Anki controla la cantidad máxima de tarjetas nuevas y de repaso mediante dos componentes principales:
- Módulo de planificación: Gestiona la lógica de presentación de tarjetas (v3.py)
- Sistema de configuración de mazos: Administra parámetros de límites (decks.py)
Deficiencias Clave Identificadas
Aálisis del código revela dos fallos críticos:
- Conteo recursivo erróneo: Duplicación de tarjetas al existir en múltiples mazos
- Manejo incorrecto de zonas horarias: Asignación incorecta de repasos cerca de la medienoche
# Ejemplo de código defectuoso
def calcular_tarjetas(self, ids_mazo, incluir_submazos):
if isinstance(ids_mazo, int):
ids_mazo = {ids_mazo}
else:
ids_mazo = set(ids_mazo)
if incluir_submazos:
ids_mazo.update([hijo[1] for id_actual in ids_mazo for hijo in self.hijos(id_actual)])
cadena_ids = convertir_a_cadena(ids_mazo)
total = self.bd.consultar(
f"SELECT COUNT() FROM tarjetas WHERE did IN {cadena_ids} OR odid IN {cadena_ids}"
)
return total
Estrategias de Corrección
Ajustes de Configuración
- Desactivar conteo recursivo en submazos
- Sincronizar zona horaria con el sistema
- Usar mazos filtrados con condiciones como:
esta:pendiente propiedad:vencida<=1 propiedad:intervalo<10
Modificaciones de Código
Corrección de Conteo Recursivo
def calcular_tarjetas(self, ids_mazo, incluir_submazos):
ids_mazo = {ids_mazo} if isinstance(ids_mazo, int) else set(ids_mazo)
todos_ids = set(ids_mazo)
if incluir_submazos:
cola = list(ids_mazo)
while cola:
id_actual = cola.pop(0)
for _, id_hijo in self.hijos(id_actual):
if id_hijo not in todos_ids:
todos_ids.add(id_hijo)
cola.append(id_hijo)
cadena_ids = convertir_a_cadena(todos_ids)
total = self.bd.consultar(
f"SELECT COUNT(DISTINCT id) FROM tarjetas WHERE did IN {cadena_ids} OR odid IN {cadena_ids}"
)
return total
Corrección de Zona Horaria
from anki.utils import obtener_fecha_local
def obtener_tarjetas_pendientes(self, limite=1, solo_aprendizaje_intradia=False):
fecha_actual = obtener_fecha_local()
return self.motor.obtener_tarjetas_pendientes(
limite=limite,
solo_aprendizaje_intradia=solo_aprendizaje_intradia,
fecha_referencia=fecha_actual
)
Validación de Soluciones
Procedimiento de Prueba
- Crear estructura de mazos con submazos anidados
- Establecer límites variables por mazo
- Verificar comportamiento en transiciones de día
- Comprobar consistencia en múltiples dispositivos
Optimizaciones Avanzadas
{
"limitesDinamicos": true,
"limiteBaseNuevas": 20,
"limiteBaseRepasos": 100,
"sensibilidadRendimiento": 1.2,
"ajusteMaximoPorcentaje": 50
}