FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour HIX 1.2
Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
HIX 1.2
Posted: Fri Jan 09, 2026 07:33 AM
Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: HIX 1.2
Posted: Sun Jan 11, 2026 10:21 AM

Buenos días Charly.
De antemano agradecer el interesante trabajo que estás realizando para poder contar con un servidor en el que utilizar prg, es un gran desarrollo.

He revisado los ejemplos de https://github.com/carles9000/hix/wiki/HIX y en el código que copio a continuación no encuentro como relacionar el botón "submit" con el código del prg que denominas "action_page.prg" y en qué directorio debería encontrarse ese prg:

<!DOCTYPE html>
<html>
<body>

  <h2>HTML Forms</h2>

  <form action="action_page.prg">
    <label for="fname">First name:</label><br>
    <input type="text" id="fname" name="fname" value="John"><br>
    <label for="lname">Last name:</label><br>
    <input type="text" id="lname" name="lname" value="Doe"><br><br>
    <input type="submit" value="Submit">
  </form> 

  <p>If you click the "Submit" button, the form-data will be sent to a page called "action_page.prg".</p>

</body>
</html>
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: HIX 1.2
Posted: Sun Jan 11, 2026 05:14 PM

Hi Mr. Verhoven,

Good question — and yes, this is exactly the point we are at in our small series.

The core issue is not HIX or Harbour, but a mental shift when coming from FiveWin:

On the web, there is no permanently running program and no ON CLICK that directly executes server-side code.

A submit button does only one thing:
it triggers an HTTP request.

We are currently covering exactly this mechanism (request → PRG executes once → response → end).
I am already working on part 3 of the series and will post it as soon as possible, because it addresses this topic (forms, parameter passing, and a FiveWin-style comparison) in detail.

https://forums.fivetechsupport.com/viewtopic.php?p=283358#p283358

Best regards,
Otto

Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 07:01 AM

Hola Verhoven,

Verhoven wrote:

De antemano agradecer el interesante trabajo que estás realizando para poder contar con un servidor en el que utilizar prg, es un gran desarrollo.

Gracias !

Verhoven wrote:

no encuentro como relacionar el botón "submit" con el código del prg que denominas "action_page.prg" y en qué directorio debería encontrarse ese prg:

Esto forma parte del funcionamiento del html. Ahora o teneis muy facil con las IA, porque son autenticos tutores y si le pides que te explique didacticamente estos trozos de codigo seguro que lo entenderas. Basicamente un "submit" te dispará la accion del form. Pon el action_page.prg en las misma carpeta en este caso...

C.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 563
Joined: Sun Oct 09, 2005 07:23 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 07:36 AM

Gracias a ambos por vuestras respuestas.
Veo que la clave estaba en esta línea:

<form action="action_page.prg">

Ahí aparece la relación entre el botón submit y el prg

La cuestión ahora sería de qué manera mantengo el código prg protegido, para que no quede expuesto para los usuarios y para que tampoco pueda ser copiado por otros.

Por otro lado, y esto es algo relativo a W10 y W11 que por más vueltas que le he dado no he conseguido resolver, es la cuestión de las actualizaciones automáticas de ambos sistemas operativos. Este problema, debido a que me llegó a dejar algún sistema en producción parado (obligando a tener que actuar in-situ para resolverlo), me ha supuesto descartar el montar un servidor en ellos y pasar a hacerlo en Linux, que no te obliga a pasar por esta imposición y nos libera de ese problema.

Si tenéis alguna solución a este problema de las actualizaciones automáticas del sistema operativo os agradecería nos dejarais vuestros comentarios.

Saludos.

Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 08:03 AM

Hell Mr. Verhoven, Just for context: we’ve recently published a post that explains exactly this mechanism step by step.
It might help when reading further.
Best regards,
Otto

https://forums.fivetechsupport.com/viewtopic.php?p=283368#p283368

Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 08:26 AM

BTW, Mr. Verhoven, I’m not entirely convinced that this was a Windows 11 problem as such. From my experience, this usually points to an incomplete or non-robust installation.

A Windows update itself does not change cloudflared configuration and does not break a Harbour program. What it can do is trigger a reboot.

If something then requires on-site intervention, it typically means that one or more components did not automatically restart after the reboot.

Things that are important to check in such a setup:

cloudflared must run as a service (not started manually or via user session)

the Harbour program must also start independently of a logged-in user

no dependency on RDP sessions or interactive startup

proper auto-restart behavior after reboot

If these points are handled correctly, a Windows update usually results only in a short interruption, not a broken system or the need for on-site fixes.

So in most cases, the issue is not Windows 11 itself, but the way the services were installed and started.

Best regards, Otto

Posts: 1283
Joined: Fri Feb 10, 2006 02:34 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 08:42 AM

Verhoven,

Verhoven wrote:

La cuestión ahora sería de qué manera mantengo el código prg protegido, para que no quede expuesto para los usuarios y para que tampoco pueda ser copiado por otros.

Si sigues el manual como veo y llegas al punto de las rutas https://github.com/carles9000/hix/wiki/HIX#routes , lo ejecutas correctamente y entiendes el proceso... avanzaremos y te explicaré como solventarlo si tanto te preocupa...

C.

Salutacions, saludos, regards

"...programar es fácil, hacer programas es difícil..."

UT Page -> https://carles9000.github.io/
Forum UT -> https://discord.gg/bq8a9yGMWh
HIX -> https://github.com/carles9000/hix
Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 08:58 AM

Mr. Verhoven,

I’d also like to add a short note about Linux, because it’s often mentioned very casually.

For many people here who are Windows-focused, Linux is not an easy drop-in replacement.
It’s not just a different OS – the entire working environment changes: tools, workflows, administration, troubleshooting.

You don’t simply “switch to Linux” and continue as before.
Even basic things require some learning, and that takes time.
I see this myself on my AI server running Ollama on Linux – just getting comfortable with the basics already takes effort.

That’s not a criticism of Linux, it’s just reality.

And this is exactly where HIX has a strong advantage:
you can stay in a familiar Windows environment and still work with a clean server model.

On top of that, HIX allows parallel work, even on the same server, without getting in each other’s way – which is a big plus for many existing workflows.

So yes, Linux is a good option if you really know it.
But for many, Windows remains the more practical everyday choice – and HIX fits very well into that reality.

Best regards,
Otto

Posts: 1445
Joined: Mon Oct 10, 2005 02:38 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 09:45 AM

Hola a todos,

Carles, Hix es capaz de saber desde que tipo que plataforma está recibiendo las peticiones?

Es decir, sabe si la petición viene de un ordenador, tablet o smartphone? Si es así, se sabe si el uso de Cloudflare puede imposibilitar obtener esta información?

Recuerdo que FWeb si lo podía saber.

O la solución sería que la página html desde el navegador envíe al prg de la petición a Hix esta información?

Gracias

Un Saludo

Carlos G.



FiveWin 25.12 + Harbour 3.2.0dev (r2502110321), BCC 7.7 Windows 11 Home

Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 10:16 AM

https://forums.fivetechsupport.com/viewtopic.php?p=283370#p283370

Yo aquí simplemente volvería a publicar el mismo screenshot que ya usamos en la serie y haría una breve referencia a él.
Ahí se ve muy bien qué es lo que realmente llega al servidor.

Una breve aclaración técnica:

No se puede identificar el dispositivo de forma inequívoca, solo estimarlo.

El servidor ve en los encabezados HTTP principalmente el User-Agent.
En ese texto aparecen informaciones sobre:

el navegador

el sistema operativo

a menudo también indicios de si es móvil o desktop

A partir de ese texto se puede inferir de forma heurística desde qué tipo de dispositivo probablemente viene la petición.
Pero no existe una identificación fiable y exacta del tipo “esto es un smartphone”.

Cloudflare no cambia esto:
el User-Agent sigue llegando al servidor.
Todo lo demás es interpretación, no una garantía.

Precisamente por eso mostramos este screenshot en la serie:
deja muy claro dónde está el límite del modelo web.

A continuación algunos User-Agent típicos que suelen llegar al servidor.
Todos son solo texto, no una identificación garantizada.

Desktop – Windows (Chrome / Edge)
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/128.0.0.0 Safari/537.36

Qué indica normalmente:

sistema operativo: Windows

arquitectura: 64-bit

navegador: Chrome (o Edge, muy similar)

Desktop – macOS (Safari)
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
AppleWebKit/605.1.15 (KHTML, like Gecko)
Version/17.0 Safari/605.1.15

Qué indica:

macOS

navegador Safari

entorno desktop

Linux – Desktop (Chrome / Firefox)
Mozilla/5.0 (X11; Linux x86_64)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/128.0.0.0 Safari/537.36

o

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:128.0)
Gecko/20100101 Firefox/128.0

Qué indica:

Linux

entorno de escritorio

navegador concreto

Android – Smartphone
Mozilla/5.0 (Linux; Android 14; Pixel 7)
AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/128.0.0.0 Mobile Safari/537.36

Indicadores típicos:

Android

Mobile

nombre del dispositivo

iPhone (iOS – Safari)
Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X)
AppleWebKit/605.1.15 (KHTML, like Gecko)
Version/17.0 Mobile/15E148 Safari/604.1

Indicadores claros:

iPhone

Mobile

iOS

iPad / Tablet
Mozilla/5.0 (iPad; CPU OS 17_0 like Mac OS X)
AppleWebKit/605.1.15 (KHTML, like Gecko)
Version/17.0 Safari/604.1

Indicadores:

iPad

no siempre aparece Mobile

por eso tablets son más difíciles de clasificar

Bots / Tools (ejemplo)
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)

o

curl/8.5.0

Indicadores:

no es un navegador humano

herramientas, bots, scripts

Posts: 6983
Joined: Fri Oct 07, 2005 07:07 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 10:26 AM

Heuristic device detection (Harbour)

FUNCTION DetectDeviceType( cUserAgent )

   LOCAL cUA
   LOCAL cDevice := "desktop"

   IF Empty( cUserAgent )
      RETURN cDevice
   ENDIF

   cUA := Lower( cUserAgent )

   // Mobile phones
   IF "mobile" $ cUA .OR. ;
      "android" $ cUA .OR. ;
      "iphone"  $ cUA
      cDevice := "mobile"
   ENDIF

   // Tablets (check after mobile)
   IF "ipad"   $ cUA .OR. ;
      "tablet" $ cUA
      cDevice := "tablet"
   ENDIF

RETURN cDevice

Important:

this is not a reliable detection
it is only a heuristic estimation
the server sees only text (the User-Agent)
everything else is interpretation

Posts: 141
Joined: Fri Feb 15, 2019 01:37 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 03:55 PM

Hola a todos

Estoy probando los ejemplos que monto charly.
Estuve probando el primero donde hace la conexión, y si no muestra un mensaje de error, le agregue unos estilo.

<?prg 
	LOCAL o	
    local cHtml := '',mensaje:=''
	

?? ULoadHtml( 'examples/sql/header.html', 'Test Connect' )
   
	
o := WDO_MYSQL():New( 'localhost', 'fivetech_test', 'fivewin2026', 'dbharbour', 3306 )			
	
if o:lConnect		

	? 'Connected !'	

	
else 

	?  '<br>'
	?? '<div style="background-color:rgb(235, 227, 227);border:1px solid gray;padding: 10px; box-shadow: 5px 5px 5px gray;">'
	?? '<h3><b>My ErrorSys</b></h3>'
	?? '<h4>' + o:cError + '</h4>'
	?? '</div>'

end 	

o:Close()



?  '<div>'
??	'<br>'
?? '<small style="float:right;">Hix is Harbourix </small>'
??	'<br>'
?? '<small style="float:right;">Harbour Web Server</small>'
??	'<br>'
?? '<small style="float:right;">Copyright 2025 Charly Aubia</small>'
?? '</div>'


//RETU cHtml 
RETU nil
?>

Así me los muestra en pantalla:
https://ibb.co/ymVBwDpW

Fui a la IA, "claude", le dije mejóramelo, con estilo, y este fue el resultado.:

https://ibb.co/HDcR4gyg

Posts: 141
Joined: Fri Feb 15, 2019 01:37 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 04:00 PM

Este es el código generado por IA "Claude", simplemente copie el código lo pegue y le dije mejóramelo asi lo creo:

<?prg 
    LOCAL o, cHtml := '', cMensaje := '', cEstilo := ''
    LOCAL cTitulo := 'Test MySQL Connection'
    LOCAL nAnio := Year(Date())
    

// Cargar header HTML
?? ULoadHtml('examples/sql/header.html', cTitulo)

// Estilos CSS mejorados
cEstilo := '<style>'
cEstilo += '.contenedor { max-width: 800px; margin: 50px auto; padding: 20px; }'
cEstilo += '.mensaje-error { background-color: #f8d7da; color: #721c24; border: 1px solid #f5c6cb; '
cEstilo += 'padding: 20px; border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); margin: 20px 0; }'
cEstilo += '.mensaje-exito { background-color: #d4edda; color: #155724; border: 1px solid #c3e6cb; '
cEstilo += 'padding: 20px; border-radius: 8px; box-shadow: 0 4px 6px rgba(0,0,0,0.1); margin: 20px 0; }'
cEstilo += '.titulo-mensaje { font-size: 20px; font-weight: bold; margin-bottom: 10px; }'
cEstilo += '.detalle-mensaje { font-size: 16px; line-height: 1.6; }'
cEstilo += '.footer { margin-top: 50px; padding: 20px; border-top: 1px solid #ddd; '
cEstilo += 'text-align: right; color: #666; font-size: 12px; }'
cEstilo += '.info-conexion { background-color: #e7f3ff; border-left: 4px solid #2196F3; '
cEstilo += 'padding: 15px; margin: 20px 0; border-radius: 4px; }'
cEstilo += '</style>'

?? cEstilo

?? '<div class="contenedor">'

// Mostrar información de intento de conexión
?? '<div class="info-conexion">'
?? '<strong>Intentando conectar a MySQL...</strong><br>'
?? 'Servidor: localhost<br>'
?? 'Base de datos: dbharbour<br>'
?? 'Usuario: fivetech_test<br>'
?? 'Puerto: 3306'
?? '</div>'

// Intentar conectar a MySQL
o := WDO_MYSQL():New('localhost', 'fivetech_test', 'fivewin2026', 'dbharbour', 3306)

IF o:lConnect
    // Conexión exitosa
    ?? '<div class="mensaje-exito">'
    ?? '<div class="titulo-mensaje">✓ Conexión Exitosa</div>'
    ?? '<div class="detalle-mensaje">'
    ?? 'Se ha establecido correctamente la conexión con la base de datos MySQL.<br>'
    ?? 'Estado: <strong>Conectado</strong><br>'
    ?? 'Base de datos: <strong>dbharbour</strong>'
    ?? '</div>'
    ?? '</div>'
    
    // Aquí puedes agregar consultas SQL si lo necesitas
    // Ejemplo:
    // cQuery := "SELECT VERSION() as version"
    // oResult := o:Execute(cQuery)
    // ?? 'Versión MySQL: ' + oResult:version
    
ELSE
    // Error de conexión
    ?? '<div class="mensaje-error">'
    ?? '<div class="titulo-mensaje">✗ Error de Conexión</div>'
    ?? '<div class="detalle-mensaje">'
    ?? '<strong>No se pudo establecer la conexión con MySQL</strong><br><br>'
    ?? 'Detalles del error:<br>'
    ?? '<code>' + o:cError + '</code><br><br>'
    ?? 'Posibles soluciones:<br>'
    ?? '<ul style="margin-top: 10px;">'
    ?? '<li>Verifica que el servidor MySQL esté ejecutándose</li>'
    ?? '<li>Confirma que las credenciales sean correctas</li>'
    ?? '<li>Revisa que la base de datos "dbharbour" exista</li>'
    ?? '<li>Asegúrate de que el puerto 3306 esté disponible</li>'
    ?? '<li>Verifica los permisos del usuario en MySQL</li>'
    ?? '</ul>'
    ?? '</div>'
    ?? '</div>'
ENDIF

// Cerrar conexión
IF o != NIL
    o:Close()
ENDIF

?? '</div>' // Cierra contenedor

// Footer mejorado
?? '<div class="footer">'
?? '<strong>Hix is Harbourix</strong><br>'
?? 'Harbour Web Server<br>'
?? 'Copyright ' + AllTrim(Str(nAnio)) + ' Charly Aubia'
?? '</div>'

RETURN NIL
?>

El resultado:

https://ibb.co/HDcR4gyg

Posts: 141
Joined: Fri Feb 15, 2019 01:37 PM
Re: HIX 1.2
Posted: Mon Jan 12, 2026 04:21 PM

Y cuando no hay conexión, ósea un error así lo muestra:

https://ibb.co/b5HdtLpM

Esta es la configuración del Server:

https://ibb.co/dJMfwsTf

Esta es la configuración del Routes:

https://ibb.co/xKDMhxxf