Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



Mostrando entradas con la etiqueta gambas. Mostrar todas las entradas
Mostrando entradas con la etiqueta gambas. Mostrar todas las entradas

lunes, 31 de diciembre de 2018

Notición: Nueva Version de Gambas3.12.0


Notición:

Nueva Version de Gambas3.12.0



Ya esta disponible la nueva version de gambas3, y ya vamos por la version 3.12.0

La mejoras las podeis ver en: http://gambas.sourceforge.net/en/main.html



¿que hay de nuevo?
La característica principal de esta versión es el nuevo compilador Just-In-Time, que reemplaza al anterior basado en una versión obsoleta de LLVM. Este nuevo compilador JIT traduce el código de bytes de Gambas en código C en tiempo de ejecución, y utiliza el compilador gcc o clang para traducir el código C en bibliotecas compartidas.
 Las otras características importantes son las siguientes:

  1.  Las variables locales ahora se pueden declarar en cualquier parte del cuerpo de la función.
  2.  La sintaxis de FOR y FOR EACH ahora puede declarar sus variables de bucle. Ahora se puede acceder a la cadena con la sintaxis de matriz.
  3.  La búsqueda de cadenas es mucho más rápida para los casos comunes.
  4.  Los controles ScrollView, PictureBox y SpinBox ahora están implementados en Gambas. 
  5.  El desplazamiento de los controles desplazables ahora se anima suavemente.
  6.  Las animaciones de control y las sombras ahora se pueden deshabilitar globalmente.
  7.  FreeBSD y otras variantes de BSD ahora no deberían tener problemas para compilar Gambas.
  8.  La arquitectura PowerPC64 y ARM64 ahora son compatibles.

Enjoy it !   ¡ Disfrútala !

sábado, 1 de abril de 2017

gbCluedo: Investiga cual fue el asesino....




gbCluedo: Investiga cual fue el asesino....


gbCluedo, es una variante del juego Cluedo, para un solo jugador, donde deberás investigar haciendo sugerencias para descubrir cual fue el asesino del Dr.Lemon, haciendo preguntas sobre personaje, lugar y arma..





Descarga del instalador y el código fuente:   Alojado en google drive 


miércoles, 4 de enero de 2017

[Nueva Versión]: Lanzado gambas3.9.2

[Nueva Versión]: Lanzado gambas3.9.2


El pasado 1 de enero, Benoit nos ha traido una nueva versión de gambas3, con corrección de errores de la anterior version gambas3.9.1. Hoy mismo se ha actualiado el  PPA.

Para añadir el ppa e instalar gambas3:

$sudo add-apt-repository ppa:gambas-team/gambas3
$sudo apt-get update
$sudo apt-get install gambas3


¿Qué hay de nuevo?
Esta versión corrige la mayoría de los errores graves encontrados desde el lanzamiento de Gambas 3.9.1.

ChangeLogCONFIGURACIÓN
Detectar correctamente la actualización de la base de datos svn para generar el archivo de la versión del tronco.

ENTORNO DE DESARROLLO
  • Opcionalmente, cargue el componente gb.inotify.
  • Cliente de la granja: Ayuda para la publicación de la biblioteca y la instalación de la biblioteca.
  • Traducción: Las ubicaciones de las cadenas traducidas deben ser más legibles ahora.
  • Cuadro de diálogo de bienvenida: El botón de software está deshabilitado si no se instala ningún software.
  • Boletín de bienvenida: el software y las listas de ejemplos se actualizan automáticamente una vez que se ha utilizado el cliente de software de la comunidad.
  • Diálogo de bienvenida: El software se puede desinstalar haciendo clic en el pequeño icono en la parte superior derecha de la caja del software.
  • Empaquetador: El nombre del paquete de la biblioteca ahora está siempre prefijado con el nombre o prefijo del proveedor, de modo que este nombre es predecible.
  • Empaquetador: Por lo tanto, hacer un paquete de un proyecto utilizando otra biblioteca no se bloquea más si esa biblioteca nunca se empaquetó.
  • Empaquetador: Al crear el paquete, muestre los mensajes en un cuadro debajo del registro de salida. No utilice más cuadros de mensaje.
  • Cliente de la granja de servidores: Al desinstalar una biblioteca, elimina automáticamente el directorio del proveedor si se anula.
  • Cliente de la granja de servidores: Al desinstalar un software instalado desde la granja de servidores, elimine automáticamente el directorio del proveedor si se anula.
  • Permitir que los archivos ubicados en un directorio vinculado se modifiquen sólo si se abren en modo falso, es decir, solo.
  • Editor de conexión: El botón "Solicitud de SQL" ahora es una entrada en la lista de tablas.
  • Editor de conexión: La descripción de la base de datos es ahora la información de herramientas del botón de configuración de la base de datos.
  • Editor: Corregir fallo en el escaneado de código después de una eliminación.
  • Empaquetador: el cuadro de texto de descripción ahora se expande verticalmente.
  • Empaquetador: La descripción del paquete Debian ahora se genera correctamente en todos los casos.
  • Editor: Solución de un bloqueo de intérprete al analizar una expresión que incluye la última palabra clave.
  • Retire la bonita indentación de código en la función Comienzo / Fin. Necesito encontrar una manera de cerrar las sangrías en las funciones sin terminar.
  • Diálogo de biblioteca: No se bloquea si una biblioteca global y una biblioteca local tienen el mismo proveedor.
  • Cierre explícitamente el formulario FOutput para que pueda guardar sus configuraciones antes de que su padre se destruya.

INTERPRETE
  • El archivo de traducción del proyecto se carga siempre correctamente. Ese era un viejo error.
  • El retardo del temporizador ahora se almacena en 31 bits, por lo que ahora puede ser de hasta 2 ^ 31 - 1 milisegundos, es decir, aproximadamente 24 días, 20 horas y 31 segundos.
  • Exec con un nombre de programa nulo ya no se bloquea.
  • El depurador no se bloquea más al mostrar un objeto estático de tipo recopilación.
  • Cerrar observó la entrada y salidas del proceso tan pronto como se muera. De lo contrario, ejecutar dos procesos que utilizan terminales virtuales sucesivamente puede fallar.
  • Eliminar mensajes de depuración.

GB.ARGS
Tome UTF-8 en cuenta al formatear texto de ayuda.
Corregir texto de ayuda para las opciones que no tienen nombre corto.

GB.DB
Connection.ApplyTemplate () ahora maneja correctamente una intercalación cuyo nombre es "predeterminado" en el archivo de plantilla.

GB.DB.SQLITE2
Las cadenas de SQL, incluidos los caracteres de barra invertida, están ahora correctamente citados.

GB.DB.SQLITE3
Las cadenas de SQL, incluidos los caracteres de barra invertida, están ahora correctamente citados.
GB.DBUS
DBusObject.Raise () ahora utiliza la interfaz de objeto predeterminada si no se especifica ninguna interfaz en el nombre del evento.
Corregir la pérdida de cadena en la rutina de ordenación de firmas.

GB.DESKTOP
  • Desktop.RunAsRoot () ahora usa gksu si gksudo no se encuentra.
  • Desktop.RunAsRoot () debería funcionar correctamente en SuSE ahora. Utiliza kdsu si no se encuentra kdsudo.
  • Utilice la cartera KDE5 cuando el escritorio sea KDE5. Utilice una cartera KDE4 antigua posible sólo si no se encuentra ninguna contraseña en la cartera KDE5.
  • Compatibilidad con equipos de escritorio cygwin.
  • Configurar Desktop.Passwords [] ahora funciona correctamente si se utiliza la herramienta secreta.

GB.EVAL.HIGHLIGHT
Agregue algunas propiedades y símbolos CSS.

GB.FORM
DirChooser, FileChooser: Agregue un menú de "borrar directorio" que sólo puede eliminar directorios vacíos.
DirView: Los eventos de visualización de archivos no molestan el cambio de nombre.
MenuButton: La rutina emergente automática del menú no debería bloquearse más.

GB.FORM.EDITOR
TextEditor: Editor funciona correctamente de nuevo cuando un procedimiento se contrae.

GB.GTK
Window.Menus [] no se bloquea más.
Solución que evita que los colores de información de herramientas del sistema sean ilegibles.

GB.GTK3
Window.Menus [] no se bloquea más.
Solución que evita que los colores de información de herramientas del sistema sean ilegibles.

GB.GUI.BASE
GridView: Detenga el temporizador de desplazamiento cuando se pierde el foco, como si abriera un diálogo modal durante un evento MouseDown, no obtendrá el evento MouseUp. Tal vez debería plantear sistemáticamente un falso evento MouseUp cuando el foco se pierde, y QT no lo envió.
IconView: actualiza correctamente el diseño cuando las imágenes de los iconos se hacen más pequeñas.

GB.INOTIFY
La creación de un reloj con una ruta nula ahora genera un error en lugar de bloquearse.
No asuma que inotify_add_watch () tiene éxito en todos los casos. La ruta de observación puede haber sido eliminada después de haber creado el reloj.

GB.JIT
Corrige la detección jit.h y resuelve el problema donde hay varias versiones de llvm. Jit.h sólo está disponible antes de llvm 3.6 y gb.jit sólo se puede compilar con estas  versiones.

GB.MAP
Ahora las polilíneas funcionan correctamente.
El zoom no cambia el centro del mapa.

GB.MEDIA
Vincular explícitamente con la biblioteca de subprocesos.
MediaPipeline: Evita que la rutina de devolución de mensajes sea posible.
MediaPipeline: Levanta el evento Start cuando se inicia una nueva secuencia.
MediaPipeline: Las propiedades de posición y duración se calculan ahora durante la rutina de devolución de llamada del mensaje.
MediaPipeline: Levante el evento AboutToFinish dos segundos antes del final de la secuencia.
MediaPlayer: NextURL es una nueva propiedad que debe establecer para definir la siguiente secuencia que se reproducirá sin intervalo.
MediaPlayer: La configuración de la propiedad URL detiene automáticamente el reproductor.
MediaPlayer: El evento AboutToFinish ahora es planteado por MediaPipeline. Esta no es la señal de aproximadamente a terminar de GStreamer.

GB.MEDIA.FORM
MediaView: Expone el evento de MediaPlayer AboutToFinish.
MediaView: Expone la propiedad MediaPlayer NextURL interna.
GB.NET.POP3
Pop3Client.Refresh () ha sido implementado. Este método era necesario para actualizar el caché interno de mensajes, de modo que no tiene que abrir una nueva conexión cada vez que necesite leer el cuadro de mensaje.

GB.QT4
Solución que evita que los colores de información de herramientas del sistema sean ilegibles.

GB.QT5
Solución que evita que los colores de información de herramientas del sistema sean ilegibles.

GB.SDL
Cygwin necesita la biblioteca compartida x11 - según Bastian Germann.

GB.SDL2.AUDIO
Elimine las referencias innecesarias a los objetos de canal, que conducen a la pérdida de memoria.

GB.XML
XmlNode: No se bloquee cuando _get () ing un valor de atributo vacío.
XmlNode.Attributes ahora funciona correctamente al obtener atributos vacíos.
XmlElement.GetAttribute () ahora funciona correctamente con atributos vacíos.
Cygwin cambia - según Bastian Germann.

GB.WEB
Si el encabezado Http-Accept-Language es nulo, Request.Language devuelve el lenguaje actual del sistema en lugar de "C".
Tipos de Mime para archivos json, kml y kmz. Utilizado por el método Response.SendFile ().
No modifique DB.Current cuando las sesiones se administran con bases de datos sqlite.
Utilizar Response.SendFile () establece correctamente la propiedad Done.
Obtener las claves de sesiones con sqlite funciona correctamente ahora.

GB.WEB.FORM
  • WebForm.Download () es un nuevo método estático que activa una descarga de archivos en el lado del cliente.
  • WebTextBox: El evento predeterminado es "Cambiar" ahora.
  • Permite cotizaciones en los elementos de finalización automática.
  • WebControl.Name ahora puede escribirse, de modo que la propiedad virtual de grupo se puede utilizar en el IDE.
  • WebContainer: forzar una actualización completa cuando cambia la propiedad Visible.
  • WebTable: Agrega una propiedad oculta al objeto de columna.
  • WebUploadArea: Clear () es un nuevo método que borra el archivo posiblemente subido.
  • WebTable: La selección ahora se mantiene correctamente entre las solicitudes.
  • El método público estático HandleRequest ahora se llama correctamente en su formulario de inicio.
  • Quite el soporte para múltiples formularios principales.
  • WebTable: AddColumn () es un nuevo método para agregar una columna y definir sus propiedades en una línea de código.
  • WebForm: Evita que la ventana de diálogo no redimensionable se expanda para ajustarse a su contenido.
  • WebForm: restaura correctamente instancias automáticas entre solicitudes.
  • WebForm: El método Hide () funciona como se espera ahora.
  • WebForm: Persistente es una nueva propiedad que indica que un formulario debe estar oculto en lugar de ser eliminado cuando se hace clic en el botón Cerrar o se llama al método Close ().
  • WebDataBox: DateTime es una nueva propiedad que permite al control aceptar una parte de tiempo.


Fuente Original:

miércoles, 12 de octubre de 2016

Curso De Gambas3: Actualización de enlaces



Curso De Gambas3: Actualización de enlaces

Estos días, he estado actualizando las entradas del curso de gambas3, que ya lleva varios años subido en el sitio http://cursogambas.blogspot.com.es/p/indice.html , y que con el cambio de dominio de la documentación oficial del proyecto gambas, que paso de  gambasdoc a gambaswiki, algunos enlaces a los que se hacia referencia no dirigían bien a los usuarios. ¡¡ Pues ya estan corregidos !!

Aprovechando, la ocasión, también he modificado algunas entradas, o añadido algún texto/video para actualizarlas.

El acceso al material del curso, todas las entradas, videos, descarga de ficheros de ejemplo  es completamente gratuito.


Pero si quereis una versión en formato .pdf la podeis conseguir en:
https://www.lulu.com/shop/search.ep?keyWords=julio+sanchez+berro&creator=julio+sanchez+berro&sorter=averageRating-desc

Nota: Las páginas web del curso, siempre esta más actualizada que estos ficheros .pdf



Si quieres donar a este proyecto, lo podéis hacer en:




Saludos
























viernes, 15 de enero de 2016

Gambas3: Enviar un correo y ficheros adjuntos (Actualizacion 2016)

Gambas3: Enviar un correo y ficheros adjuntos

Nos deja Shordi en el foro de gambas-es.org, la funcion que ha realizado para enviar correos electrónicos y fichereos adjuntos:


Public Function sendmail(sFrom As String, aTo As String[], sSubject As String, sBody As String, cServer As CollectionOptionalaBcc As String[]Optional aAttached As String[]Optional ldebug As Boolean) As Boolean

    Dim SmtpC As New SmtpClient
    Dim s, cad, fich, cmime, fname As String

    SmtpC.debug = ldebug
    SmtpC.host = cServer["host"]
    SmtpC.user = cServer["user"]
    SmtpC.password = cServer["password"]
    SmtpC.Encrypt = IIf(cServer["Encrypt"], cServer["Encrypt"], Net.SSL)
    SmtpC.Alternative = False
    SmtpC.From = sFrom
    For Each s In aTo
        SmtpC.To.Add(Replace(s, " """))
    Next
    SmtpC.Subject = sSubject
    SmtpC.Body = sBody
    If Not IsNull(aAttached) Then
        For Each fich In aAttached
            Exec ["file""-bi", fich] To cmime
            cmime = Left(cmime, InStr(cmime, ";") - 1)
            fname = Right(fich, - RInStr(fich, "/"))
            SmtpC.Add(File.Load(fich), cmime, fname)
        Next
    Endif
    If Not IsNull(abcc) Then
        For Each s In abcc
            SmtpC.bcc.Add(s)
        Next
    Endif
    SmtpC.send
    Return True

Catch

    print Error.text;;Error.where
    Return False

End

Fuentes:
enlace al hilo de http://www.gambas-es.org con el código de la función
enlace al hilo de gambas-es org con programa
enlace al código fuente

viernes, 1 de enero de 2016

Nuevo Año y Nueva Versión de Gambas3: gambas 3.8.4


Nuevo Año y Nueva Versión de Gambas3

gambas 3.8.4


Hace unos cuantos dias, el 21 de diciembre, Benoit nos trajo la nueva versión 3.8.4 con las siguientes mejoras:

Esta versión incluye todas las correcciones de errores desde el lanzamiento de Gambas 3.8.3.

Aquí hay algunos cambios importantes: 
No se desplome más cuando se ejecuta el IDE a través de un servidor de terminales, o en los escritorios antiguos que no logran algunas propiedades X11.
El apoyo a los valores de sólo de tiempo en las bases de datos PostgreSQL recientes.
Apoyo a la simple y CRAM-MD5 autenticaciones en gb.net.smtp.

Cambios:
CONFIGURACIÓN
  • Actualización Gambas archivo XML 3 appdata.
ENTORNO DE DESARROLLO
Editor de código
  • Ayuda contextual (F2) en clases pertenecientes al proyecto funciona correctamente ahora.
  • Lista procedimiento se centra correctamente el editor sobre el procedimiento de destino.
Editor de base de datos
  • Editor de Solicitud es ahora seleccionable cuando QT4 está en uso.
  • Un poco de rediseño de la barra de herramientas ventana superior.
Editor de formularios
  • Mediante un formulario cuyo nombre comienza con un guión bajo es ahora posible.
  • No inicializar las propiedades de los controles que tienen una propiedad "_DrawWith". No sé por qué lo hice, pero de todos modos Previene Undo / Redo funcione correctamente.
  • Fijar el manejo de propiedades de color con valor alfa.
  • No bloquearse cuando la imagen de un ReportImage o ReportSvgImage no se puede cargar. Mostrar un icono roto rojo grande en su lugar.
Editor de imagen
  • Fijar los choques con selecciones que no tiene medida.
  • Herramientas de rectángulo y elipse ahora tienen una precisión de medio píxel.
  • La herramienta elipse ahora funciona correctamente cuando la elipse se extrae de su centro.
Packager
  • Soporte para gb.gui.qt y componentes genéricos gb.gui.qt.webkit.
  • Utilice debhelper versión 9 requisito en todas partes.
Granja Software
  • Eventos de descarga de software se ignoran correctamente cuando el asistente se trasladó de nuevo a la lista de software.
  • Cuenta de la granja contraseñas deben ser correctamente recordados ahora.
Diverso
No bloquearse si el archivo VERSION es incorrecta. Mostrar un mensaje de error.
Permitir el corto de comandos para el cromo.

INTÉRPRETE
Application.Dir está correctamente declarada ahora. En consecuencia, se trabajará con compilador JIT.
Mesa de subrutina es más rápido que el acceso ahora.
No navegar directorio temporal al final si no hay ningún archivo temporal se ha utilizado.
Object.Raise () ahora funciona correctamente con los eventos que tienen argumentos.

GB.DB.POSTGRESQL
ERROR: Gambas valores de fecha / hora sin fecha de hoy se almacenan como fecha posible mínimo que acepta PostgreSQL, 4713-01-01 BC.

Gb.desktop
Actualización de scripts a la última versión (1.1.1)-utils xdg.

GB.DESKTOP.X11
No bloquearse cuando algunas propiedades de escritorio no están definidos por el gestor de ventanas.

Gb.form
MessageView: Ignorar un mensaje si su contenido es el mismo que el mensaje que se muestra actualmente.
Foto: Fijar cómo se manejan los iconos temáticos específicos. Ellos ahora son juzgados en todos los tamaños posibles y otros iconos no tema específico se ignoran.
Foto: Fijar el apoyo tema de iconos brisa.

GB.FORM.EDITOR
Actualizar sólo las líneas en cuestión cuando cambia la selección.
Fijar la página y página abajo cursor se mueve.
Cada editor tiene ahora un caché de imágenes línea interna para acelerar redibujados. Esta caché de imágenes se borra tan pronto como el editor pierde el foco, para ahorrar memoria, o cinco segundos después de la última redibujado.
Trate de detectar si el escritorio es remota, y desactivar todas las optimizaciones basadas en cachés de imagen en ese caso.
No bloquee al eliminar la selección.

Gb.gtk
Fijar los accidentes en los escritorios no se definen algunas propiedades X11.
Inicialice el evento máscara ventana raíz cuando se ajusta el filtro de eventos X11.
Levantar un error ahora al llamar ESPERA durante un evento de repintado. Esto se -not- una buena idea tha puede estrellarse todo.

GB.GTK3
Fijar los accidentes en los escritorios no se definen algunas propiedades X11.
Inicialice el evento máscara ventana raíz cuando se ajusta el filtro de eventos X11.
Levantar un error ahora al llamar ESPERA durante un evento de repintado. Esto se -not- una buena idea tha puede estrellarse todo.

GB.GUI.BASE
GridView: Aumentar el tamaño de la fila y la columna invisible controladores de tamaño.

GB.NET.SMTP
Apoyo a la simple y CRAM-MD5 autenticaciones.

GB.QT4
Fijar los accidentes en los escritorios no se definen algunas propiedades X11.
Levantar un error ahora al llamar ESPERA durante un evento de repintado. Esto se -not- una buena idea tha puede estrellarse todo.
Propiedad Window.Border funciona correctamente de nuevo.

GB.QT5
Fijar los accidentes en los escritorios no se definen algunas propiedades X11.
Levantar un error ahora al llamar ESPERA durante un evento de repintado. Esto se -not- una buena idea tha puede estrellarse todo.

GB.REPORT2
ReportView: Inicializar el contenido del búfer de imagen temporales cuando la escala de grises está habilitada. De lo contrario píxeles sin inicializar se pintan.

Versión original del documento: http://gambas.sourceforge.net/en/main.html

Información para instalar gambas desde repositorio PPA:

martes, 15 de septiembre de 2015

Páginas web realizadas en Gambas y ejecutadas en servidor Cloud9


Páginas web realizadas en Gambas

y ejecutadas en servidor Cloud9

Este es un pequeño manual paso a paso, para configurar el servidor Cloud9 y que pueda ejecutar aplicaciones web realizadas por gambas, mediante script.

1) Crear espacio de trabajo “Workspace”


Elegimos la opción de Hosting d y el icono de Html5, y ponemos un nombre al espacio de trabajo /(workspace), por ejemplo: “pruebasgambas”


2) Pulsamos sobre “pruebasgambas” y aparece el boton “Start Editing”

Y se inicia el escritorio, y finalmente se muestra



3) Abrimos una terminal dentro del servidor cloud9, pulsando en el boton “+” y elegimos “New Terminal”


















4) Instalaremos gambas en nuestro espacio de trabajo (es una máquina con sistema operativo Ubuntu 14.02).

 Primero añadimos el ppa, actualizamos y luego instalamos gambas3

$sudo add-apt-repository ppa:gambas-team/gambas3
$sudo apt-get update
$sudo apt-get install gambas3

Asi tendremos gambas3 instalados, en la ultima versión estable 3.7.1






Nota:
Para compilar y crear ejecutables hay que usar estos dos comandos de gambas: gbc3 y gba3.

1º paso
ruta/del/proyecto$$gbc3 -aeg

(si se producen errores, salen por la consola)


2º paso
ruta/del/proyecto$gba3 -v -o nombreApp.gambas

3º ejecuta
ruta/del/proyecto$nombreApp.gambas



5) Existen dos formas de ejecutar aplicaciones gambas3 para páginas web
5.1.) Usando gambas3-script
Ahora también vamos a instalar gambas-script, (que es el método antiguo de ejecutar script y realizar páginas web).

$ sudo apt-get install gambas3-script

Como vereis se instala la versión 3.1.1.
Haremos algunas pruebas usando script en gambas, pero es previsible que en el futuro ya no se pueda ni instalar ni usar.

5.2.) Usando gb.web
Es la forma actual de realizar aplicaciones web.
Haremos un par de ejemplos para que veais como funciona.

Más informacion sobre gb.web:


6) Para ejecutar ambos métodos (5.1 o/y 5.2), necesitamos instalar CGI server
Seguiremos los pasos del anexo 1.

Resumo los pasos:
6.1.) Crear un directorio llamado “cgi-bin” en nuestro directorio

$mkdir cgi-bin


6.2.) Modificamos el archivo /etc/apache2/conf-available/serve-cgi-bin.conf

Con el editor vi o el nano, editamos el archivo serve-cgi-bin.conf

lo dejaremos asi:
<IfModule mod_alias.c>
<IfModule mod_cgi.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>

<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>

<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /home/ubuntu/workspace/cgi-bin/
<Directory "/home/ubuntu/workspace/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
AddHandler cgi-script .cgi .py .gb
Require all granted
</Directory>
</IfDefine>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet


6,3.) Hacemos que se instala el modo CGI:

$sudo a2enmod cgi

Reiniciamos apache2. Por ejemplo se puede hacer escribiendo:

$apache2
http (pid XXXX) already running

Nos dá el PID, lo matamos
$kill XXXX

y volvemos a escribir
$apache2

y ya tendremos reiniciado el servidor apache.

6.4.) Haremos un pequeño script en gambas, que lo llamamos “test.gb”:
#!/usr/bin/env gbs3

dim a as integer
print "Content-type: text/html"
print ""
print "<html> <head><title>Sample CGI Script</title></head> <body>"
print " <h3> Sample CGI Script </h3>"
print "Gambas gbs3 (gambas-script) <br>"
print "Ejemplo bucle for...next<br>"
for a=0 to 10
print "Valor: "& str$(a) & "<br>"
next

Y tendremos que dar permiso de ejecución al propio directorio cgi-bin y a todo su contenido:

$chmod +x -R /home/ubuntu/workspace/cgi-bin

Luego escribimos una url que siga este formato:
https://<nombre-del-espacio-de-trabajo>-<tu-nombre-de-usuario>.c9.io/cgi-bin/test.gb

En mi caso

(nota: el servidor c9.io no esta las 24 horas encendido , para ello hay que ir al plan de pago)

Veremos que se ejecuta lo siguiente en el navegador: