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:



martes, 10 de septiembre de 2019

domingo, 9 de junio de 2019

SoloLinux: Blog, Revista y mucho más sobre linux

SoloLinux: Blog,  Revista y mucho más sobre linux 

En un canal de telegran encontré esta web, que no conocía, os dejo varios enlaces interesantes:


Revista Digital: https://www.sololinux.es/revista-digital-magazine/





Saludos !!



viernes, 7 de junio de 2019

Instalar WINE en Linux Mint 19 XFCE4 Correctamente


Instalar WINE en Linux Mint 19 XFCE4 Correctamente


Actualice hace tiempo  linux mint 19, y hoy me ha hecho falta usar wine. Me dio problemas instalarlo normalmente, y entonces encontré este video de Cesar donde explica como hacerlo:



Estos son los comandos:

sudo dpkg --add-architecture i386
wget -nc https://dl.winehq.org/wine-builds/Release.key 
sudo apt-key add Release.key 
sudo apt-add-repository 'deb https://dl.winehq.org/wine-builds/ubuntu/ bionic main' 
sudo apt-get update 
sudo apt-get install --install-recommends winehq-stable


Gracias Cesar !!!

domingo, 2 de junio de 2019

Qgis: Añadiendo limites provinciales.



Qgis: Añadiendo limites provinciales.


Partiendo del ejemplo anterior de informes de estadios de fútbol, le voy a añadir al plano de localización, los límites de las provincias y el nombre de la provincia.
La información de las provincias la podemos sacar del siguiente enlace
Vamos a incorporar el archivo Provincias_ETRS89_30N.shp a nuestro proyecto, con "coger y soltar" desde el navegador de archivos a la leyenda.
Nos encontramos dos problemas:
1) El color de la nueva capa, al ser sólido, tapa las capas que estén debajo de ella.
2) Los caracteres acentuados no salen.

El el siguiente video os explico como se resuelven estos problemas:





Fuentes:
https://www.arcgis.com/home/item.html?id=83d81d9336c745fd839465beab885ab7
https://www.blogsig.com/2018/03/qgis-no-me-reconoce-acentos.html

Donde guardo enlaces de interes sobre Qgis:
https://start.me/p/1kwjXL/qgis-tutos

domingo, 26 de mayo de 2019

Qgis 3.xx: Tutoriales sobre como crear informes: Ejemplo Estadios de Futbol

Qgis: Tutoriales sobre como crear informes: Ejemplo Estadios de Futbol

He creado una serie de tutoriales para explicaros como crear informes en Qgis a partir de la versión 3.xx.


Nota:
Enlace a los datos y archivos de qgis del ejemplo completo:

Lista de Reproducción: (7 videos)

https://www.youtube.com/playlist?list=PLY1AHIjJwXVEwwTbKIrk83A_0JyTqTIyz

Uno a Uno...

QGIS: Tutorial Como Hacer Informes 1 Presentación
Os enseño el resultado final que vamos a obtener.




QGIS: Tutorial Como Hacer Informes 2 Datos de Ejemplo Estadios de Futbol
Los datos que vamos a usar.




QGIS: Tutorial Como Hacer Informes 3 Empezamos



QGIS: Tutorial Como Hacer Informes 4: Agregamos un MAPA LOCALIZACION
Creamos un pequeño mapa para indicar la localización del mapa principal.




QGIS: Tutorial Como Hacer Informes 5 Mostramos datos en el informe
Vamos a ver como se insertar  los datos (por ejemplo nombre del estacio, nº de espectadores), en los mapas generados.
 


QGIS: Tutorial Como Hacer Informes 6 ImagenesComo añadir imágenes relacionadas con el mapa. La base de datos tiene un campo en cada registro, donde se indica la ruta donde esta la imagen.



QGIS: Tutorial Como Hacer Informes 7 Detalles finales: Escalas, Marcadores, Marcos...
Vamos a añadir una escala enlazada con cada mapa representado, definir bordes,  añadir una imagen tipo "logo" y poner una figura (una elipse) en el centro del mapa.





Espero que os sea útil. Saludos !!!


domingo, 12 de mayo de 2019

ebay: un ticket regalo de 5 euros y Raton Game por 0.69 €


5500DPI 7 botones LED USB con cable Ratón para juegos Gamer / PC/Mac OS

Ebay: un ticket regalo de 5 euros...  y Ratón Game por 0.69 €

Todo el mundo habla de amazon... pero también existe..... ebay.



De vez en cuando, ebay  regala descuentos y ticket de regalos a sus clientes (que hayan hecho compras hace tiempo o que sean muy habituales, no importa), y hace un mes me regalaron un ticket de 5 euros.

Estuve buscando un ratón para jubilar el que tenia que estaba "echo polvo", y encontré una oferta de un ratón game por 5.69 euros. (sin marca y genérico, ¡¡¡ ojo !!!), pero la tienda aceptaba paypal cosa buena.

Me tardaba un mes (me lo traían de  Hong Kong) y los portes estaban incluidos en el precio... con la oferta que me daban, se me quedaba en 0.69 euros, aunque me tardaba casi un mes me merecía esperar...(los ratones "normales" están sobre 6 euros  en tienda).


Me llegó, y ya lo tengo conectado y funciona perfectamente, y por supuesto, también  con GNU/LINUX !!! (en mi caso Linux Mint)

Os dejo un vídeo para que lo podáis ver:







Extra GNU/LINUX con ratones game!!: Configurar  ratones con varios botones en linux:
https://robustiana.com/297-configurar-todos-los-botones-adicionales-de-mi-mouse-en-ubuntu


Enlace ebay:
https://www.ebay.es/itm/5500DPI-7-botones-LED-USB-con-cable-Rat%C3%B3n-para-juegos-Gamer-PC-Mac-OS/264200631170?ssPageName=STRK%3AMEBIDX%3AIT&_trksid=p2060353.m2749.l2649




Características:
Botones: 7 botones con rueda de desplazamiento.
Sistemas de seguimiento: ópticos.
El DPI máximo: 5500DPI.
Interruptor de DPI ajustable: 1000DPI / 1600DPI / 2400DPI / 3200DPI / 5500DPI;
Rueda de desplazamiento ultra-precisa.
La tecnología óptica funciona en la mayoría de las superficies.
Diseño ergonómico, uso a largo plazo sin fatiga.
Conectividad inteligente, sin necesidad de codificar, plug & play.
Hierro de peso incorporado, se siente cómodo, móvil y estabilidad.
Cambio de vida: 5 millones de ciclos.
Tamaño: 127 (L) x 85 (W) x 37 (H) mm.
Peso: alrededor de 140g.
Compatible con Windows XP, Vista, Windows 7, ME, 2000 y Mac OS ... o más reciente. 
                        'y gnu/linux'
Contenido del paquete:
1 X Gaming Mouse (sin paquete al por menor)

sábado, 4 de mayo de 2019

Gambas3.13: nueva versión

Gambas3.13: nueva versión


Hoy he actualizado en mi linux mint, la nueva versión de gambas3 (la 3.13), os dejo las cambios y mejoras que trae (traducido desde google translate):

¿Qué hay de nuevo?
Esta versión corrige algunos errores molestos en Gambas 3.12, y agrega las siguientes características:

Soporte para la traducción automática en el IDE.


  • La compilación JIT ahora se realiza en segundo plano, acelerando el inicio del programa.

  • File.RealPath () para canonizar una ruta, eliminando todos sus enlaces simbólicos.

  • Array.SortUsing () para ordenar una matriz usando un orden definido por otra matriz.

  • Array.Shuffle () para mezclar aleatoriamente el contenido de una matriz.

  • TimeBox, un nuevo control para introducir duraciones.

  • Mejoras en el componente gb.map.

  • Mejoras en el componente gb.media


Recopilación e instalación
Lea las instrucciones  aqui

Si todo estaba bien, escriba "gambas3" para ejecutar el entorno de desarrollo.

Disfrútala !

Registro de cambios
CONFIGURACIÓN

  • No reinicie CFLAGS o CXXFLAGS para que uno pueda sobrescribirlos.

  • Ahora que el compilador genera automáticamente los archivos * .mo, no los coloque en el repositorio git.

  • Ponga gbh3 de nuevo en el repositorio git.

  • Añadir atribución de algoritmo borroso.

  • Deshazte de muchas advertencias gcc.


ENTORNO DE DESARROLLO
Editor de código

  • El color de fondo del error o la información sobre herramientas del reloj ahora se fusiona explícitamente con el color de fondo predeterminado del tema.


  • La fuente del método emergente (popup) se dimensiona de acuerdo con el número de métodos a mostrar.


Formato de código

  • La opción de formato al cargar y guardar ahora marca los archivos como modificados, de modo que la búsqueda no se vuelva tonta.

  • El editor de texto ahora tiene en cuenta la opción de formato al cargar y guardar, no solo el editor de código.

  • Ignora los archivos nulos ahora.


Editor de base de datos

  • Mostrar la duración de las solicitudes personalizadas es el editor de solicitudes.
  • El editor de solicitudes ahora envuelve su contenido.


Editor de formularios

  • El diálogo para editar la propiedad de texto ahora muestra el nombre de la propiedad del editor en su título.


Navegador de ayuda

  • Al abrir el navegador de ayuda desde el cuadro de diálogo de bienvenida, no se bloqueará más si el panel izquierdo está visible.



  • Fijar los contenidos del panel izquierdo.


Editor de imagen

  • No se bloquee cuando utilice la herramienta de borrado mientras presiona la tecla MAYÚS.


Diálogo de opciones
Soporte para la traducción automática basada en la herramienta translate-shell


  • Añadir nuevos fragmentos.



  • Mostrar fragmentos personalizados en negrita.



  • Corregir el espaciado de algunas opciones en la pestaña Proyecto.


Empacador

  • Ya no crea un componente con un nombre que tenga un punto inicial.



  • Arreglar la generación de paquetes slackware.


Diálogo de propiedades del proyecto

  • Use iconos personalizados para las casillas de verificación de la pestaña de componentes, ya que algunos estilos no pueden dibujarlos correctamente.



  • Agregue GB_NO_JIT como variable de entorno predefinida.



  1. La tabla de variables de entorno ahora cambia automáticamente el tamaño de sus columnas.


Diálogo de búsqueda

  • El resaltado de texto ahora funciona correctamente, sea cual sea la fuente del editor.

  • Hazlo más grande para las etiquetas largas de la casilla de verificación.


Editor de texto

  • Algunas correcciones en la compresión javascript.


Diálogo de traducción

  • Mueva los botones relacionados con la traducción actual a sus propias barras de herramientas juste sobre el campo de traducción.
  • Agrega dos botones para moverte entre las cadenas traducidas.
  • Soporte para la traducción automática basada en la herramienta translate-shell.
  • Eliminar una traducción correctamente lo elimina del cuadro combinado de traducción.


Diálogo de bienvenida

  • Utilice el nuevo icono en lugar del antiguo.


Diverso

  • Actualizar la traducción al italiano.
  • Actualizar la traducción al francés.
  • Actualizar la traducción al español.
  • Actualizar la traducción al holandés.
  • Actualización de soporte financiero.
  • No vuelva a llamar a msgfmt, esto lo hace automáticamente el compilador ahora.
  • Marque algunas cadenas en las formas para no ser traducidas.


EJEMPLOS
Corregir imagen dañada en el ejemplo BeastScroll.

WIKI

  • Actualizar la traducción al francés.
  • Soporte para archivos de video webm.
  • Soporte para juegos integrados.
  • El título de la página ahora comienza con la ruta de la página.
  • Actualizar la traducción al holandés.


FABRICANTE DE SITIO WEB

  • Actualizar la traducción al holandés.



INTERPRETE

  • InStr () y RInstr () vuelven a funcionar correctamente cuando se ignora el caso y la longitud del patrón es de al menos dos caracteres.


Agregue una API para saber si existe un componente nativo en el disco.

Arreglar la optimización del bucle que no funcionó en los bucles llamándose a sí mismos de forma recursiva.


  • Cuidar los componentes que modifican la variable ambiental. Usar gb.httpd ya no falla.



  • Crea el camino "./" equivalente a "." como antes, y no un prefijo para un componente con un nombre nulo.



  • Permitir un dígito decimal más en constantes numéricas de punto flotante.



  • Ignore los ceros finales en la parte decimal de las constantes numéricas de punto flotante. Puede introducir diferencias de redondeo.



  • No se bloquee si un componente usa NULL como argumento de mensaje de error. Reemplácelo por una cadena vacía.



  • Corregir cadena a rutina de conversión de punto flotante.



  • Asigne las variables de entorno de idioma personalizadas de forma estática, ya que las rutinas de salida de la biblioteca acceden al entorno una vez que se han liberado las asignaciones de memoria del intérprete.


Defina una nueva constante de límite, que es la longitud máxima de la variable System.Language. Es de 16 bytes.


  • File.RealPath () es un nuevo método estático que devuelve el nombre de ruta absoluta canonicalizado de la ruta especificada, sin enlaces simbólicos dentro.



  • String.Code () ahora devuelve -1 en una cadena UTF-8 incorrecta.



  • Array.SortUsing () es un nuevo método que ordena una matriz de acuerdo con el orden de clasificación definido por otra matriz.



  • String.Right () ya no falla en cadenas UTF-8 no válidas.



  • Agregue el método Sort () a las matrices de variantes.



  • La compilación JIT ahora se ejecuta en dos pasos.



  • Los monitores de descriptor de archivos activos y los temporizadores activos ahora se transfieren automáticamente al componente que declara un bucle de eventos personalizado. En consecuencia, un proceso iniciado antes de la declaración del bucle de evento tendrá su señal de terminación correctamente capturada.



  • Utilice waitpid () en lugar de wait4 ().



  • Array.Shuffle () es un nuevo método que baraja aleatoriamente una matriz utilizando el algoritmo de Fisher-Yates.



  • El compilador JIT ya no ejecuta inicializadores estáticos al cargar una clase. De lo contrario, el código de bytes puede modificarse antes de compilarse, lo que lleva a un bloqueo del compilador JIT.



  • Arreglar Url $ () caracteres de escape.


COMPILADOR

  • Si se especifica la opción -t, el compilador ahora llama automáticamente a msgfmt para compilar los archivos de traducción si es necesario.



  • Las advertencias de funciones no utilizadas ahora apuntan al comienzo de la función.



  • Genere un error si no hay suficientes ranuras locales para las estructuras de control.



  • ASSERT ... PRINT o ERROR permite utilizar PRINT o ERROR para imprimir un mensaje cuando falla la afirmación.



  • Arreglar la meta-información de la subrutina LOCK.


ESCRITOR

  • Scripter ahora compila el contenido de los argumentos en modo en línea (-e).


GB.ARGS

  • Actualizar la traducción al italiano.



  • Actualizar la traducción al holandés.


GB.COMPLEX

  • Optimizar la división, gracias a Cedron Dawg.


GB.DB

  • Connection.GetTemplate () y Connection.ApplyTemplate () ahora tienen en cuenta correctamente las tablas sin clave principal.


GB.DB.FORM

  • Actualizar la traducción al italiano.



  • Actualizar la traducción al holandés.


GB.EVAL

  • Formato de código: el operador unario menos ahora está pegado a su argumento.


GB.EVAL.HIGHLIGHT

  • TextHighlighter: Paint () es un nuevo método que pinta el texto resaltado.


GB.FORM

  • Actualizar la traducción al italiano.
  • Actualizar la traducción al holandés.
  • Panel de herramientas: ya no se bloquea.
  • Spinner: active el temporizador del spinner solo si es necesario, y no de forma permanente.
  • TimeBox es un nuevo control que permite ingresar una duración. Tal vez el nombre del control no sea muy bueno.
  • URLLabel: Reescribe el control como un hijo de Label.
  • FileView: A veces el contenido no se actualizó correctamente.


GB.FORM.DIALOG

  • Actualizar la traducción al italiano.
  • Actualizar la traducción al holandés.


GB.FORM.EDITOR

  • TextEditor: ingresando un delimitador de cadena mientras el texto está seleccionado correctamente, lo encierra nuevamente.



  • TextEditor: La sombra interior ahora cubre el margen.


GB.FORM.MDI

  • Actualizar la traducción al italiano.



  • Área de trabajo: a veces, el cierre de una pestaña con el botón central se activa dos veces, lo que provoca un bloqueo. Hizo una solución.



  • Área de trabajo: agregue la propiedad CloseButton que permite eliminar el botón de cierre global.


GB.FORM.STOCK

  • Arregla algunos íconos.


GB.FORM.TERMINAL

  • TerminalView: Implementar secuencia ESC <N> b.



  • TerminalView: la altura mínima de la pantalla ahora es de 2 líneas.


GB.GTK

  • No propague eventos de la rueda del mouse de ComboBox, TextArea, Slider y ScrollBar, como en los componentes Qt.



  • Ventana: Windows sin ningún control secundario activo atrapa correctamente los eventos del teclado ahora.


Declare el último gancho del bucle de eventos para que los observadores de descriptores de archivos activos y la transferencia activa se transfieran automáticamente.

GB.GTK3
No propague eventos de la rueda del mouse de ComboBox, TextArea, Slider y ScrollBar, como en los componentes Qt.

TabStrip: las etiquetas de la pestaña ahora se muestran correctamente cuando la pestaña no tiene un icono.

Hacer compilar componente con versión GTK + <3.20.

Ventana: Windows sin ningún control secundario activo atrapa correctamente los eventos del teclado ahora.


  • Declare el último gancho del bucle de eventos para que los observadores de descriptores de archivos activos y la transferencia activa se transfieran automáticamente.


GB.GUI
Tenga en cuenta los otros componentes de la GUI solicitados para elegir el kit de herramientas.

GB.GUI.BASE

  • Paint: agregue un método oculto no documentado que calcula el ancho de caracteres de una fuente fija.


  • SpinBox: Alignment es una nueva propiedad que permite definir la alineación del texto interno del control.
  • SpinBox: ShowZero es una nueva propiedad que le dice a rellenar el número mostrado con ceros.
  • SpinBox: Limit es un nuevo evento que se genera cuando el usuario intenta pasar el valor máximo o antes del valor mínimo.
  • SpinBox: el siguiente uso del mouse siempre tiene en cuenta el valor ingresado con el teclado.
  • ScrollArea: La sombra es más suave ahora.
  • GridView: hacer que el color seleccionado sea menos transparente.


GB.GUI.QT

  • Tenga en cuenta los otros componentes de la GUI solicitados para elegir el kit de herramientas.


GB.INOTIFY

  • Ver: Eventos [] restablece incorrectamente eventos fuera del conjunto de eventos dado e ignoró el valor asignado.


GB.JIT

  • No utilice la declaración inicial de bucle en el código C generado para las versiones anteriores de gcc.
  • Corrija el valor predeterminado de los argumentos opcionales de la función Object.
  • Soporte para compilador tcc.
  • Arreglar la instrucción de depuración.
  • Soporte para la nueva instrucción Assert.
  • Ejecutar la compilación JIT en el fondo.


  • JIT.Debug es una nueva propiedad que permite habilitar mensajes de depuración JIT en tiempo de ejecución.
  • No muestre el mensaje de depuración del aborto si no hay una compilación para anular.
  • Las variables de objeto se gestionan correctamente ahora.
  • DO ... LOOP y REPEAT ... UNTIL al principio de la función ahora se compila correctamente en todos los casos.


GB.MAP

  • MapView: el mapa ahora se encuentra correctamente debajo del cursor del mouse cuando se aleja.
  • Los elementos del círculo ahora tienen el buen radio.
  • MapPoint.Distance () ahora es una función pública estática.
  • Map.Proxy es una nueva propiedad que permite definir el proxy utilizado por todas las solicitudes HTTP realizadas para recuperar los mosaicos del mapa.
  • GetShape (), GetTile (), Remove () y Exists () son nuevos métodos para manipular capas de mapa.
  • DefaultCache es una nueva propiedad para establecer la ruta de la memoria caché predeterminada en otro lugar desde la Página principal del usuario.
  • GetItem es un nuevo método para manipular elementos de forma dentro de una capa de forma.
  • GetCenter hecho estático en MapPoint.
  • LineStyle es una nueva propiedad para los elementos de Shape Layer.
  • Se agregaron algunos comentarios de ayuda en línea sobre varios métodos y propiedades.
  • Ahora se pueden mover los círculos cambiando su propiedad del Centro.
  • Los círculos ahora pueden tener colores de relleno que no sean los predeterminados de Shape.
  • El icono del elemento ahora está centrado, si no es el predeterminado.
  • El icono del elemento ahora puede ser coloreado, si no es el predeterminado.
  • Mejor manejo de la opacidad de la capa.
  • Mejor manejo de ZoomOut.
  • Uso de FAST en clase MapPoint y módulo Geo.


GB.MEDIA

  • MediaPipeline: Pos es un nuevo sinónimo para la propiedad Posición.
  • MediaPipeline: Position es un nuevo evento que se genera cuando la posición de los medios ha cambiado.
  • MediaPipeline: Seek () es un nuevo método que permite mover los medios a una posición específica mientras especifica las banderas de búsqueda de GStreamer.
  • MediaPipeline: Speed ​​es una nueva propiedad que permite definir la velocidad de reproducción de los medios. Una velocidad negativa se jugará hacia atrás.
  • MediaPipeline: Forward () es un nuevo método que permite avanzar una cantidad específica de cuadros. Mover hacia atrás no funciona en este momento.
  • Medios: Agregar las constantes de búsqueda MediaPipeline.Seek ().


GB.MEDIA.FORM

  • MediaView: Combina el botón de reproducción y pausa.
  • MediaView: Eliminar el símbolo de pausa grande blanco.
  • MediaView: Speed ​​es una nueva propiedad que permite definir la velocidad de reproducción de los medios.
  • MediaView: Cambiar el tamaño del control mientras el medio está en pausa, redimensiona correctamente el marco mostrado.


GB.NET

  • UdpSocket: declaración de la clase Fix.
  • UdpSocket: Host es una nueva propiedad que permite definir la dirección IP a la que se enlazará el socket UDP.
  • El método SerialPort: Open () ahora genera errores más detallados.
  • SerialPort: Soporte para cualquier velocidad de puerto en Linux.


GB.NET.CURL

  • Curl.DefaultProxy es una nueva propiedad que permite definir el proxy predeterminado de todos los objetos HttpClient recién creados.


GB.NET.PO3

  • Actualizar la traducción al holandés.


GB.PDF

  • Reemplace Guint por uint, de lo contrario, el componente parece que ya no se compila en algunos sistemas.


  • Hacer gb.pdf compilar con poppler 0.72.


GB.REPORT

  • Actualizar la traducción al holandés.


GB.REPORT2

  • Actualizar la traducción al holandés.


GB.QT4

  • Declare el último gancho del bucle de eventos para que los observadores de descriptores de archivos activos y la transferencia activa se transfieran automáticamente.


GB.QT5

  • Declare el último gancho del bucle de eventos para que los observadores de descriptores de archivos activos y la transferencia activa se transfieran automáticamente.


GB.REPORT2

  • Actualizar la traducción al italiano.
  • Agregue el requisito para gb.eval en la información del componente y cárguelo explícitamente.


GB.SDL2

  • El argumento de opacidad Draw.Image () funciona como se espera ahora.
  • Fuente [] ahora asume un tamaño predeterminado de 10 puntos, por lo que no tiene que especificar el tamaño de fuente al crear el objeto Fuente.
  • No se bloquee al dibujar cadenas estáticas de un carácter.


GB.TERM.FORM

  • Actualizar la traducción al holandés.


GB.UTIL

  • Permitir recuperar la zona horaria de Date.FromRFC822 ().
  • Propague los errores internos de Date.FromRFC822 () en lugar de seguirlos con un bloque Catch.
  • Mejore el mensaje de error de Date.GetRFC822Zone () al mostrar lo que no se pudo reconocer como una zona horaria.
  • Agregue Date.FromUTC () como inverso a Date.ToUTC ().
  • Solucione el error de la zona horaria en Date.FromRFC822 () y pase todas las pruebas.


GB.UTIL.WEB

  • URL es ahora una clase dinámica que puede usarse para analizar y modificar el contenido de una URL.



  • URLQuery es una nueva clase que representa la parte de consulta de una URL.


GB.WEB

  • Normalice correctamente los nombres de los archivos de sesión de SQLite.


GB.WEB.FEED

  • Actualizar la traducción al holandés.
  • Introduzca la clase RssDate para el manejo de la fecha y la zona horaria y la documentación de actualización.
  • RssGuid: no establezca IsPermaLink de forma predeterminada al analizar.
  • Marque el componente como "estable".
  • Dependa de gb.util para conversiones de fecha RFC822.


GB.WEB.FORM

  • Actualizar la traducción al italiano.
  • Actualizar la traducción al holandés.
  • WebTextArea: La propiedad de texto funciona correctamente de nuevo.


GB.XML

  • La declaración de <! DOCTYPE> ahora no distingue entre mayúsculas y minúsculas.



Fuente original:
http://gambas.sourceforge.net/en/main.html

jueves, 18 de abril de 2019

Organizacion automatica ventanas con wmctrl y gambas3


Organización automatica ventanas con wmctrl y gambas3

Usualmente uso varias ventanas de chrome abiertas, y necesito muchas veces tener abierta 2 ventanas organizadas horizontalmente en la pantalla. He usado mucho tiempo el programa X-tile, pero se me hacia un poco tedioso usarlo, para hacer lo que necesitaba. Buscando por la web, encontre el comando wmctrl, y un ejemplo de uso, y lo he modificado para  hacer más sencillo y directo lo que quiero. Os dejo un video de su funcionamiento y su codigo fuente e instalador por si lo quereis usar o modificar para vuestros usos.




'CODIGO FUENTE (VER ARCHIVO EN ENLACE DE DESCARGA: alojado en google drive)

Cógido principal, donde se puede ver como se usa el comando wmctrl:
' Gambas module file
Public Sub Main()
    Dim listaVentanas As String[]
    Dim codigo As String
    'detecto ventanas con Coogle chrome
    Shell "wmctrl -l | grep \"Google Chrome\" | awk '{print  $1}'" To codigo
    Print codigo
    listaVentanas = Split(codigo, "\n")
    If listaVentanas.count > 2 Then
        listaVentanas.Pop() 'quito ultima linea
    Else
        Return
    Endif
    Shell "wmctrl -v -i -r " & listaVentanas[0] & " -e '0,0,0,1280,500'"
    Shell "wmctrl -i -a " & listaVentanas[0]
    Shell "wmctrl -v -i -r " & listaVentanas[1] & " -e '0,0,520,1280,500'"
    Shell "wmctrl -i -a " & listaVentanas[1]
End


Enlaces Interesantes:
https://www.enmimaquinafunciona.com/pregunta/51638/como-utilizo-wmctrl-y-linea-de-comandos-para-hacer-una-ventana-mas-grande-que-la-pantalla-para-obtener-una-captura-de-pantalla-enorme




sábado, 13 de abril de 2019

maratón linuxero: próximo 20 de abril


maratón linuxero: próximo 20 de abril

WEB: https://maratonlinuxero.org





No te olvides que dentro de una semana tenemos una nueva emisión de #MaratonLinuxero conmemorativa del #FLISOL2019. El sábado 20 a partir de las 21:00 (UTC) anímate y participa: preguntas a los Organizadores Nacionales, sorteos y mucho más. @maratonlinuxero

#CompartiendoLibertad


Mastodon:
https://mastodon.social/@maratonlinuxero/101915078055804290

Twitter:
https://twitter.com/maratonlinuxero/status/1116799091076415492

Facebook:
https://www.facebook.com/maraton.linuxero.7





Fuente: 
Canal de telegram: https://t.me/maratonlinuxero










PintaScreen 0.76: Nueva Versión para gambas3.12


PintaScreen 0.76: Nueva Versión para gambas3.12

Tras ejecutar hoy pintascreen en mi ordenador y al intentar añadir una chincheta a una captura del escritorio, me salia el siguiente error:


Revisando el código, me he dado cuenta que con la nueva versión de gambas3.12, había un problema en el código al definir una variable del mismo nombre en dos sitios distintos (en la clase padre y en la hija-heredera)... total que lo he resuelto y ya tenéis disponible la nueva versión corregida en el siguiente enlace:


Para saber más sobre este proyecto de softwarelibre:

Página del proyecto: http://pintascreen.blogspot.com/

Nota:
En la página de descarga del proyecto, os lleva a un directorio de google drive, donde tengo varias versiones, la última versión esta en la carpeta "versión PLUS gambas3.10" y dentro de ellas podeis ver tanto el codigo fuente como el instalador .deb






LibreOffice Calc: Activar / Desactivar el recalculo automático

Tips: Libre Office - Calc


Para Activar o desactivar (sobre todo en hojas grandes y que haya que meter muchos datos antes de calcularlos), podéis ver esta opción en el menú:
Datos / Calcular / Cálculo Automático

También con la tecla F9 podeis recalcular en cualquier momento.




Saludos !!

sábado, 30 de marzo de 2019

Tablas dinámicas en Python con Pandas

Tablas dinámicas en Python

con Pandas




Una de las cosa más útiles que he encontrado en las hojas de cálculo (llámese EXCEL o LIBREOFFICE CALC), son las tablas dinámicas para el tratamiento masivo de datos. Podemos resúmenes y analizar los datos que tenemos, para llegar a conclusiones y extraer la información que nos sea necesaria.

¿pero se puede prescindir de hojas de cálculo, y hacerlo mismo mediante un lenguaje de programación? La respuesta es SI, y en Python tenemos la libreria PANDAS, que nos permite hacer lo mismo.

A continuación os dejo un ejemplo con varios comentarios y "trucos" que yo he encontrado sobre el ejemplo original (os dejo al final de este articulo la referencia a la fuente original).

Ejemplo:
Tenemos un conjunto de datos sobre paises, continentes, población esperanza de vida, continente, etc... y necesitamos obtener varios datos:
1) esperanza de vida media por continente
2) esperanza de vida media por pais
3) esperanza de vida media por año y continente
4) esperanza de vida por año, continente, y agregando funcion  minima y maxima.

Solución:
0) Lo primero que tenemos que hacer es cargar la libreria pandas desde nuestro programa (o consola de python):

import pandas as pd

Una vez hecho esto, vamos a crear una variable que contenga la ruta de los datos.  En el ejemplo original, lo datos están alojados en en una dirección de internet:

data_url='https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv'
 Nota:
 El archivo esta en internet (en https://github.com/resbaz/r-novice-gapminder-files/blob/master/data/gapminder-FiveYearData.csv) , pero podemos descargarlo a nuestro ordenador en modo "raw", por ejemplo usando el comando wget
wget https://raw.githubusercontent.com/resbaz/r-novice-gapminder-files/master/data/gapminder-FiveYearData.csv 
 y cambiar la ruta apuntando al lugar donde lo hemos descargado
data_url='/home/nombre_usuario/Descargas/gapminder-FiveYearData.csv'
Y ahora lo leemos:

datos=pd.read_csv(data_url) 

Podemos ver los datos leidos,  usando el comando print:
print(datos.head(5))
Salida generada (las 5 primeras filas del archivo):



Ahora vamos a los puntos a resolver:
1)  esperanza de vida media por continente
Para ello  hacemos un subconjunto de datos, con las columnas cotinent y lifeExp
subdatos=datos[['continent','lifeExp']]

y creamos una variable con el resultado de la tabla dinamica:

tabla=pd.pivot_table(subdatos , values = 'lifeExp' , columns='continent')

y mostramos el resultado de esa tabla dinamica:

print(tabla)


El resultado seria:


2) esperanza de vida media por pais

Para ello  hacemos un subconjunto de datos, con las columnas country y lifeExp
subdatos=datos[['country','lifeExp']]

y creamos una variable con el resultado de la tabla dinamica:

tabla=pd.pivot_table(subdatos , values = 'lifeExp' , columns='country')

y mostramos el resultado de esa tabla dinamica:

print(tabla)

El resultado seria:
 country
Afghanistan                 37.478833
Albania                     68.432917
Algeria                     59.030167
Angola                      37.883500
Argentina                   69.060417
Australia                   74.662917
Austria                     73.103250
Bahrain                     65.605667
Bangladesh                  49.834083
Belgium                     73.641750
Benin                       48.779917
Bolivia                     52.504583
Bosnia and Herzegovina      67.707833
Botswana                    54.597500
Brazil                      62.239500
Bulgaria                    69.743750
Burkina Faso                44.694000
........ 
3) esperanza de vida media por año y continente
subdatos=datos[['continent','year','lifeExp']]
tabla=pd.pivot_table(subdatos , values = 'lifeExp' , index=['year'], columns='continent')
print(tabla)
El resultado:


4) esperanza de vida por año, continente, y agregando funcion  minima y maxima


subdatos=datos[['continent','year','lifeExp']]
tabla=pd.pivot_table(subdatos , values = 'lifeExp' , index=['year'], columns='continent', aggfunc = [min,max])
print(tabla)

El resultado por pantalla seria:
              min                                      max                   \
continent  Africa Americas    Asia  Europe Oceania  Africa Americas    Asia   
year                                                                          
1952       30.000   37.579  28.801  43.585  69.120  52.724   68.750  65.390   
1957       31.570   40.696  30.332  48.079  70.260  58.089   69.960  67.840   
1962       32.767   43.428  31.997  52.098  70.930  60.246   71.300  69.390   
1967       34.113   45.032  34.020  54.336  71.100  61.557   72.130  71.430   
1972       35.400   46.714  36.088  57.005  71.890  64.274   72.880  73.420   
1977       36.788   49.923  31.220  59.507  72.220  67.064   74.210  75.380   
1982       38.445   51.461  39.854  61.036  73.840  69.885   75.760  77.110   
1987       39.906   53.636  40.822  63.108  74.320  71.913   76.860  78.670   
1992       23.599   55.089  41.674  66.146  76.330  73.615   77.950  79.360   
1997       36.087   56.671  41.763  68.835  77.550  74.772   78.610  80.690   
2002       39.193   58.137  42.129  70.845  79.110  75.744   79.770  82.000   
2007       39.613   60.916  43.828  71.777  80.204  76.442   80.653  82.603   

                           
continent  Europe Oceania  
year                       
1952       72.670  69.390  
1957       73.470  70.330  
1962       73.680  71.240  
1967       74.160  71.520  
1972       74.720  71.930  
1977       76.110  73.490  
1982       76.990  74.740  
1987       77.410  76.320  
1992       78.770  77.560  
1997       79.390  78.830  
2002       80.620  80.370  
2007       81.757  81.235  

'Nota:
Los datos al ser muchas columnas, y sobrepasar el ancho de pantalla los divide al mostrarlo.


Código completo del  ejemplo: alojado en google drive


Fuente Original:
http://cmdlinetips.com/2018/12/pivot-table-in-python-pandas/

Otra pagina interesante:
https://www.analyticslane.com/2018/11/23/tablas-dinamicas-en-python-con-pandas/

jueves, 28 de febrero de 2019

Pasando ejemplo Cochesito de OpenScad a Freecad


Pasando ejemplo Cochesito de OpenScad a Freecad

En el siguiente video explico como usar el codigo de un cochesito hecho en openScad a Freecad usando el banco de trabajo que tiene freecad para ello:







OpenSCAD: ejemplos...


OpenSCAD: ejemplos...



Siguiendo los micro tutoriales de openScad [lista de youtube] y otra lista de la 2º temparada [ lista ]de Juan Gonzalez Gomez, os dejo mis primeras pruebas y códigos:

Mi primer ejemplo de OpenSCAD:
//-- girando    objeto siguiente
rotate([0,0,30])
//-- tralado objeto siguiente
translate([50,0,0])
cube([10,10,10],center=true);

rotate([0,0,45])
cube([20,20,5],center=true);
//-- cubo hola mundo
translate([0,0,35])
cylinder(r=20,h=30,$fn=5);
translate([100,0,0])
cylinder(r=20,h=30,$fn=3);

//--taladro... Diferencia entre dos cilindros:
difference() {
translate([00,100,0])
cylinder(r=20,h=20,$fn=50);
translate([00,100,0])
cylinder(r=4,h=165,$fn=20,center=true);}

//-- union + difference -> rueda porta ejes
difference() {
    union(){
    translate([100,50,0])
    cylinder(r=25,h=5,$fn=10);
 
    translate([100,50,0])
    cylinder(r=15,h=25,$fn=10);
     
    }
translate([100,50,-5])
cylinder(r=10,h=35,$fn=30);
}
//-- parametros !!!
//-- Construccion de la rueda a partir de los parametros
grosor=5;
diametro=25;
diameje=8;
//-- Rueda Simple:
translate([100,100,100])
difference(){
    cylinder(r=diametro/2,h=grosor,$fn=50);
    //taladro de 8 mm:
 
    cylinder(r=diameje/2,h=3*grosor,$fn=20,center=true);
}

Mi segundo ejemplo: usando modulo (o funciones), con valores por defecto...
module RuedaSimple(grosor,diametro,diamEje)
{
    difference(){
        //-- Base de la rueda
        cylinder(r=diametro/2,h=grosor,$fn=100);
        //-Taladro del eje
        cylinder(r=diamEje/2,h=3*grosor,$fn=100,center=true);
         
    }
}
RuedaSimple(10,50,10);

translate([100,0,0])
RuedaSimple(diametro=40,grosor=20,diamEje=10);

translate([-100,0,0])
RuedaSimple(40,20,10);

Fijaos que dependiendo si defino los valores de las variables o los pongo sin definir varia la asignación... (me refiero a poner dentro dde la llamada de la funcion "grosor=")



Mi 3 ejemplo: cochesito
Aqui me encontré con la incidencia de tener que poner la ruta completa del archivo, donde esta el modulo de RuedaSimple definido. También añadí el tema de poner colores de las piezas.

use </home/mint/ModuloRuedaSimple.scad>

//-- Chasis del coche
color("green",0.2)
translate([30,0,10])
cube([100,60,5],center=true);

//rueda delantera
color("blue")
translate([0,-30,0])
rotate([90,0,0])
RuedaSimple(10,50,12);

//rueta trasera (un poco mas ancha)
color("red")
translate([60,-30,0])
rotate([90,0,0])
RuedaSimple(20,50,12);

//- ruedas del otro lado (que son simetricas)
mirror([0,1,0]) {
    color("blue")
    translate([0,-30,0])
    rotate([90,0,0])
    RuedaSimple(10,50,12);
 
    color("red")
    translate([60,-30,0])
    rotate([90,0,0])
    RuedaSimple(20,50,12);
}












miércoles, 27 de febrero de 2019

domingo, 17 de febrero de 2019

Truco: Como cambiar la codificación de caracteres de windows a linux: ISO-8859-1 a UTF-8


Truco:

 Como cambiar la codificación de caracteres de windows a linux: ISO-8859-1 a UTF-8


Origen del problema:
Me descargué un archivo en formato txt de la web, y cuando lo fui a abrir desde libreoffice writer, me aparecían caracteres raros donde debían de ir caracteres acentuados:


¿que ha pasado? ¿por qué ocurre este problema?
Es problema es la codificación ASCII del juego de caracteres que usa Windows (la ISO-8859-1) que es diferente a la usa Linux (la UTF-8).

Nota: ¿como se que juego de caracteres tiene el archivo?
Con el comando file -i nombre_archivo.txt, nos informa del juego de caracteres que usa el fichero:



Varias Soluciones del problema

Solución 1:

He encontrado el comando iconv que realiza la conversión de los archivos codificados de un juego de caracterea a otro. Este sería la forma de convertir un archivo procedente de windows a linux:

iconv -f ISO-8859-1 -t UTF-8 archivo_original.txt > archivo_convertido.txt

fuente:
https://desarrolloweb.com/articulos/convertir-masa-archivos-utf8.html


Solución 2:
Os comento esta, porque fue la primera que encontré y además es muy "visual", y no necesita usar ningún comando. Se trata de abrir el archivo con sublime text, (este programa detecta el juego de caracteres y los muestra correctamente en linux), y luego procedemos a "copiar y pegar" el contenido del archivo en otro programa (por ejemplo en libreoffice) y ya lo tenemos convertido.


Saludos

viernes, 15 de febrero de 2019

EJEMPLOS DE PREGUNTAS PARA UNA SELECCIÓN BASADA EN COMPETENCIAS

EJEMPLOS DE PREGUNTAS PARA UNA SELECCIÓN BASADA EN COMPETENCIAS 

Hay mucha información que será más fácil recopilar a través de la entrevista personal que en un curriculum. Es el caso de las competencias personales del candidato. A continuación se incluyen diferentes ejemplos de preguntas que es posible realizar durante la entrevista, a fin de obtener información de las siguientes competencias:
- Iniciativa- autonomía
- Dinamismo- energía
- Orientación al cliente.
- Capacidad de aprendizaje.
- Productividad.
- Adaptabilidad- flexibilidad.
- Liderazgo.
- Persuasión e influencia.
- Trabajo en equipo.
- Tolerancia a la presión.
- Estabilidad emocional.
- Resolución de problemas.
- Visión de sí mismo.
- Adecuación persona- puesto- empresa.
- Expectativas de desarrollo profesional.
- Motivación frente al nuevo cargo.

Consejo: 
Antes de la entrevista, prepara las posibles respuestas y así no tendrá problemas para  contestar y no quedarte "en blanco".

Iniciativa- autonomía:
- ¿Qué has hecho en tu trabajo actual o pasado para que fuera más gratificante o efectivo? ¿Es éste el logro del que más orgulloso te sientes?
- Dame un ejemplo de una idea o sugerencia que le hayas propuesto a tu superior en los últimos meses. ¿Cómo fue? ¿Cómo la implementaste? ¿Cuáles fueron los resultados?
- ¿En qué ocasiones de tu trabajo actual sientes que tienes que consultar a tu jefe antes de actuar?
- ¿Cuál son las tareas que más te gustan hacer en tu trabajo actual? ¿Y las más aburridas?
- Cuéntame un ejemplo de un proyecto o idea que hayas llevado a cabo a pesar de las limitaciones u oposiciones de algunos compañeros de trabajo. ¿De qué se trataba el proyecto?
- Cuéntame algo que no te pidió nadie que hicieras en su momento y de lo que ahora te arrepientes.
- Cuéntame la última vez que no estuviste de acuerdo con una decisión de tu jefe.

Dinamismo- energía:
- Dame un ejemplo de una tarea o proyecto que te haya demandado un esfuerzo importante durante un largo periodo de tiempo. ¿Cómo la emprendiste? ¿Cuál fue el resultado?
- ¿Cómo se desarrolla un día de trabajo típico? ¿Cuáles son los problemas diarios propios de tu trabajo? ¿Qué haces para resolverlos?
- ¿En qué situaciones laborales has sentido la necesidad de dejar una tarea sin resolver?

Orientación al cliente:
- Define para ti el concepto de atención al cliente.
- ¿De qué forma captas sus necesidades?
- Coméntame un episodio en el que pudiste brindar una óptima respuesta ante las demandas de un cliente.
- Descríbeme una situación en la que has tenido que trabajar duro para satisfacer el pedido de un cliente.
- ¿Qué has hecho para crear relaciones positivas con los clientes con los que interactúas?
- ¿Qué cambiarías de la actual política de tu empresa de atención al cliente?
- ¿Cuál ha sido el último cliente que has perdido? ¿Por qué razón? ¿Qué soluciones pudieron haberse implementado y no se hicieron?
- ¿Qué procedimientos utilizas para evaluar la satisfacción del cliente con respecto a los servicios prestados?
- ¿Recuerdas alguna mejora que has tenido que implementar por una insatisfacción particular de un cliente?
- Cuéntame la última vez que tuviste que convencer a un cliente de que aquello que te estaba solicitando iba en contra de sus propios intereses. ¿Cómo se manejan las objeciones de un
cliente?

Capacidad de aprendizaje: 
- Describe alguna situación laboral en la que te haya costado aprender algo. ¿Dónde residía la dificultad?
- ¿Cómo te mantienes informado de los cambios importantes en tu campo de trabajo?
- ¿Cuáles han sido los problemas a los que has tenido que adaptarte en tu trabajo actual?

Productividad:
- ¿Recuerdas alguna situación donde tu desempeño consideras que no fue todo lo exitoso que te hubiera gustado?
- Describe alguna situación que haya representado un auténtico desafío para ti.
- ¿Cuáles fueron los objetivos asignados para ti el año pasado? ¿Cuál fue el grado de cumplimiento?
- Comenta alguna situación en la que tu desempeño haya sido más alto que el promedio. ¿En base a qué parámetros lo mides? ¿A qué atribuyes el que haya sido así?

Adaptabilidad- flexibilidad
- Supongo que habrás tenido que hacerte cargo de tareas que no eran usuales o propiamente tuyas. ¿Cómo las abordaste?
- En ocasiones las formas de actuar que son buenas en una situación dada dejan de serlo. ¿Te ha ocurrido esto alguna vez? ¿En qué situación?
- ¿Cuáles han sido las situaciones de cambio más importantes a las que te has enfrentado? ¿Qué aprendizaje sacaste de ellas?
- ¿Qué diferencias percibes entre tu anterior empleo y el actual? ¿Qué diferencias hay entre la cultura actual y la anterior? ¿Cómo te adaptaste a ese cambio?
- ¿Cómo te sientes cuando alguien censura alguno de tus comportamientos?

Liderazgo
- ¿En qué condiciones estaba tu equipo antes de que tú lo dirigieras? ¿Qué acciones implantaste para que tu equipo mejorara su desempeño?
- ¿Qué nivel de decisiones delegas en tu equipo y cuáles no?
- ¿Cómo motivas a tus colaboradores? ¿Qué métodos te han resultado ser los mejores?
- ¿Qué te hace ser un buen líder?
- ¿Qué procedimientos utilizas para evaluar a tus colaboradores? ¿Y para evaluar tu propio trabajo?
- ¿Qué estrategias utilizas para hacer que acepen tus ideas u objetivos?
- ¿Con qué frecuencia te reúnes con tus colaboradores? ¿Cómo se preparan esas reuniones?
- Describe una situación en la que has tenido que reprender a alguno de tus colaboradores por falta de rendimiento o porque había hecho algo que no estaba bien ¿Cómo se maneja esa situación?
- Ante una tarea compleja asignada al grupo al que coordinas, ¿Cómo lograste que todos respondieran?
- ¿Has tenido algún subordinado difícil de manejar? ¿Cómo se resolvió ese problema?
- ¿Cuentas con un plan de desarrollo de carrera para tus colaboradores? ¿En qué consiste?
- ¿Cómo detectas sus necesidades?
- Describe a tu jefe ideal.

Persuasión- Influencia
- Cuéntame una ocasión en la que has tenido que ganarte el apoyo de los demás respecto a una idea o recomendación tuya.

Trabajo en equipo
- Descríbeme un logro importante que hayas obtenido siendo miembro de un equipo.
- ¿Cuáles son los aspectos que más valoras cuando trabajas en equipo?
- Cuéntame una situación en la que has tenido que trabajar con unos compañeros o jefe que no eran de tu agrado.
- ¿Con qué grupos o personas te has sentido más cómodo y has rendido mejor?

Tolerancia a la presión
- Describe la situación laboral más tensa que has tenido. ¿Cómo se resolvió?
- ¿Cómo tratas de descargar la presión diaria del trabajo y desconectar?
- Cuéntame alguna situación en la que has tenido que trabajar dentro de límites muy estrictos de tiempo.
- ¿Cuáles son las condiciones labores más frustrantes para tí?
- ¿En qué condiciones laborales trabajas más eficazmente?

Estabilidad emocional
- Describe una situación donde un aspecto personal haya influido en tu rendimiento profesional.
- Cuéntame una situación en la que admitiste públicamente haber cometido un error.

Resolución de problemas 
- Descríbeme una situación en la que te fue difícil cumplir con lo que habías prometido. ¿Cómo se resolvió?
- Cuéntame la última vez que te enfrentaste a una situación difícil y cómo la resolviste.

Visión de sí mismo
- ¿Qué aspectos de tu personalidad son los más valorados por las personas más cercanas a ti y qué otros suelen motivar el enfado de estas?
- ¿Cuáles son tus puntos fuertes y débiles?
- ¿Qué tienes que aprender como profesional? ¿Has tomado medidas para conseguir ese aprendizaje?

Adecuación persona- puesto- empresa
- ¿Cómo describirías tu situación de trabajo ideal?
- ¿Qué aspectos valoras más de una empresa? ¿Qué factores tienen que estar presentes en un puesto de trabajo para que estés motivado?
- ¿Qué impacto tiene la actividad que realizas en los objetivos de tu actual empresa?

Expectativas de desarrollo profesional
- ¿Cuáles son tus objetivos profesionales inmediatos y a largo plazo?


Motivaciones frente al nuevo cargo
- ¿Cuáles son las razones que te llevarían a aceptar este puesto?
- ¿Cuáles son las insatisfacciones de tu empleo actual?
- ¿En cuántos procesos de selección estás participando? ¿Para  qué puestos? ¿Cuál es tu interés por estas ofertas?
- ¿Qué esperas que esta empresa aporte a tu vida? ¿Y qué puedes aportarle tú?

"Es importante recordar que un buen entrevistador nunca pregunta sin saber qué información quiere obtener con esa pregunta.
Igualmente, debemos intentar que la entrevista sea lo más espontánea y natural posible, sin forzar cambios excesivamente bruscos en los temas. A fin de cuentas, lo que queremos es obtener información para tomar una decisión (¿es un candidato apto para el puesto?); por ello, deberemos “facilitar” las cosas al candidato para que pueda darnos información suficiente para tomar una decisión. 



martes, 5 de febrero de 2019

Gambas3: Ejemplo Marquesina

Gambas3: Ejemplo Marquesina


Un pequeño ejemplo hecho en gambas3 de una marquesina desplazándose por un formulario usando un control timer y dos textlabel.





Codigo fuente: alojado en google drive

domingo, 13 de enero de 2019

¿donde buscar extensiones de inkscape?


¿donde buscar extensiones de inkscape?

En la siguiente dirección podrás encontrar cientos de extensiones para inkscape hechas en python.








martes, 1 de enero de 2019

Programa Recortes: Mejoras: guardando capturas en el portapapeles.




Programa Recortes

 Mejoras: guardando capturas en el portapapeles.

Recortes en una aplicación que hice para el comando import (que contiene la suite imagemagick ), que le da un interfaz gráfico este comando y facilita su uso. Hace tiempo que lo hice, y hoy le he añadido una mejora con la que consigo que la captura que realices se guarde también en el portapapeles del sistema, ademas de poderla guardar en un archivo. Algo muy útil si quieres realizar pequeños apuntes, tutoriales o incluso entradas de blog, si no necesitar editarlas (si es así es mejor usar pintascreen ).






Codigo fuente alojadon en github:
https://github.com/jsbsan/recortes