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:



lunes, 30 de noviembre de 2015

¿que pienso sobre el Black Friday?

¿que pienso sobre el Black Friday?


Algunas tiendas suben los precios algunos dias antes, y luego los "rebajan"
fuente: http://www.asivaespana.com/economia





A los consumidores nos tratan como borregos.....



¡¡¡Piensa!!!!,  ¡¡¡¡ no seas borrego !!!



miércoles, 18 de noviembre de 2015

Truco: Como crear una cuenta de paypal sin dar datos de tarjeta de credito ni cuenta bancaria

Truco:

 Crear una cuenta de paypal sin dar datos de tarjeta de crédito ni cuenta bancaria



Mucha gente tiene problemas con crearse una cuenta en paypal, porque no tienen tarjeta de crédito (o incluso no tienen una cuenta bancaria), y es unos de los datos que se pide cuando te creas una cuenta en paypal.

En el siguiente video os explico un truco para crearte la cuenta paypal sin dar estos datos:





¿que utilidad tiene una cuenta paypal sin tener asociada una cuenta bancaria o una tarjeta de crédito? Podemos recibir pagos de algún trabajo que hagamos y usar eses dinero para comprar por ejemplo en ebay.
También hay muchas páginas del tipo PTC que admiten paypal, y podemos tener una cuenta para ir reciendo los distintos pagos que normalmente son pequeños (varios dolares/euros al mes)


Espero que os sea útil.

Saludos







domingo, 15 de noviembre de 2015

Buscar una imagen dentro de otra y obtener su posición (coordenadas x,y)


Buscar una imagen dentro de otra y obtener su posición (coordenadas x,y)


Muchas veces necesitamos  desarrollar un programa que reconozca donde esta en una imagen un icono o una subimagen (una porción de la imagen principal). Vamos a usar los png2pat y visgrep, para realizar esta tarea.

Tenemos la siguiente imagen de fondo:

Y queremos buscar  la subimagen donde está el  icono de la nube:


Los archivos de imagen (tanto el fondo como la imagen que buscamos) deben de tener la extensión ".png", si es otra hay que convertirla con algún programa (gimp, convert, etc).

Estos serian los pasos:
1) Convertimos la imagen "nube.png" al el formato "pat" usando el comando png2pat y ">"
$png2pat nube.png > /tmp/nube.pat

2) Y ahora la buscamos en el fondo:
$visgrep fondo.png /tmp/nube.pat

3) Nos mostrará las coordenadas de donde esta la imagen "nube.pat"
$visgrep fondo.png /tmp/nube.pat
365,98 -1

La x=365, y la Y=98, así tendremos localizado el punto donde esta la subimagen (su esquina superior  izquierda) dentro del fondo

Os dejo en enlace de la ayuda de los comandos  que están en el paquete xautomation
png2pat
visgrep
Tenéis que tener instalado xautomation para tener los dos comandos disponibles:

En un próximo artículos haré un programa donde se usen estos comandos.


Saludos


Como esta hecho.... BuscaCaras


Como esta hecho....

 BuscaCaras




Os dejo un video explicativo del programa BuscaCaras:



V visita estos enlaces, donde puede conseguir el código fuente y más de detalles del programa y la función shuffle (barajar):

http://jsbsan.blogspot.com.es/2015/11/juego-buscacaras-uso-de-shuffle-barajar.html

http://jsbsan.blogspot.com.es/2015/11/shuffle-barajar-aleatoriamente-con-el.html

miércoles, 11 de noviembre de 2015

Juego BuscaCaras: Uso de shuffle (barajar)

Juego Busca Caras:

Uso de shuffle (barajar)


Descripción del juego:
Os dejo un juego para los más pequeños: Se trata de encontrar que cara se repite de las 32 que aparecen aleatoriamente colocadas en un formulario. Tenemos 3 intentos (o vidas), cada vez que nos equivocamos, nos quitará una vida, y si acertamos, añadiremos una vida (como máximo tendremos 3 vidas). Si llegamos a 0 vidas, se acaba el juego :)

Funcionamiento interno:
La función barajar (shuffle) se usa para desordenar las caras que estan almacenadas  en un array de cadenas.
Primero se elige una entre las 32 caras, la cual se elimina del array, y luego se elige otra de las que tenga para añadirla al array, asi tenemos la "cara repetida". Luego desordenamos el array con la función barajar(shuffle).

Para mostrar las cras se usan controles ToolButton, creados en tiempo de ejecución dentro de un contenedor del tipo Hpanel.


Public Sub CrearBotones()

Dim a As Integer
Dim botontmp As ToolButton
Dim listaPresentacion As New String[]

For a = 0 To listacaras.max
listaPresentacion.Add(listaCaras[a])
Next

'quito una cara aleatoriamente
listaPresentacion.Remove(Int(Rnd(0, listaPresentacion.max)))
'añado una cara repetida
caraRepetida = listaPresentacion[Int(Rnd(0, listaPresentacion.count))]
listaPresentacion.Add(caraRepetida)

'barajo
listaPresentacion = ModuleAzar.barajar(listaPresentacion)

For a = 0 To 31
botontmp = New ToolButton(HPanel1) As "botones"
botontmp.Picture = Picture[listaPresentacion[a]]
botontmp.w = 75
botontmp.h = 75
botontmp.Border = True
botontmp.tag = listaPresentacion[a]
Next

End



Código Fuente e instalador .deb: alojado en google drive


Video del programa funcionando:





Nota:
17/11/2015
Gracias a Portano, ya tenemos el programa traducido al Portugués, Francés y Inglés

lunes, 9 de noviembre de 2015

Shuffle (Barajar) aleatoriamente con el algoritmo Sattolo-Cycle un array en Gambas



Shuffle (Barajar) aleatoriamente

con el algoritmo Sattolo-Cycle  un array  en Gambas



Leyendo el artículo de Joedicastro (http://joedicastro.com/algoritmos-shuffle.html) sobre los distintos algoritmos de barajar arrays, donde define varios algoritmos, entre ellos el algoritmo Sattolo-Cycle:
"este algoritmo solo genera ciclos, de ahí su nombre. Es decir, reparte uniformemente los resultados solo entre algunas permutaciones que se van rotando (aunque comparte el mismo problema con los anteriores al depender de una aleatoriedad no perfecta). Para resumir su funcionamiento, lo que hace es que después de ejecutarlo, ningún elemento de la lista repite la posición anterior que tenía en la misma. Ese algoritmo fue publicado por Sandra Sattolo en 1986"

He aplicado dicho algoritmo a una función realizada en gambas, quedando el código siguiente:

' Gambas module file

Public Function barajar(listaOriginal As Variant[]) As Variant[]

Dim listatemporal As New Variant[]
Dim i, idx, sel As Integer

'1º asigna a la listaOriginal a la temporal
For i = 0 To listaOriginal.max
listatemporal.add(listaOriginal[i]) 'usa una lista temporal para no perder el orden original'
Next

'2º mezcla algoritmo Sattolo-Cycle
idx = listaOriginal.count

While idx > 1
idx = idx - 1
sel = Int(Rnd(0, idx))
Swap listatemporal[sel], listatemporal[idx] 'intercambio valores
Wend
Return listatemporal 'se devuelve la lista temporal que es la lista originnal mezclada


End

Como veis esta función recibe un array de elementos, como es variant[] admite arrays de todo tipo: int[],float[],string[], structure[], objet[] y por supuesto vaiant[], y devuelve ese array barajado.

Ejemplo:
Un pequeño ejemplo de aplicación de shuffle (o "barajar") es el siguiente, tenemos una lista de 5 cadenas: "0/4", "1/4", "2/4",  "3/4" y "4/4". Y queremos barajarlo varias veces.

Usaríamos este código:

Public Sub barajo()

Dim a As Integer
Dim lista As New String[]
Dim listaBarajada As String[]

Randomize

lista.Add("0/4")
lista.Add("1/4")
lista.Add("2/4")
lista.Add("3/4")
lista.Add("4/4")

TextLabel1.text = "-------- Inicialmente ----------" & "<br>"
For a = 0 To lista.Max
TextLabel1.text &= lista[a] & "<br>"
Next

listaBarajada = ModuleAzar.barajar(lista)
TextLabel1.text &= "-------- Barajo ----------" & "<br>"
For a = 0 To lista.Max
TextLabel1.text &= listaBarajada[a] & "<br>"
Next

TextLabel1.text &= "-------- Barajo ----------" & "<br>"
listaBarajada = ModuleAzar.barajar(listaBarajada) 'barajo sobre la lista bajada anteriormente, para no repetir posicion
For a = 0 To lista.Max
TextLabel1.text &= listaBarajada[a] & "<br>"
Next


End

El resultado seria:


Código fuente completo: enlace a google drive

En un próximo post, os presentaré un juego que hace uso de este algoritmo.

Fuentes:
http://joedicastro.com/algoritmos-shuffle.html