Dear Antonio,
thank you.
Best regards,
Otto
Dear Antonio,
thank you.
Best regards,
Otto


Buenos dias,
Para los que pagamos el webinar con la ultima versión de FW 32 y 64, estas ya fueron enviadas o se descargan de algun lugar?
Gracias
FWH 25.12
Harbour/Hbmk2
Microsoft Visual C++
MySql 8.0
Antigravity
Buenas tardes,
Como todo el domingo se lo ha pasado lloviendo he tenido tiempo de ponerme a probar con GROK.
Necesitaba construir unas estructuras en C para la lectura de unos chips de Texas Instruments a los que se conectan unos sensores industriales de los del tipo de corriente entre 4mA a 20mA. Aunque no me voy a enrollar con la parte de electrónica.
El caso es, que tenía la idea clara de lo que quería y traté de hacerlo todo a mano aunque como quiera que lo de los punteros y no digamos ya lo de los punteros de los punteros y estructuras anidadas es bastante complicado, después de varias horas, me desesperé y probé, siguiendo las recomendaciones del Master Antonio con GROK.
NO DOY CRÉDITO. ME HA PARECIDO LITERALMENTE CIENCIA FICCIÓN.
Se ha enterado de lo que le preguntaba a la primera, lo ha ido perfeccionando según se lo iba solicitando, y aunque es verdad que algunas veces se quedaba colgado y había que volver a empezar, le metía el código que había ido elaborando, parte mía y parte de Grok y una vez lo analizaba sabía exactamente para lo que lo quería, y podíamos continuar.
No tengo palabras para describir la experiencia, es algo inefable.
Lo que si es cierto, es que uno tiene que saber por donde se está moviendo y las cosas, al menos, te tienen que sonar. No se puede dejar todo en manos de Grok y darlo por terminado, pero la ayuda ha sido muy muy grande y muy técnica. El código te lo devuelve con explicaciones y ejemplos, en fin...tremendo.
Si esto es ahora, que acaba de empezar, no se a lo que va a llegar, para lo bueno y para lo malo. Un poco de miedito también da. Aunque entran auténticas ganas de pillarse uno de esos equipos de nvidia que recomendó Antonio y ponerse a entrenarlo.
Los padres de la Física Nuclear, que sirvió luego de base a otros para la fabricación bomba atómica, llegaron a la conclusión de que lo único que garantizaba la seguridad de que nadie empezaría a usarla era que todos la tuvieran. Me pregunto si estarían también estarían de acuerdo en que el descubrimiento matemático que subyace a esta tecnología del conocimiento deberá también estar en manos de todos, con no pocos riesgos, o habrá unas diferencias entre unos y otros que pueden también ser preocupantes. Tal vez por ello, los padres de la IA digan que hay que parar un poco, aunque todos sabemos que no va a parar nadie (hay muchos dólares y control del poder en juego). Mientras las máquinas no se conecten a un relé y además tengan la decisión de activarlo...
En cualquier caso, una experiencia que ha sido extraordinaria, gracias a la información que Antonio nos ha proporcionado.
Muchas Gracias Antonio.
"github.copilot.chat.experimental.projectContext": {
"enabled": true,
"files": [
".vscode/instructions.md",
".vscode/copilot-context.md"
],
"directories": [
"C:/fw/source/classes",
"C:/fw/source/function",
"C:/fw/source/winapi"
]
},Victor
De donde surgen los archivos de documentacion ".vscode/instructions.md" y ".vscode/copilot-context.md" ?
No sería mejor agregar la ruta de \samples también ?
Me gustaria ver que tal funciona con esta implementacion.
Muchos saludos
# Instrucciones para IA - Proyecto
## Descripción del Proyecto
Sistema desarrollado en **Harbour/xHarbour** con interfaz gráfica **FiveWin** y librerías adicionales por ActiveX **Chilkat** y **Codejock**
## Arquitectura Técnica
### Lenguajes y Frameworks
- **Lenguaje Principal**: Harbour/xHarbour (dialecto de Clipper)
- **GUI Framework**: FiveWin (framework para Windows)
- **Librerías importantes**: Chilkat y Codejock
- **Base de Datos**: DBF/CDX (dBase compatible)
- **ORM** : ORM Propio
- **Compilador**: Harbour + Borland/Embarcadero C++
-
### Codificación
- **Codepage**: ESWIN (Windows-1252 español)
- **Caracteres especiales**: Usar funciones de conversión UTF-8 apropiadas
- **Base de datos**: DBF con índices CDX
### Estructura de Directorios
```
proyecto/
│── PRG/ # Código fuente principal (.prg)
├── siclases/ # Clases específicas del sistema
├── clases32/ # Librerías y componentes externos
├── lib32/ # Librerías compiladas
├── inc/ # Archivos de inclusión
├── sifuncs/ # Funciones del sistema
├── VFuncs/ # Funciones adicionales
└── iconos/ # Recursos gráficos
```
## Convenciones de Código
### Sintaxis Harbour
```harbour
// Definición de función
Function Main(cParametros)
// código
Return (nil)
// Definición de clase
CLASS TExample
EXPORTED:
DATA cProperty AS Character INIT ""
METHOD New() CONSTRUCTOR
METHOD SomeMethod()
PROTECTED:
DATA lPrivate AS Logical INIT .F.
END CLASS
// Uso de objetos
WITH OBJECT oApp := TGestion():New()
:Method1()
:Method2()
END WITH
```
### Convenciones de Nombres
- **Variables**: camelCase con prefijo tipo (`cString`, `nNumber`, `lLogical`, `oObject`, `aArray`)
- **Funciones**: PascalCase (`Main`, `IniciaGestion`)
- **Métodos**: PascalCase (`:New()`, `:BuildMainWindow()`)
- **Clases**: PascalCase con prefijo T (`TApplication`)
- **Modelos**: PascalCase con prefijo M ( `MSeries`)
### Gestión de Errores
- Uso de objetos con propiedades `:Success` y `:Fail()`
- Logs detallados en archivos `.log`
- Mensajes al usuario con `MsgAlert()`, `MsgInfo()`
### Base de Datos
- Modelos de datos con prefijo `m` (ej: `mCliente`, `mFactura`)
- Uso de índices CDX para búsquedas
- ORM propio integrado en `TORMModel.prg`. Documentación del ORM en .\Servicios\Database\ORM2.0\README.md
## 🎯 Estándares de Desarrollo y Mejores Prácticas
### Clean Code Principles
- **Nombres descriptivos**: Variables y funciones deben explicarse por sí mismas
- **Funciones pequeñas**: Máximo 50 líneas por función/método
- **Responsabilidad única**: Cada clase/función debe tener un solo propósito
- **Comentarios útiles**: Solo cuando el código no sea auto-explicativo
- **Evitar código duplicado**: Refactorizar en funciones comunes
### Gestión de Errores Robusta
```harbour
// ✅ SIEMPRE validar parámetros de entrada
METHOD ProcessDocument(oDocument) CLASS TExample
If oDocument == Nil .Or. oDocument:Fail()
Self:__oReturn:Success := .F.
Self:__oReturn:Log := 'Documento inválido o no encontrado'
Return ( Self )
Endif
// Lógica del método...
Return ( Self )
```
### Refactoring Guidelines
- **Extraer métodos**: Cuando hay bloques de código repetidos
- **Simplificar condiciones**: Usar variables booleanas descriptivas
- **Eliminar parámetros innecesarios**: Máximo 3-4 parámetros por función
- **Usar objetos de configuración**: Para múltiples parámetros relacionados
### Testing y Validación
- **Validar datos de entrada**: Siempre verificar tipos y rangos
- **Testing de casos extremos**: Valores null, vacíos, muy grandes
- **Logs detallados**: Para debugging en producción
- **Rollback de transacciones**: En operaciones críticas de BD
### Performance Best Practices
```harbour
// ✅ Usar índices CDX eficientemente
oModel:Find(nID, 'ID') // Busca por índice principal
// ✅ Cerrar recursos explícitamente
WITH OBJECT oFile := TFileReader():New(cFileName)
:Process()
:Close() // Liberar recursos
END WITH
// ✅ Minimizar consultas a BD en bucles
aClientes := mCliente():New():GetCollection() // Una sola consulta
FOR EACH oCliente IN aClientes
// Procesar en memoria
NEXT
```
### Security & Data Integrity
- **Sanitización de inputs**: Especialmente para XML/SQL
- **Validación de permisos**: Verificar acceso antes de operaciones
- **Encriptación**: Para datos sensibles (usar Chilkat)
- **Backup automático**: Antes de operaciones de riesgo
### Code Review Checklist
1. **¿El código es auto-explicativo?**
2. **¿Se manejan todos los casos de error?**
3. **¿Hay código duplicado que pueda refactorizarse?**
4. **¿Las variables tienen nombres descriptivos?**
5. **¿Se liberan correctamente los recursos?**
6. **¿Se respetan las convenciones del proyecto?**
7. **¿Funciona correctamente en casos extremos?**
### Harbour/xHarbour Specific Rules
- **Usar WITH OBJECT**: Para múltiples llamadas al mismo objeto
- **Inicializar variables**: Siempre declarar tipo y valor inicial
- **Gestionar memoria**: Cerrar archivos, liberar objetos grandes
- **Codepage consistente**: ESWIN en todo el proyecto
## Consideraciones Especiales
### Codificación de Caracteres
- Problemas comunes con caracteres especiales (ñ, tildes)
- Usar `hb_StrToUTF8()` para conversiones
- Sanear caracteres de control antes de XML
### Compatibilidad
- Sistema legacy con alta compatibilidad requerida
- Soporte Windows 7/8/10/11
- Integración con hardware específico (impresoras, cajones)
## Tareas Comunes para IA
1. **Debugging de codificación**: Solucionar caracteres extraños en XML/textos
2. **Optimización de consultas**: Mejorar rendimiento de base de datos
## 🤖 Directrices para Asistencia de IA
### Enfoque Obligatorio
- **SIEMPRE** aplicar principios de Clean Code
- **SIEMPRE** sugerir refactoring cuando detectes código duplicado
- **SIEMPRE** validar robustamente errores y casos extremos
- **SIEMPRE** considerar el rendimiento y la memoria
### Al Analizar Código
1. **Identificar problemas**: Código duplicado, funciones largas, nombres poco claros
2. **Sugerir mejoras**: Refactoring, optimizaciones, mejor estructura
3. **Validar errores**: ¿Se manejan todos los casos de fallo?
4. **Verificar convenciones**: ¿Sigue el estilo del proyecto?
5. **Considerar mantenibilidad**: ¿Será fácil de mantener en el futuro?
### Al Crear Código Nuevo
```harbour
// ✅ ESTRUCTURA OBLIGATORIA para nuevos métodos/funciones
METHOD ExampleMethod(cParam1, nParam2) CLASS TExample
// 1. Validación de parámetros SIEMPRE
If cParam1:Empty() .Or. nParam2 <= 0
Self:__oReturn:Success := .F.
Self:__oReturn:Log := 'Parámetros inválidos en ExampleMethod'
Return ( Self )
Endif
// 2. Variables locales con tipo explícito
Local oResult as Object := Nil
Local lSuccess as Logical := .T.
// 3. Lógica principal con manejo de errores
TRY
// Lógica aquí...
CATCH oError
Self:__oReturn:Success := .F.
Self:__oReturn:Log := 'Error en ExampleMethod: ' + oError:Description
lSuccess := .F.
END
// 4. Logging para debugging
If lSuccess
Self:__oReturn:Log := 'ExampleMethod ejecutado correctamente'
Endif
Return ( Self )
```
### Prioridades de Sugerencias
1. **🔴 CRÍTICO**: Seguridad, pérdida de datos, errores fatales
2. **🟡 ALTO**: Performance, memoria, casos no manejados
3. **🟢 MEDIO**: Clean code, refactoring, mantenibilidad
4. **🔵 BAJO**: Estilo, comentarios, optimizaciones menores
### Respuestas Esperadas
- **Explicar el "por qué"**: No solo qué cambiar, sino por qué es mejor
- **Mostrar antes/después**: Código original vs mejorado
- **Considerar impacto**: ¿Afecta a otras partes del sistema?
- **Sugerir testing**: Cómo verificar que funciona correctamente
## Comandos de Desarrollo
### Compilación
```bash
# Compilar
h.bat
# Compilar con debug
h.bat debug
```# Configuración de Contexto del Proyecto
Este archivo asegura que GitHub Copilot siempre tenga acceso al contexto del proyecto Completo.
## Archivos de Referencia Obligatorios
- `.vscode/instructions.md` - Guía completa del proyecto
## Configuración Aplicada
La configuración en `settings.json` incluye:
- Soporte para archivos `.prg` (Harbour)
- Contexto del proyecto habilitado
- Locale en español
- Referencias automáticas a las instrucciones del proyecto
## Uso
Cuando uses GitHub Copilot Chat en este workspace, automáticamente tendrá acceso a:
- Las instrucciones específicas del proyecto
- Convenciones de código Harbour
- Arquitectura del ERP
- Patrones de desarrollo del proyecto