cace0353
25/04/17, 11:48:47
Hola a todos!
Como hace unos dias que el foro està un poco "dormido" me he entretenido en prepararos un aporte que a muchos os puede servir (aunque sea sólo en ocasiones).
ANTECEDENTES
En un post mio de mayo del 2014
http://www.htcmania.com/showthread.php?t=824130 PROGRAMA EINES (herramientas)
publiqué un proyecto que consistia en una serie de utilidades de uso administrativo (Cálculo de la letra del NIF, comprobación de los Dígitos de control de una cuenta bancaria con el cálculo del IBAN y obtención para las poblaciones de Catalunya de los códigos postales, dirección, teléfono del Ayuntamiento, nº de habitantes y altitud topògráfica)
Recientemente lo he modificado para quitar la parte de los datos municipales (Google te da esto y mucho más...) y he añadido dos utilidades más para acabar en una aplicación que es como una pequeña navaja suiza de utilidades administrativas. También he pulido el código, incorporando nuevas (para mí) técnicas, quitando lo innecesario y estableciendo acciones de control de los resultados.
DESCRIPCIÓN DE LA METODOLOGIA DE PROGRAMACIÓN
1.- Desde hace bastante tiempo, viendo que cada vez tenia más variable globales en mis programas, he cambiado la manera de trabajar para usar lo menos posible este tipo de variables en favor de las locales.
Las variables globales (las que tienen alguna letra del nombre en mayúsculas) se quedan guardadas como datos del programa y ocupan espacio en la SD. Además, cada acceso a una variable global requiere del sistema la lectura de su valor en la tarjeta para cargarlo en memoria y, se se cambia su valor en la ejecución, actualizarlo luego en la SD. En cambio las variables locales (todo el nombre de la variable en minúsculas) sólo existen en la RAM mientras se ejecuta la tarea en la que están definidas y, en cuanto ejecutamos una nueva tarea, se pierde su valor como si nunca hubiera existido. Su acceso y uso es más sencillo y, sobretodo, más rápido...
Ahora hago casi todos mis proyectos a partir de una sola TAREA "lanzadora" que muestra una escena "Principal". En la escena hay elementos seleccionables (casi todos los elementos de las escenas: Texto, Editor de texto, Menu, Rueda, Imagen, etc... admiten la opción de "Clic en Item") en donde pongo todas las acciones que quiero que se ejecuten al pulsar sobre el elemento de la escena y usando sólo variables locales. Efectivamente: como la tarea "lanzadora" sigue en ejecución las variables pueden ser locales y sus valores son visibles desde las otras tareas embebidas en los botones de la escena.
Algunos elementos de la escena pueden llamar a otras escenas elaboradas con el mismo criterio y los elementos de estas a su vez pueden hacer aparecer otras escenas para formar una estructura de escenas ramificadas con una sóla tarea "lanzadora" y compartiendo todas las variables locales.
Esto tiene el inconveniente de que las tareas están "dentro" de las escenas y para editarlas se debe hacer a partir de la escena. No obstante, una vez acostumbrado a este método, la ventaja de trabajar sólo con variables locales és innegable.
2.- Para solventar el problema de ajustar la altura de texto a los distintos dispositivos con distintas resoluciones, tamaño del píxel y tamaño de pantalla, después de ver lo que se proponia aquí en otros hilos, lo hago como sigue:
Defino de inicio, al principio de la tarea principal, una variable global %AltTexte con valor 1. Después diseño mis escenas con las alturas de texto que convengan a mi dispositivo. Una vez acabado el Proyecto, en fase de revisión y documentación, cambio el valor fijo de la altura de cada texto (p.e. 24) por la variable round(%AltTexte*24). Esto hace que al cambiar el valor de %AltTexte todos los textos de las escenas se ajustan. Por ejemplo, si el texto nos aparece demasiado grande podemos poner %AltTexte a 0.85 y ver si "cabe" bién en nuestro dispositivo. Una vez ajustado ya no deberemos tocarlo más.
3.- A lo largo de los 3 años transcurridos desde que empezé con Tasker he ido aprendiendo nuevos métodos. Principalmente el uso de Sqlite para las consultas a bases de datos y la simplificación y aumento de velocidad que aporta Javascript para tareas repetitivas sobre muchos elementos (bucles For-End For). Destaco que las consultas Sqlite se efectúan mediante la acción SQL Query (del grupo Archivo) recientemente incorporada a Tasker, y que ya no se necesita Root como hasta ahora.
Esta versión del programa incorpora ambos métodos. El resultado, que describo a continuación és un proyecto que sólo tiene dos variables globales: la que guarda el coeficiente corrector de la altura de texto %AltTexte (por defecto =1) y la que guarda el tema de color elegido %Gama (por defecto = 1) y una sóla subtarea (que he heredado de la antigua versión del programa) que se usa dos veces y que sirve para calcular y comprobar los 2 dígitos de control (DC) de una cuenta bancaria
UTILIDADES INCLUIDAS
DETERMINACIÓN DE C.POSTAL Y Código INE DEL LUGAR DONDE ESTAMOS
Para ubicarse el nombre de la ciudad donde estamos y el código postal no necesitamos mucha precisión. Por ello basta obtener las coordenadas del lugar por medio de las antenas de telefonía (Red de Datos -> %LOCN). Este método es el más rápido y da una precisión de entre 20 y 40 m. He añadido también el nombre de la calle y el nº donde estamos ya que sólo supone dos líneas más de código. No obstante la fiabilidad de este dato no és muy alta... En contrapartida se puede usar en interiores, donde el GPS és inútil.
Con una consulta a la API de Google Maps con las coordenadas del lugar se obtiene el Nombre de la población, calle, nº y el Código postal.
No puede establecerse una correlación precisa entre el Código Postal y el Código INE (Instituto Nacional de Estadística): cada población tiene un único código INE pero puede tener varios códigos postales (poblaciones grandes). A la inversa: varias poblaciones pequeñas pueden compartir idéntico código postal.
Para obtener el código INE hago una consulta a la tabla MUNICIPIS de la base de datos EINES-2.db (de 14.690 registros) que contiene las correspondencias entre el nombre del municipio (obtenido de la consulta a la API de Google) y el código INE para toda España.
Arriba, a la izquierda en la escena, hay el icono interno de posición que permite, al pulsar sobre él, obtener la ubicación y el resto de datos relativos (CP-INE). Una pulsación larga sobre el botón abre el menú de configuración en el que se puede elegir el tema de color y cambiar la variable %AltTexte.
CALCULO DE LA LETRA DEL NIF
Este és un programillo elemental y que tenia realizado en Excel. Sirve para calcular la letra del NIF a partir del número del DNI.
Como seguramente sabreis, la letra se calcula haciendo la división entera del número del DNI por 23 y comparando el resto de la división con una lista de letras ordenadas en forma distinta a la del abecedario.
A cada resto le corresponde una letra y no hay más.
Està realizado en Javascript.
CALCULO DEL IBAN, NOMBRE DEL BANCO Y COMPROBACIÓN DE LOS DÍGITOS DE CONTROL DE UNA CUENTA
Este programa ya es más laborioso. Uso una tabla Excel extraida de internet con los nombres de entidades bancarias principales y el código de entidad correspondiente. A partir de estos datos he creado una tabla (BANCS) de 143 registros que forma parte de la misma base EINES-2.db
La tarea embebida en el botón "Calcular" compara el código de entidad de la cuenta puesta en la casilla correspondiente en la escena con los de la tabla para extraer el Nombre de la entidad.
El cálculo del IBAN es bastante complejo y se ha realizado a partir del procedimiento explicado aquí:
https://kutxa.kutxabank.es/cs/Satell...&ssbinary=true
Para la comprobación de los dígitos de control hay una tarea específica "Comprovar DC" que es llamada por la tarea asociada al botón "calcular" y que multiplica uno a uno los dígitos de la entidad y nº oficina por una serie de números determinados para obtener el primer DC. Luego se procesan de igual manera los 20 números de la cuenta para obtener el segundo DC. Según el procedimiento explicado aquí:
http://www.luciano.es/utiles/ccc.htm
Si el DC escrito en la casilla correspondiente es incorrecto se pone en fondo rojo y aparece un flash de alerta.
CALCULO DE LAS CUOTAS DE UN CREDITO HIPOTECARIO A INTERES FIJO.
Calcula el importe de las cuotas de un crédito hipotecario a interés fijo por el llamado método francés y el importe total a devolver (Capital + intereses) al final del período de amortización.
Esta sección calcula además, para un mes N cualquiera, la parte correspondiente a los intereses y a la amortización indicando también el capital pendiente de amortización en el mes considerado.
CAPTURAS DE PANTALLA
http://imageshack.com/a/img924/7799/3DYLT4.jpg
CONSIDERACIONES FINALES
Al usar el método de programación de incluir las tareas en las escenas, como he explicado más arriba, és laborioso extraer el texto como tareas. Por esto os adjunto directamente el XML.
El programa está en catalán, pero como se desarrolla en una única escena no os dará mucho trabajo traducirlo. De entrada os ahorrais todo el proceso de teclear las acciones... Debereis también, eso sí, traducir los mensajes de error que hay en las acciones incluidas en los botones. De paso podreis revisar el código y a algunos les puede servir como pequeño tutorial para vuestros desarrollos.
Además el menú de configuración permite adaptar el tamaño del texto facilmente a la resolución de vuestro dispositivo y teneis 5 temas de color a elegir...
ENLACES en Dropbox al Proyecto en XML y la base de datos EINES-2.db (a copiar en la carpeta de Tasker)
El XML: https://www.dropbox.com/s/iumdj41o62kjkpc/EINES.prj.xml?dl=0
La base de datos EINES-2: https://www.dropbox.com/s/dmrktb4saivclul/EINES-2.db?dl=0
Como hace unos dias que el foro està un poco "dormido" me he entretenido en prepararos un aporte que a muchos os puede servir (aunque sea sólo en ocasiones).
ANTECEDENTES
En un post mio de mayo del 2014
http://www.htcmania.com/showthread.php?t=824130 PROGRAMA EINES (herramientas)
publiqué un proyecto que consistia en una serie de utilidades de uso administrativo (Cálculo de la letra del NIF, comprobación de los Dígitos de control de una cuenta bancaria con el cálculo del IBAN y obtención para las poblaciones de Catalunya de los códigos postales, dirección, teléfono del Ayuntamiento, nº de habitantes y altitud topògráfica)
Recientemente lo he modificado para quitar la parte de los datos municipales (Google te da esto y mucho más...) y he añadido dos utilidades más para acabar en una aplicación que es como una pequeña navaja suiza de utilidades administrativas. También he pulido el código, incorporando nuevas (para mí) técnicas, quitando lo innecesario y estableciendo acciones de control de los resultados.
DESCRIPCIÓN DE LA METODOLOGIA DE PROGRAMACIÓN
1.- Desde hace bastante tiempo, viendo que cada vez tenia más variable globales en mis programas, he cambiado la manera de trabajar para usar lo menos posible este tipo de variables en favor de las locales.
Las variables globales (las que tienen alguna letra del nombre en mayúsculas) se quedan guardadas como datos del programa y ocupan espacio en la SD. Además, cada acceso a una variable global requiere del sistema la lectura de su valor en la tarjeta para cargarlo en memoria y, se se cambia su valor en la ejecución, actualizarlo luego en la SD. En cambio las variables locales (todo el nombre de la variable en minúsculas) sólo existen en la RAM mientras se ejecuta la tarea en la que están definidas y, en cuanto ejecutamos una nueva tarea, se pierde su valor como si nunca hubiera existido. Su acceso y uso es más sencillo y, sobretodo, más rápido...
Ahora hago casi todos mis proyectos a partir de una sola TAREA "lanzadora" que muestra una escena "Principal". En la escena hay elementos seleccionables (casi todos los elementos de las escenas: Texto, Editor de texto, Menu, Rueda, Imagen, etc... admiten la opción de "Clic en Item") en donde pongo todas las acciones que quiero que se ejecuten al pulsar sobre el elemento de la escena y usando sólo variables locales. Efectivamente: como la tarea "lanzadora" sigue en ejecución las variables pueden ser locales y sus valores son visibles desde las otras tareas embebidas en los botones de la escena.
Algunos elementos de la escena pueden llamar a otras escenas elaboradas con el mismo criterio y los elementos de estas a su vez pueden hacer aparecer otras escenas para formar una estructura de escenas ramificadas con una sóla tarea "lanzadora" y compartiendo todas las variables locales.
Esto tiene el inconveniente de que las tareas están "dentro" de las escenas y para editarlas se debe hacer a partir de la escena. No obstante, una vez acostumbrado a este método, la ventaja de trabajar sólo con variables locales és innegable.
2.- Para solventar el problema de ajustar la altura de texto a los distintos dispositivos con distintas resoluciones, tamaño del píxel y tamaño de pantalla, después de ver lo que se proponia aquí en otros hilos, lo hago como sigue:
Defino de inicio, al principio de la tarea principal, una variable global %AltTexte con valor 1. Después diseño mis escenas con las alturas de texto que convengan a mi dispositivo. Una vez acabado el Proyecto, en fase de revisión y documentación, cambio el valor fijo de la altura de cada texto (p.e. 24) por la variable round(%AltTexte*24). Esto hace que al cambiar el valor de %AltTexte todos los textos de las escenas se ajustan. Por ejemplo, si el texto nos aparece demasiado grande podemos poner %AltTexte a 0.85 y ver si "cabe" bién en nuestro dispositivo. Una vez ajustado ya no deberemos tocarlo más.
3.- A lo largo de los 3 años transcurridos desde que empezé con Tasker he ido aprendiendo nuevos métodos. Principalmente el uso de Sqlite para las consultas a bases de datos y la simplificación y aumento de velocidad que aporta Javascript para tareas repetitivas sobre muchos elementos (bucles For-End For). Destaco que las consultas Sqlite se efectúan mediante la acción SQL Query (del grupo Archivo) recientemente incorporada a Tasker, y que ya no se necesita Root como hasta ahora.
Esta versión del programa incorpora ambos métodos. El resultado, que describo a continuación és un proyecto que sólo tiene dos variables globales: la que guarda el coeficiente corrector de la altura de texto %AltTexte (por defecto =1) y la que guarda el tema de color elegido %Gama (por defecto = 1) y una sóla subtarea (que he heredado de la antigua versión del programa) que se usa dos veces y que sirve para calcular y comprobar los 2 dígitos de control (DC) de una cuenta bancaria
UTILIDADES INCLUIDAS
DETERMINACIÓN DE C.POSTAL Y Código INE DEL LUGAR DONDE ESTAMOS
Para ubicarse el nombre de la ciudad donde estamos y el código postal no necesitamos mucha precisión. Por ello basta obtener las coordenadas del lugar por medio de las antenas de telefonía (Red de Datos -> %LOCN). Este método es el más rápido y da una precisión de entre 20 y 40 m. He añadido también el nombre de la calle y el nº donde estamos ya que sólo supone dos líneas más de código. No obstante la fiabilidad de este dato no és muy alta... En contrapartida se puede usar en interiores, donde el GPS és inútil.
Con una consulta a la API de Google Maps con las coordenadas del lugar se obtiene el Nombre de la población, calle, nº y el Código postal.
No puede establecerse una correlación precisa entre el Código Postal y el Código INE (Instituto Nacional de Estadística): cada población tiene un único código INE pero puede tener varios códigos postales (poblaciones grandes). A la inversa: varias poblaciones pequeñas pueden compartir idéntico código postal.
Para obtener el código INE hago una consulta a la tabla MUNICIPIS de la base de datos EINES-2.db (de 14.690 registros) que contiene las correspondencias entre el nombre del municipio (obtenido de la consulta a la API de Google) y el código INE para toda España.
Arriba, a la izquierda en la escena, hay el icono interno de posición que permite, al pulsar sobre él, obtener la ubicación y el resto de datos relativos (CP-INE). Una pulsación larga sobre el botón abre el menú de configuración en el que se puede elegir el tema de color y cambiar la variable %AltTexte.
CALCULO DE LA LETRA DEL NIF
Este és un programillo elemental y que tenia realizado en Excel. Sirve para calcular la letra del NIF a partir del número del DNI.
Como seguramente sabreis, la letra se calcula haciendo la división entera del número del DNI por 23 y comparando el resto de la división con una lista de letras ordenadas en forma distinta a la del abecedario.
A cada resto le corresponde una letra y no hay más.
Està realizado en Javascript.
CALCULO DEL IBAN, NOMBRE DEL BANCO Y COMPROBACIÓN DE LOS DÍGITOS DE CONTROL DE UNA CUENTA
Este programa ya es más laborioso. Uso una tabla Excel extraida de internet con los nombres de entidades bancarias principales y el código de entidad correspondiente. A partir de estos datos he creado una tabla (BANCS) de 143 registros que forma parte de la misma base EINES-2.db
La tarea embebida en el botón "Calcular" compara el código de entidad de la cuenta puesta en la casilla correspondiente en la escena con los de la tabla para extraer el Nombre de la entidad.
El cálculo del IBAN es bastante complejo y se ha realizado a partir del procedimiento explicado aquí:
https://kutxa.kutxabank.es/cs/Satell...&ssbinary=true
Para la comprobación de los dígitos de control hay una tarea específica "Comprovar DC" que es llamada por la tarea asociada al botón "calcular" y que multiplica uno a uno los dígitos de la entidad y nº oficina por una serie de números determinados para obtener el primer DC. Luego se procesan de igual manera los 20 números de la cuenta para obtener el segundo DC. Según el procedimiento explicado aquí:
http://www.luciano.es/utiles/ccc.htm
Si el DC escrito en la casilla correspondiente es incorrecto se pone en fondo rojo y aparece un flash de alerta.
CALCULO DE LAS CUOTAS DE UN CREDITO HIPOTECARIO A INTERES FIJO.
Calcula el importe de las cuotas de un crédito hipotecario a interés fijo por el llamado método francés y el importe total a devolver (Capital + intereses) al final del período de amortización.
Esta sección calcula además, para un mes N cualquiera, la parte correspondiente a los intereses y a la amortización indicando también el capital pendiente de amortización en el mes considerado.
CAPTURAS DE PANTALLA
http://imageshack.com/a/img924/7799/3DYLT4.jpg
CONSIDERACIONES FINALES
Al usar el método de programación de incluir las tareas en las escenas, como he explicado más arriba, és laborioso extraer el texto como tareas. Por esto os adjunto directamente el XML.
El programa está en catalán, pero como se desarrolla en una única escena no os dará mucho trabajo traducirlo. De entrada os ahorrais todo el proceso de teclear las acciones... Debereis también, eso sí, traducir los mensajes de error que hay en las acciones incluidas en los botones. De paso podreis revisar el código y a algunos les puede servir como pequeño tutorial para vuestros desarrollos.
Además el menú de configuración permite adaptar el tamaño del texto facilmente a la resolución de vuestro dispositivo y teneis 5 temas de color a elegir...
ENLACES en Dropbox al Proyecto en XML y la base de datos EINES-2.db (a copiar en la carpeta de Tasker)
El XML: https://www.dropbox.com/s/iumdj41o62kjkpc/EINES.prj.xml?dl=0
La base de datos EINES-2: https://www.dropbox.com/s/dmrktb4saivclul/EINES-2.db?dl=0