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:



domingo, 24 de julio de 2011

Juguemos al BingoGambas con Gambas2

Bingo-Gambas


Es un programa para simular el juego de Bingo, genera la salida de  los números aleatorios (de 1 a 75), y los señala en la pantalla.



En el aspecto sobre la programación de este programa, os comento:

Es fácilmente ampliable para más (o menos) números, al utilizar array de label para dibujar y hacer cambios en el cartón de la pantalla.
Módulo "var" donde se encuentras las variables globales:

' Gambas module file
PUBLIC num_max AS Integer = 75
PUBLIC num_sinsalir AS Integer = 75
PUBLIC incx AS Integer
PUBLIC incy AS Integer
PUBLIC fichas AS NEW Object[] ' var.num_max]
PUBLIC ficha_temp AS Object
PUBLIC texto AS String



Módulo "carton":

' Gambas module file

PUBLIC SUB rellenacarton()
DIM a AS Integer
var.incx = -47 + 4
var.incy = 70
FOR a = 0 TO var.num_max - 1
var.ficha_temp = NEW Textlabel(FormCarton)
var.incx = var.incx + 47
IF var.incx > 670 THEN
var.incy = var.incy + 47
var.incx = 4
ENDIF
var.ficha_temp.x = var.incx
var.ficha_temp.y = var.incy
var.ficha_temp.Background = &H5FAFFF&
var.ficha_temp.Alignment = 3
var.ficha_temp.border = 3
var.ficha_temp.height = 42
var.ficha_temp.width = 42
var.ficha_temp.text = Str(a + 1)
var.fichas.Add(var.ficha_temp)
NEXT
END
 

 Y  acceder a ellos para cambiar el color del fondo es también muy sencillo. Módulo "sacar"
 
…..
'pongo la el numero de la ficha en fondo rojo....
var.fichas[numero - 1].Background = &HFF3D5D&
…..


El sistema de elegir el "número" aleatorio, es similar al que utilice en el programa "Refranero":
- Se crea una lista con todos los números.
- Luego elegimos aleatoriamente la posición,
- sacamos el numero elegido de la lista
-  y recostruimos la lista con un elemento menos.

Todo este proceso se realiza con ayuda del archivo "bolas.txt", que es el que tiene la lista de los números que aun no han salido.
 
….
posicion = Rnd(0, var.num_sinsalir)
'una cosa es el numero y otra es la posicion de la lista...
'abre el archivo que contiene las bolas
cadena = lista.leer()
bolas_txt = Split(cadena, "|")
'crear un nuevo array con los datos
FOR a = 0 TO bolas_txt.count - 2
bolas[a] = CInteger(bolas_txt[a])
NEXT
' coge el que ocupa la posicion
numero = bolas[posicion]
'crea una nuevo array sin esa posicion
c = -1
FOR a = 0 TO bolas_txt.count - 2
IF a <> posicion THEN
c += 1
bolas_reformada[c] = bolas[a]
ENDIF
NEXT
'lo guarda
cadena = ""
FOR a = 0 TO bolas_reformada.Count - 1
cadena &= Str$(bolas_reformada[a]) & "|"
NEXT
File.Save(User.home & "/bolas.txt", cadena)
….


 También he añadido la opción de decir en voz el número que sale escogido, usando el comando speak. Módulo "hablar"

' Gambas module file

PUBLIC SUB di(texto AS String)
EXEC ["aoss", "espeak", "-ves", "-s 120", texto] 
END

Aquí tenéis una captura de la pantalla del IDE, donde podéis ver los módulos que forman el programa.


Enlace restaurado: 25/7/2014 NEW


Saludos.


Nota:
Me podeis ayudar a continuar subiendo programas apuntandoos atraves de este enlace a Beruby

beruby.com - Empieza el día ganando

Gracias

martes, 19 de julio de 2011

Cronómetro para #controlar la duración de tus #videos de #yotutube



Controlar la duración 
de tus videos de youtube: Herramienta Cronómetro


 Esta es una pequeña herramienta que me he hecho para controlar la duración de mis videotutoriales. Es fácilmente adaptable a vuestras necesidades.


Al iniciarla presenta un formulario, que nos solicita los datos que nos mostrará en la posterior pantalla de presentación.

Luego se activa la pantalla de presentación, donde ya podremos iniciar la grabación del video y poner en marcha el cronometro (pulsar el botón "iniciar").


 Con el botón "recortar" haremos que se reduzca el formulario y solo aparezca el cronómetro.

Hay un pequeño botón junto al marcador de  los segundo, el cual al pulsarlo, se vera de nuevo el formulario.

Este botón cuando el cronometro llegue a cero, aparecerá intermitente.
Código de los dos formularios:
Formulario Fmain:
' Gambas class file

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()
ME.center
ComboBoxgestorpantalla.Add("Gnome")
ComboBoxgestorpantalla.Add("KDE")
ComboBoxgestorpantalla.Add("XFCE")
ComboBoxgestorpantalla.Add("Unity")
ValueBoxfecha.value = Now
END

PUBLIC SUB Button1_Click()
ME.visible = FALSE
FormPresentar.show()

END

PUBLIC SUB ButtonSalir_Click()

ME.close()

END


FormularioPresentar:

' Gambas class file
PUBLIC a AS Integer
PUBLIC b AS Integer
PUBLIC c AS Integer

PUBLIC d AS Integer


PUBLIC SUB Form_Open()
ME.center
ME.Caption = "Tiempo..."
minutos.value = 15 'tiempo inicial en minutos
segundos.value = 0 'tiempo inicial en segundos
a = segundos.value
b = minutos.value * 60
tema.Text = FMain.TextBoxTema.text
parte.text = FMain.TextBoxparte.Text

version.text = FMain.TextBoxgambas.Text

distroygestor.text = FMain.TextBoxgnulinux.text & " , " & FMain.ComboBoxgestorpantalla.text


fecha.Text = "Fecha: " & Format(FMain.ValueBoxfecha.value, "dd/mm/yyyy")

END

PUBLIC SUB ToolButton1_Click()

cronometrodescontar.Enabled = TRUE

c = (a + b) / 60
d = (a + b) MOD 60
END

PUBLIC SUB cronometrodescontar_Timer()
IF c = 0 AND d = 0 THEN
IF ToggleButton1.Background = Color.Red THEN
ToggleButton1.Background = Color.green
ELSE
ToggleButton1.Background = Color.Red
ENDIF
ELSE
IF d = 0 THEN
c = c - 1
d = d + 59
ELSE
d = d - 1
ENDIF

'show the countdown
minutos.Value = c
segundos.Value = d
ENDIF
END

PUBLIC SUB Button1_Click()

FormPresentar.w = 159
FormPresentar.h = 49

END

PUBLIC SUB ToggleButton1_Click()

FormPresentar.w = 800
FormPresentar.h = 640
END

PUBLIC SUB form_Close()
FMain.Visible = TRUE
END


Os dejo aquí el enlace para descargar el código fuente completo

Nota:
28 / 08 / 2011: Mejora incluida, ahora podemos parar el reloj y continuar. Para realizar paradas en la grabación del video.

Saludos a G3RAR284, espero que te sea útil.

sábado, 16 de julio de 2011

VOZ: nuestro ordenador habla y lee por nosotros

"Y se hizo la voz..."

Bueno pues os traigo una pequeña aplicación-herramienta realizada en Gambas, para leer texto en voz alta, usando el programa espeak, siendo nuestra aplicación Gambas un front-end para este comando de gnu/linux.

El código es asi de simple:

' Gambas class file


PUBLIC SUB PictureBoxPegar_MouseDown()

TextArea1.text = Clipboard.Paste()

END

PUBLIC SUB PictureBoxLeer_MouseDown()

EXEC ["aoss", "espeak", "-ves", "-s120", TextArea1.text]


END

PUBLIC SUB PictureBoxBorrar_MouseDown()

TextArea1.text = ""

END


El código lo que hace son 3 cosas:
- Cuando pulso sobre el pictureboxBorrar: borra el contenido del textarea.
- Cuando pulso sobre el pictureboxPegar: pega el contenido del portapapeles en el textarea.
- Cuando pulso sobre el pitureboxLeer: ejecuta la orden "aoss espeak -ves -s120 " añadiendole el texto que contenga el textarea.

Como veis, en vez de botones, he utilizado PictureBox, para definir "los botones", ya que así me permitía meter la imagen que me interesaba redimensionada con la propiedad del picturebox "Strech" como "true".

Para ejecutar el programa, teneis que tener instalado el alsa-oss y el espeak:
sudo apt-get install alsa-oss
sudo apt-get install espeak

Os dejo el código fuente en este enlace


Saludos


Fuente:
Mi antiguo blog
http://jsbsan.wordpress.com/2009/02/16/003-programar-programas-que-hablen/
http://gambaslinux.wordpress.com/2008/01/06/gambas-levantate-y-habla/

Sacamos partido a las redes sociales...la búsqueda de empleo "activa" por internet


Este blog me ha parecido interesante, tiene una sección de consejos entre ellos he vistos estos:

Cómo manejarse en LinkedIn para encontrar #empleo (I)

Cómo manejarse en LinkedIn para encontrar #empleo (II)

Sacamos partido a las redes sociales en ocho sesiones. Día 1.

Sacamos partido a las redes sociales en ocho sesiones. Día 2.

Sacamos partido a las redes sociales en ocho sesiones. Día 3.

Sacamos partido a las redes sociales en ocho sesiones. Día 4

....

Los artículos están escritos por Antonio Vallejo

Gambas2 y OOP Trabajando con clases (06) Trabajando con la #Herencia y #Polimorfismo #Práctica 7b


Gambas2 y OOP (VI) 
Trabajando con la 
Herencia y Polimorfismo 
Práctica 7b


Veamos la práctica 7b:
 Desarrollar una aplicación de encriptación de códigos numéricos.
El encriptador recibirá un código numérico y una implementación de un algoritmo
de encriptación/desencriptación y la orden de encriptar o desencriptar el código.
Existen distintos algoritmos:
• Multiplicar por un número determinado.
• Diferencia existente a un número determinado.
• El XOR con un número determinado.
Desarrollar la clase Practica9 que en su método main cree un encriptador, y le
pida encriptar y desencriptar varios códigos usando distintos algoritmos de
encriptación.

Resolución:
Clase Algoritmo:

' Gambas class file
PUBLIC FUNCTION encriptar() AS Integer
END

PUBLIC FUNCTION desencriptar() AS Integer
END


Clase AlgoritmoDiferencia:

' Gambas class file

INHERITS Algoritmo

PRIVATE num AS Integer = 0

'constructor
PUBLIC SUB _new(param AS Integer)
num = param
END

'metodos
PUBLIC FUNCTION encriptar(param AS Integer) AS Integer
RETURN num - param
END

PUBLIC FUNCTION desencriptar(param AS Integer) AS Integer
RETURN num - param
END


Clase AlgoritmoMultiplicacion

' Gambas class file

INHERITS Algoritmo

PRIVATE num AS Integer = 0

'constructores
PUBLIC SUB _new(param AS Integer)
num = param
END


'metodos
PUBLIC FUNCTION encriptar(param AS Integer) AS Integer
RETURN param * num
END

PUBLIC FUNCTION desencriptar(param AS Integer) AS Integer
RETURN param / num
END


Clase AlgoritmoXOR

' Gambas class file

INHERITS Algoritmo

PRIVATE num AS Integer = 0

'constructores
PUBLIC SUB _new(param AS Integer)
num = param
END

PUBLIC FUNCTION encriptar(param AS Integer) AS Integer
RETURN param * num
END

PUBLIC FUNCTION desencriptar(param AS Integer) AS Integer
RETURN param ^ num
END

Clase Encriptador:

' Gambas class file

PUBLIC SUB _new()

END

'metodos
PUBLIC FUNCTION encriptar(param1 AS Integer, param2 AS Algoritmo) AS Integer
RETURN param2.encriptar(param1)
END

PUBLIC FUNCTION desencriptar(param1 AS Integer, param2 AS Algoritmo) AS Integer
RETURN param2.desencriptar(param1)
END


Clase Fmain

' Gambas class file

PUBLIC SUB _new()

END

PUBLIC SUB Form_Open()
DIM codigo AS Integer

DIM e AS NEW Encriptador
DIM aux AS Integer = 0

DIM a1 AS NEW AlgoritmoMultiplicacion(10)

DIM a2 AS NEW AlgoritmoDiferencia(2147483467)

DIM a3 AS NEW AlgoritmoXOR(2)

codigo = 12345
aux = e.encriptar(codigo, a1)




TextArea1.text = "Codigo: " & Str$(codigo)
TextArea1.text &= "\n" & "Algoritmo Multiplicacion"
TextArea1.text &= "\n" & " Encriptado: " & Str$(aux)
TextArea1.text &= "\n" & " Desencriptado: " & Str$(e.desencriptar(aux, a1))

aux = e.encriptar(codigo, a2)
TextArea1.text &= "\n" & "Algoritmo Diferencia"
TextArea1.text &= "\n" & " Encriptado: " & Str$(aux)
TextArea1.text &= "\n" & " Desencriptado: " & Str$(e.desencriptar(aux, a2))

aux = e.encriptar(codigo, a3)
TextArea1.text &= "\n" & "Algoritmo XOR"
TextArea1.text &= "\n" & " Encriptado: " & Str$(aux)
TextArea1.text &= "\n" & " Desencriptado: " & Str$(e.desencriptar(aux, a3))



END



Pantallazo de la aplicacion


Enlace de descarga del código:
http://manualjsb.googlecode.com/files/practica7b-0.0.1.tar.gz


Saludos