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:



viernes, 31 de enero de 2014

Análisis de Cuotas de Apuestas de la jornada 21 de la Liga futbol

Análisis de Cuotas de Apuestas de la jornada 21 de la Liga futbol 


Bueno, aunque más tarde de lo previsto, os dejo aqui los resultados del analisis (por llamarlo de alguna manera), de los datos de las cuotas de apuestas y los resultados reales que se produjeron en la jornada 21 de la liga de futbol de España:

Resultados de la jornada 21º.




Apuestas del pasado 24/01/2014



Fallos y aciertos en las apuestas:



Como veis hubo 3 partidos donde las cuotas de apuestas no acertaron:
Valladolid - Villarreal, Valencia - Espanyol y Sevilla -Levante.

Si hubiéramos apostado a 1 y 2: el resultado hubiera sido:


Con solo un empate, y con dos apuestas donde ganaron los equipos no previstos, con cuotas muy altas, y por lo tanto con  altos beneficios (8 ,00 y 4,00), se consigue, después de restar a los premios los gastos un beneficio de 3,88 euros.



 Saludos.


Nota:
La única forma de no perder dinero en las apuestas es.... no apostar










martes, 28 de enero de 2014

Liga de Fútbol. Jornada 21 análisis del minuto / gol. Resultados y Estadísticas

Liga de Fútbol

 Jornada 21 análisis del minuto / gol. Resultados y Estadísticas






Resultados:


Minuto Gol:


Victorias:



Clasificación:


Sigue muy igualado los primeros puestos de la clasificación, con victoria de los 4 primeros.

lunes, 27 de enero de 2014

Arduino y Linux: Solución Error: Cannot open serial port (5) Cambio de denominación del puerto Serie en los nuevos modelos.

Arduino y Linux. Solución:

 Error: Cannot open serial port (5) Cambio de denominación del puerto Serie en los nuevos modelos.


Como sabeis, tengo varios ejemplos realizados con Arduino y Gambas.

        Mover dos servomotores
        Ejemplo con pulsadores
      Ejemplo Medición de distancias y decirla en voz alta

El arduino que usaba era el Duemilanova, ahora tengo un nuevo arduino tipo Leonardo.

Bien, pues en los ejemplos, para conectarme al puerto serie del Arduino Duemilanova usaba el nombre de:   /dev/ttyUSB0, y todo funcionaba correctamente


Pero si usais los nuevos modelos, esto os dará un error al ejecutar los programas en gambas:



Para solucionarlo teneis que saber que ahora en los modelos más modernos (por ejemplo el Leonardo), hay que usar  el nombre  /dev/ttyACM0  para el puerto Serie.



Captura del primer ejemplo ejecutandose:



Nota:
Para saber exactamente el nombre del puerto, lo podeis ver en el Ide de Arduino:


Usando el comando lsusb  en la consola os informará si la placa Arduino esta conectada al ordenador:


Con el comando dmesg nos da información del puerto serie (y el nombre)


Ademas, con  sudo chmod a+rw /dev/ttyACM0, daremos permisos a los usuarios para que puedan usarlo.


Para más información:
http://digitalyquetal.blogspot.com.es/2013/08/puerto-serial-arduino-en-linux.html
http://es.wikiversity.org/wiki/Configurando_el_IDE_Arduino

Saludos

jueves, 23 de enero de 2014

Analisis de Cuotas de Apuestas de la jornada 20 de la Liga futbol


Análisis de Cuotas de Apuestas de la jornada 20 de la Liga fútbol




El pasado viernes estas eran la cuotas para la jornada 20º de la primera división española de fútbol:


Tras terminar la jornada , los resultados fueron:


y analizando los resultados con las cuotas, quedan así:



La verdad que ha sido una jornada con muchos empates, con lo cual el sistema que comentábamos la semana pasa de apostar por la victoria del local y por la victoria del visitante, (1 y 2)


, serían un "desastre"....


Otro sistema sería haber apostado  1 o 2 (el de menor cuota) y también al resultado de  Empate, y como en esta jornada, hay muchos empates el resultado es bastante bueno:



Pero claro.... esto visto a toro pasado es fácil decirlo :)

¡¡Quien iba a suponer que iba a empatar el Barcelona y el Atlético de Madrid.....!!!


 Saludos.


Nota:

La única forma de no perder dinero en las apuestas es.... no apostar













miércoles, 22 de enero de 2014

Liga de Fútbol. Jornada 20 análisis del minuto / gol. Resultados y Estadísticas


Liga de Fútbol. 
Jornada 20 análisis del minuto / gol. Resultados y  Estadísticas






Resultados de los partidos de la jornada:


Getafe igualo a un 0-2 contra el Real Sociedad, consiguiendo el empate final 2-2:


Minuto / gol Jornada 20:



Victorias:


Gran cantidad de empates en esta jornada:


Clasificación después de la jornada 20:

A destacar que los empates del Barcelona y del At. Madrid, y la victoria del Real Madrid que hace que las primeras plazas aun se compriman más, y que la liga  esta en un pañuelo...









Fuente:
http://www.superdeporte.es/deportes/futbol/primera-division/clasificacion-liga.html

shield field BE SHIELD para ARDUINO ( escudos / protoboard de montaje de componentes)

 shield field BE SHIELD para ARDUINO

escudos / protoboard  de montaje de componentes



Seguramente os acordareis de las compañas de
Boderless Electronic en Indiegogo:


Están llevando otra acabo, solo de la placa Be Shield:

Las funciones ofrecidas por el SHIELD BE incluye:
  • 16x2 LCD socket Pantalla con control de contraste
  • microSD ( TF) Zócalo de la tarjeta de memoria
  • 5 botones de control que utiliza sólo 1 entrada analógica sola
  • Control directo de un servomotor
  • Circuito del conductor tira del RGB LED capaz de más de 1 A por canal
  • Controlador Ethernet para la conexión a Internet
  • Un expansor de E / S digital que añade 16 canales a la original 14 de un Arduino ™ , un total de 30 canales digitales de entrada / salida disponibles para sus proyectos
Su precio es de 15 $, (el precio incluye porte):



A la campaña solo le quedan 24 horas para terminar, y podéis verla 
y obtener más información en el enlace:




Saludos

domingo, 19 de enero de 2014

Combinar Patrones de Diseño: Ejemplo de aplicación de varios patrones de diseño en un mismo programa: Command y Strategy

Combinar Patrones de Diseño

Ejemplo de aplicación de varios patrones de diseño  (Command y Strategy) en un mismo programa: Organizador de Descargas 

versión 0.0.3




Ayer os en traje un programa para organizar la carpeta de descarga, internamente usaba el patrón Command, para ejecutar las ordenes de las reglas (mover, copiar o borrar).

En el módulo "AplicarComandos", usaba una orden Select Case para, según que orden, crear el comando correspondiente y luego ejecutarlo en una lista:



Bien, este diseño (el uso del Select Case), tiene el siguiente problema:

  • A medida que vayamos a añadir más órdenes ("Comprimir", "Crear Accesos Directos en el Escritorio", etc), vamos a tener que retocar él codigo en esa zona. Rompiendo uno de los principios la programación "SOLID de Open Closed": Nuestro código debería estar abierto a la extensión, pero cerrado a la modificación.  Es decir, que para añadir una nueva funcionalidad, no tengamos la necesidad de modificar los algoritmos que ya están programados.El Patrón strategy, es una alternativa al uso de bloques "switch" ( select case) ya que permite:
  • Que sea fácil mantener y ampliar nuevas funcionalidades
  • Fácil lectura del código

Vamos a aplicar el siguiente esquema, para convertir el Switch (Select Case) del programa al patrón Strategy:

Esta serán nuestras nuevas clases:
Clase InterfaceCrearComando (GuardeStrategy en el esquema):
->

Clase EstrategiaBorrar: (seria la GuardedStrategyA)
->

Clase EstrategiaCopiar:(seria la GuardedStrategyA)
->

Clase EstrategiaMover:(seria la GuardedStrategyA)
->

SwitchStrategyCrearComando:
->

Y ahora en el módulo AplicarComando, habria que hacer 3 cambios:
Añadir una instancia privada de la clase SwitchStrategyCrearComando
->

Añadir una subrutina donde añadiremos las estrategias que existen (estrategiaCopia, estrategiaMover y estrategiaBorrar)
->

Y la zona del select case se sustituye por esta:
->

El resultado de la ejecución del programa es el mismo, pero para realizar futuras ampliaciones ahora resulta mucho más sencillo:




Para añadir un nuevo comando, por ejemplo se haría asi:
1) Crear la nueva clase que hereda de Comando, por ejemplo "Descomprimir", donde definimos su método ejecutar()
2) Crear una nueva clase EstrategiaDescomprimir, donde definimos las propiedades del comando
3) Añadir  en la subrutina GenerarListaEstrategiasCrearComandoDisponibles(), la nueva estrategia:
Dim estrategiaDescomprimirtmp as new EstrategiaDescomprimir
...
SelectorEstrategias.add(EstrategiaDescomprimir)

Y para que el usuario la vea en el formulario, en el Fmain, añadimos al combobox la nueva orden mediante el método add:
ComboBoxAccion.Add(("Deescomprimir"))

Y ya la tenedriamos añadida.

Saludos

Enlace de descarga del archivo de instalación .deb: http://clasificaryordenar.blogspot.com.es/
Enlace de descarga del código fuente: enlace version 0.0.3 (en el blog de clasificaryordenar se puede ver el codigo fuente de la última version)


Nota:
23/01/2014: He realizado un pequeño blog donde esta la información completa del programa y las ultima revisión 0.0.5 http://clasificaryordenar.blogspot.com.es/


Fuentes:
http://www.cin.ufpe.br/~sugarloafplop/final_articles/02_SwitchStrategy%20_Spanish_.pdf
http://programandonet.com/web/patrones-de-diseno-strategy/

sábado, 18 de enero de 2014

Programa Softwarelibre: Clasificador y Organizador de la Carpeta de Descarga




Programa Softwarelibre: Clasificador y Organizador de la Carpeta de Descarga





Cansado de tener la carpeta de Descarga completamente llena de archivos sin organizar, me he hecho un programa para mediante simples reglas se encarge de mover, copiar o borrar los archivos que estén en esa carpeta.

Os dejo unos pantallazos, y al final del post, podeis tener los enlaces de descarga y codigo fuente.




El programa viene con reglas predefinidas




Las reglas se puede editar o borrar, incluso podemos crear nuestras reglas indicando:
  • El Nombre de la regla
  • Extensiones de los archivos a los que se aplica (se pueden poner varias extensiones separadas por ; (punto y coma) )
  • Acción que se aplicará: Copiar / Mover / Borrar
  • Y elegir el directorio donde se va a copiar/mover los archivos




A nivel de programación, es otro ejemplo del uso del patrón Command.


Enlaces de descarga: http://clasificaryordenar.blogspot.com.es


Espero que os sea útil.

Saludos

Julio

Nota:
19/Enero/2014: Mejora en el código interno para que sea más fácil de ampliar el pograma ver el siguiente enlace: http://jsbsan.blogspot.com.es/2014/01/combinar-patrones-de-diseno-ejemplo-de.html

23/01/2014: He realizado un pequeño blog donde esta la información completa del programa y las ultima revisión 0.0.5 http://clasificaryordenar.blogspot.com.es/

viernes, 17 de enero de 2014

Como comparar un ficheros tipo .class de google code de distintas revisiones

Como comparar un fichero tipo .class alojados en Google Code de distintas revisiones




Cuando intentamos ver las diferencias de archivos con extensión .class de un proyecto de Gambas, en google code, no es posible ya que google code los confunde con los bytecode que genera Java, (que también tienen la extensión .class). Esta es la pantalla del error que os comento:

Error al intentar comparar dos archivos .class: Binary files differ

No puede ya que los confunde con binarios de Java... ¿que podemos hacer?

Vamos a usar el servicio web: http://www.mergely.com/, para resolver este inconveniente.

Aparecerá esta pantalla:


Le damos al botón "online diff", y pasamos al editor:


Nos vamos al menu "File" y le damos a "import", y elegimos la pestaña "Import URL", de esta forma le vamos a indicar la url donde están nuestros archivos alojados

Formulario de "import" en la pestaña  "Import Url"
(nota: también podemos comparar archivos de nuestro disco duro, usando la pestaña "Import File")

Ahora debemos saber cual es la url de los ficheros a comparar.  Nos vamos a google code, y vamos a buscar el enlace de la vista en bruto: "View raw file" del fichero y de la revisiones que queremos comparar:



Pulsamos a ese enlace "View raw file" y guardamos la ruta URL:

vista en modo bruto "view raw file" de un fichero del tipo .class en code google
Arriba podeis ver la ruta completa donde esta el fichero:
https://generadorcarnet.googlecode.com/svn-history/r26/trunk/generadorcarnet/.src/Form1.class

Así conseguimos los dos enlaces (del mismo fichero, de distintas revisiones), y los pasamos al formulario de "Import Url"

La revision más antigua (numero de revision menor) la ponemos en la url "left" y la más actual (numero de revisión mayor) en el url "right":
https://generadorcarnet.googlecode.com/svn-history/r26/trunk/generadorcarnet/.src/Form1.class
https://generadorcarnet.googlecode.com/svn-history/r31/trunk/generadorcarnet/.src/Form1.class




Y pulsamos el botón de "Import" del formulario "Import Url", obtenemos la comparación:

Comparando dos archivos alojados en code google
El sombreado azul indica nuevas lineas introducidas, el sombreado rojo las lineas eliminadas.

Y así los podemos comparar y ver las diferencias y cambios introducidos entre el mismo fichero de distinta revisiones

Además, podemos guardar las diff, pulsando en el botón "save diff", que se encarga de descargar un archivo de texto plano con la información.




Saludos

Julio