Trucos sobre manejo de softwarelibre y gnu linux. También a los programas que hago en gambas3, python, java, etc.... Consejos y trucos sobre otros programas: excel, word, internet, instalación de programas, Arduino y demás....
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:
En github, el sitio web que usa git, para la gestión de versiones de software, hay dos formas de colaborar en el desarrollo de un proyecto: a) Subir cambios pero el coordinador del proyecto se encarga de aceptar o rechazar los cambios.
Del proyecto se crea un fork, (una copia del proyecto), que podrás modificar y subir cambios (a tu fork), y cuando lo estimes oportuno, le mandas tus cambios al coordinador del proyecto (Pull Request) , para que este decida si admite los cambios o no y los mezcle con la rama actual.
Esta forma lo he visto explicado en muchos sitios, y es ideal por su facilidad, para proyectos como añadir traducciones a programas. Lo he visto explicado en varias páginas, os dejo los enlaces:
Esta forma es más sencilla, me la explico Tincho (del foro de gambas-es.org) ya que los colaboradores suben sus cambios y se mezclan con el proyecto principal, sin necesidad de que alguien (el coordinador o creador del proyecto), tenga que decidir si se mezclan o aceptan los cambios. Aquí es muy importante, la organización y coordinación de los colaboradores, para evitar que aparezcan problemas de sincronización. Por ejemplo decidir que archivos va a modificar cada uno, (para que no se pisen los cambios). Una herramienta útil para estas conversaciones puede ser https://gitter.im
Estos son los pasos para añadir colaboradores a un proyecto de github:
ir a tu proyecto
ir a la solapa settings
Escribir el nombre del colaborador y cuando lo encuentras le das al botón de agregar.
Nota:
El colaborador, tiene que tener cuenta en github, para que aparezca en la lista de "Collaborators"
Una vez hecho esto, el colaborador recibe un mensaje en la cuenta de correo que tenga asociada a github, para aceptar la colaboración :
y partir de ese momento, le va a aparecer el proyecto en su lista de proyectos, y podrá bajar / subir los cambios como si fuera un proyecto suyo.
Es una forma muy sencilla de sin tener que instalar nada en tu ordenador (lenguajes, librerías , módulos, etc), usar "la nube" un pequeño espacio donde poder programar, y probar las aplicaciones en varios lenguajes de programación, además de poderlos compartirlos con la comunidad.
"Configure su sistema sin ningún tipo de molestia. Sólo tiene que elegir la configuración y el desarrollo de su aplicación. No hay necesidad de gastar tu valioso tiempo de desarrollo de la configuración y mantenimiento del sistema. Puede crear, construir y ejecutar cualquier pila de desarrollo en cuestión de segundos. Nosotros mantenemos y usted controla"
Lenguajes/ Gestores de contenido que admite:
node.js
html5
wordpress
php
Python/Django
Ruby on Rails
C/C++
Rallstuttorial,org
Meteor
StrongLoop
o personalizado (Custom)
Aquí os dejo un ejemplo del curso que estoy siguiendo en Miriada sobre node.js, ejecutándose en el espacio de trabajo:
En esta 2º parte, vamos a ver un método mejor para animar los personajes o fichas en nuestro juego. Para ello vamos a trabajar con la misma imagen "jacinto" que teníamos anteriormente, pero nuestro código (esta vez usando clases), se va a encargar de hacernos el trabajo más fácil. Observar este esquema:
Cada Sprite (o cuadro) que es la pequeña imagen que forma la animación, lo tenemos en una regilla, donde podemos identificarla por el lugar de la fila y columna que ocupa en la imagen completa.
Crearemos las siguientes clases:
imagen: encargada de leer el archivo gráfico, y de dibujar solo el sprite actual (o cuadro indicado)
controlAnimacion: encargada de llevar el contador de la animación, ya que le pasaremos una lista de sprites (o cuadros) que forman la animación, y internamente llevará un contador para saber cual sprite es el actual.
animacion: esta clase contiene a dos objetos, uno tipo imagen y otro controlAnimacion, y funciona como una "fachada" para que el programador no tenga que usar directamente a las clases de más bajo nivel (imagen y controlAnimacion).
Clase:
Imagen
métodos
Parámetros
Descripción
_new()
ruta
indica la ruta donde esta la imagen
filas
indica las filas de sprites que tiene la imagen
columnas
indica las columnas de sprites que tiene la imagen
dibujar()
cuadro
numero que indica el sprite que se tendrá que dibujar
posx
coordenada X donde se dibujará sprite
posy
coordenada Y donde se dibujará el sprite
SpriteAltoAncho()
devuelve el ancho y largo del Sprite (según el numero de filas y columnas)
Usa una variable point, para devolver los valores:
x es el ancho e y es el alto
Clase:
ControlAnimacion
métodos
Parámetros
Descripción
_new()
Frames
cadena de texto, que indica que sprite hace el movimiento: “1,2,3,2”
cuadro()
Devuelve el numero de sprite actual
es_primer_cuadro()
Devuelve Verdadero o falso, si el contador de sprite paso es 0 o no
avanzar()
Avanza el contador interno paso, y si llega al último vuelve a 0
Clase:
Animacion
métodos
Parámetros
Descripción
_new()
ruta
indica la ruta donde esta la imagen
filas
indica las filas de sprites que tiene la imagen
columnas
indica las columnas de sprites que tiene la imagen
Frames
cadena de texto, que indica que sprite hace el movimiento: “1,2,3,2”
Este constructor, crea internamente dos objetos (itmp y ControlAnimaciónTmp), con los datos de los parametros pasados.
animar()
llama al método avanzar, del objeto interno ControlAnimacionTmp
pasoApaso
x
coordenada X donde se dibujará sprite
y
coordenada Y donde se dibujará el sprite
Se encarga de dibujar la imagen y avanzar la animación.
SpriteAltoAncho()
devuelve el ancho y largo del Sprite (según el numero de filas y columnas)
Usa una variable point, para devolver los valores:
A la hora de dibujar, también he cambiado algunas cosas:
Uso un drawingArea, que tiene el evento _draw, donde coloco los objetos a dibujar (los personajes, explosiones, etc):
PublicSubDrawingArea1_Draw()
figuraAnimada.dibuja()'es
una pieza en el tablero, que podemos mover. ani1.pasoApaso(100,
100) 'es una animación simple ani2.pasoApaso(200,
200)'es una animación simple ani3.pasoApaso(200,
100)'es una animación simple ani4.pasoApaso(100,
200)'es una animación simple ani5.pasoApaso(300,
100)'es una animación simple End
En el video se muestra varias animaciones ejecutandose a la vez:
Esto permite animar a la vez varias figuras y animaciones que haya en dicho procedimiento. Además ese evento _Draw es llamado cada cierto tiempo por un temporizador (timer1), que se encarga de actualizar también la posición de los figuras :
PublicSubTimer1_Timer() figuraAnimada.actualizaPosicion()'actualizamos
la posicion de la ficha. Internamente si no hay cambios se dibujara
en el mismo sitio DrawingArea1.Refresh() End
En la clase PiezaAnimada, el método .actualizaPosicion() se va calculando la posición de la figura, mientras se mueve entre casilla y casilla.
PublicSubactualizaPosicion() IfcasillaFinal=casillaInicialThenReturn
'a llegado a la casilla de destino contadorA+=1pto.x=casillaInicialX+difx*contadorApto.y=casillaInicialY+dify*contadorA IfcasillafinalX=pto.xAndcasillafinaly=pto.yThencasillaInicial=casillaFinalEndif End
Anteriormente el método .mueve() ha calculado cual es el incremento de X (difx) y el incremento de Y (dify), que se necesita para ir de la casilla actual a la casilla que se le haya indicado.
En el siguiente video vemos como se desplaza el personaje, a la vez que se hay otras animaciones reproduciendose:
El siguiente paso es implementar varios "estados" (osea varias animaciones a un mismo personaje/ficha), por ejemplo, cuando este parado, cuando vaya de izquierda a derecha o viceversa... para ello vamos a programar un autómata :)
kompare: ver diferencias entre archivos y proyectos.
Visionando archivos de Parcheado .patch
Estoy haciendo un nuevo proyecto (TPV para Peluquería y Pequeñas Tiendas ) y el cliente me ha pedido que incluya en la versión actual, un nuevo informe e incluir un nuevo parámetro configurable (opcional que se pueda aplicar IVA a los servicios)
El caso es que esta interesado en ver los cambios que se producen en el código fuente, al incorporar las nuevas opciones. A mi también me viene bien para de alguna manera, tener documentado las mejoras añadidas al código.
Lo primero que se me ha ocurrido es crear un "Parche" [ver nota 1] , comparando la versión inicial del proyecto, con la que he realizado los cambios. Y obtengo un archivo .patch.
Bueno muy bien, ya tengo los cambios recogidos en un archivo.... pero ¿como lo puedo ver fácilmente y en modo gráfico?.
Pues existe una aplicación llamada kompare, la cual nos permite abrir el archivo .patch y ver su contenido.
Para instalarlo: $ sudo apt-get install kompare
Para ejecutar el programa (por ejemplo si tenemos un archivo .patch llamado Cortes-0.0.6~Cortes-0.0.7.patch)
$kompare Cortes-0.0.6~Cortes-0.0.7.patch
Por ejemplo, os dejo una captura de pantalla:
Aqui podemos ver, el contenido del archivo ".patch" desglosado por parte:
- Zona de directorios: muestra la estructura del proyecto (A) y (B), siendo la A el original ("fuente") y el B el proyecto actualizado ("destino")
- Zona de Ficheros: Los ficheros del directorio donde estemos. Aqui seleccionamos los cambios del archivo.
-Zona de lineas: El numero de linea y descripción del cambio realizado (insertado, cambiado, borrado)
Y luego vemos en la parte inferior la zona donde esta la linea de código modificada:
En el siguiente video vemos como es el proceso de creación de un archivo .patch en gambas3, y navegaremos por los cambios producidos con Kompare