Página web personal de Fran Rojas


APLICACIONES

ESTA PAGINA NECESITA JAVASCRIPT PARA FUNCIONAR

Calculadora multiprecisión


v1.0.2



v1.1



v1.2


Efecto lente


v1.1


v1.2


v1.3


Encriptador (Java File Encoder)


v1.0


v1.1


v1.2


v1.3



v1.4



v1.5


Sincronización de subtítulos


v1.0


v1.1


Sincronización de audio


v0.5


Filtrando Google Sheets


v0.5


Chess PDF Browser

( Sitio web de ChessPdfBrowser )

v1.0



v1.1



v1.11



v1.20


pdf2pgn


v1.20


Encriptación de texto (TextCrypt)


v1.0


v1.0.2


v1.3


v1.4



v1.5



v1.6


Instrumental Music


v1.0



v1.1


Librerías de plataforma


v1.0



v1.1



v1.2



v1.3



v1.4


Iconos


v1.0


Pdf Inspector


v1.0


Donut


v1.0





Se trata de una de mis primeras aplicaciones grandes programadas en Java.

Para esta aplicación, se creó una librería que hacía cálculos de precisión configurable con haciendo uso de la clase BigDecimal. En concreto la librería implementa las funciones matemáticas principales aceptando números de tipo BigDecimal, y aceptando también la precisión deseada.

La aplicación final dispone de una caja de texto, donde se pueden poner las operaciones que se desean calcular. También permite almacenar funciones y variables.

La interfaz de usuario es muy simple, y con algunos errores que hacen que sea un poco tedioso utilizar la aplicación. Tengo programado preparar una nueva versión que mejorará un poco esa carencia.

La manera interna de funcionar, es que cuando se introduce la operación que se desea calcular la aplicación realiza un análisis del texto introducido y almacena la operación en memoria en forma de árbol. De esa forma, se pueden almacenar fórmulas, ya que se puede guardar el árbol en función de una o más variables. Tras haber obtenido el árbol de operaciones, se evalúa recursívamente el resultado y tras finalizar, se muestra el resultado total.

Es una nueva versión de la calculadora multiprecisión.

Objetivos:

La excusa principal de esta nueva versión es implementar un derivador algebraico.

La idea de esta funcionalidad viene de lejos, cuando un profesor en el instituto nos propuso participar al concurso anual de software presentando una aplicación que permitiera derivar.

En aquella ocasión no llegamos muy lejos en el proyecto, pero con esta versión de la calculadora, casi 30 años después, llega la aplicación que deriva :-).


Existe un amplio manual donde se explica el funcionamiento de la aplicación.

Nueva versión de la calculadora multiprecisión.

La pequeña aplicación efecto lente, apareció como resultado de una Semana Santa sin planes.

Por aquel entonces estaba terminando de programar la primera versión del encriptador (File Encoder Application), y necesitaba algo vistoso para el Acerca de ...

La idea original no es mía, sino que la implementé siguiendo un efecto que había visto en una de aquellas legendarias demos de DOS.

La forma de implementación escogida, fue encapsular el efecto dentro de un JPanel de Java swing.

Todo lo que se ponga dentro del panel, puede ser "ampliado" con la lupa, que puede ser colocada en las coordendas que se escojan.

Especialmente costoso fue el conseguir que los refrescos de los componentes de texto (en concreto cuando se modifica la ubicación del texto seleccionado), no afectara negativamente al efecto visual.

Internamente, la forma de funcionar es que cuando se crea el LensJPanel, se le pasa el JPanel contenido al que va a hacer el efecto, el radio de la lupa que va a tener, y si va a ser una lupa de apliación o de disminución.

Al tener el radio y si la lupa va a ser de ampliación o disminución, se crea una matriz cuadrada de dos dimensiones, con un elemento por cada pixel del cuadrado que contiene la lupa.
Para cada uno de esos píxeles (pixel destino), calcula las coordenadas de la imagen original (pixel origen) de donde se tendrá que coger el color para cuando se realice la transformación.
La transformación es una sencilla transformación en coordenadas polares. Lo explico para el caso de lente de ampliación:
Para una posición determinada del cuadro de la lente, se calcula un pixel del que se recogera el color cuando se haga la transformación. Ese pixel, estará también dentro del cuadro de la lente. Además, para un pixel determinado, se calcula el radio (desde el centro de la lente), y el ángulo. El pixel "origen" para el pixel que estamos calculando, estará con ese mismo ángulo, pero cambiará el radio. El radio siempre va de 0% a 100% tanto para los píxeles "destino", como para los píxeles "origen", donde 100% es la longitud del radio de la lente. Es decir, para cada pixel destino, para calcular su pixel origen, se mantiene su ángulo, y el radio se transforma, usando una función con derivada monótona creciente, en el intervalo entre 0 y 1, donde f(0) valdrá 0, y f(1) valdrá 1, donde 0 es 0% del radio de la lente y 1 es el 100% del radio de la lente. Eso querrá decir que los radios tomarán su pixel origen de un radio menor, cosa que hará el efecto de que el círculo de la lente, amplía. Fuera del círculo de la lente, la transformación será la identidad (es decir, no variará el píxel origen)


La explicación me ha quedado un poco confusa, pero si te interesa el asunto ponte en contacto conmigo.

Espero que a alguien le sea de utilidad :-)

La nueva versión de la aplicación abre una ventana gráfica circular con la lente que puede moverse haciendo click con el raton y arrastrando.
Se puede salir de la aplcación pulsando ESC.

Se pueden apreciar un par de problemas:

La nueva versión de la aplicación corrige un error de transparencia que se producía en entornos Mac y Linux.

También mejora el problema del pixelado de las versiones anteriores.

Eso se consigue pasando a la imagen de la lente un filtro de suavizado gaussiano que hace un efecto de difuminado y disminuye el efecto de pixelación de la ampliación.

La última subversión disponible de esta versión, funciona tanto con Java-8 como con Java-11.

Esta aplicación surgió como necesidad de encriptar archivos con un método propio.

Permite encriptar archivos de una manera muy configurable, permiendo obtener métodos realmente costosos en tiempo de encriptación/desencriptación (cosa que dificulta los ataques por fuerza bruta), que pueden ser utilizados para encriptar archivos pequeños.

Existe un manual de usuario bastante extenso, en el que se explican todos los detalles del funcionamiento, tanto de cara al usuario, como interno de la aplicación.

Esta versión de la aplicación surgió debido a que la nueva versión de JRE de aquellas fechas afectó al aspecto visual de la aplicación v1.0, por lo que apareció esta versión 1.1 para solventar esos problemas.

El manual de usuario no cambió con esta versión, y se mantuvo el mismo que para la versión anterior.

En esta versión se hicieron un par de cambios:

Existe un manual de usuario específico de esta versión, en el que se explican todos los detalles.

En esta versión se han realizado varios cambios:

Existe un manual de usuario específico de esta versión, en el que se explican todos los detalles.

Esta versión ha aparecido para intentar evitar un error que aparecía por la interacción con una nueva funcionalidad de Java-9 que trata con pantallas de alta densidad de píxeles.

También se incluye soporte para Maven.

Existe un manual de usuario específico de esta versión, en el que se explican todos los detalles.

El objetivo de esta versión es añadir la consulta de nueva versión para tener una estadística de cuanta gente usa la aplicación.

También se añade la opción de modo oscuro

Existe un manual de usuario específico de esta versión, en el que se explican todos los detalles.

Esta es la primera versión de una pequeña aplicación en Java que permitía ayudar a sincronizar subtítulos aplicando un factor temporal a los ficheros de subtítulos de tipo (.srt).

La aplicación autodetecta el juego de caracteres del fichero de subtítulos y permite escoger un juego de caracteres para generar el fichero de salida (o utilizar la codificación detectada durante la lectura).

En esta versión se añadieron varias cosas:

Esto hace que, previamente conociendo los valores de retardo y factor, se puedan sincronizar perfectamente vídeo y subtítulos.

Esta aplicación de interfaz de comandos programada en C++, permite la aplicación de un factor temporal a los archivos de audio.

Esta operación implica que los archivos de audio de entrada y de salida tendrán tamaños distintos (y duración distinta).

La forma de realizar esta transformación es mediante interpolación de señales digitales.

Existe un amplio manual acerca del funcionamiento de la aplicación y de su funcionamiento interno.

Aplicación programada en Java que permite conectarse a Google Drive y leer una hoja de cálculo.

Tras esto, la aplicación coloca los datos en una JTable y permite hacer un filtrado de ellos.

Existe un amplio manual en castellano que explica paso a paso cómo configurar la aplicación.

La Chess PDF Browser es una aplicación programada en Java que permite navegar por libros de ajedrez en formato PDF.

También permite trabajar con archivos de partidas en formato .pgn

Muestra un tablero de ajedrez donde se puede navegar por las partidas.

Permite abrir libros de ajedrez en PDF y extraer sus partidas, para poder guardarlas en formato .pgn

Permite editar las variantes de las partidas que tiene en memoria (leidas de .pgn, extraídas de un PDF o bien creadas directamente moviendo las piezas del tablero.

Existe un amplio manual donde se explica el funcionamiento de la aplicación.

Con la nueva versión de la aplicación, se han corregido varios errores, y se han añadido varias características:

Existe un amplio manual donde se explica el funcionamiento de la aplicación.

Con la nueva versión de la aplicación, se han actualizado los manuales de usuario.

Existe un amplio manual donde se explica el funcionamiento de la aplicación.

Con la nueva versión de la aplicación, se han añadido varias características:

Existe un amplio manual donde se explica el funcionamiento de la aplicación.

Complemento de la aplicación ChessPdfBrowser

Aplicación de interfaz de comandos que permite obtener las partidas de un libro de ajedrez en pdf en formato .pgn

Acepta varios parámetros, que permiten:


Existen unos scripts básicos para los distintos entornos que realizan la llamada java pasando los parámetros a la aplicación:

TextCrypt es una pequeña aplicación programada en Java que permite encriptar y desencriptar textos planos.

El texto no llega nunca a estar guardado en el disco duro en claro siempre está encriptado.

El formato del archivo encriptado creado con esta aplicación, es compatible con el de la aplicación Java File Encoder, simplemente cambiando adecuadamente la extensión.

En esta versión se corrigieron algunos errores.

En esta versión se corrigieron algunos errores.

En esta versión de la aplicación se introducen algunas nuevas funcionalidades:

En esta versión de la aplicación se intenta evitar un error que se producía por la interacción con una nueva funcionalidad de Java-9 (que trata automáticamente las pantallas con alta densidad de píxeles (dpi)).

Como novedad, se añade soporte para Maven.

En esta versión de la aplicación se añade la consulta de nueva versión.

Se añade la opción de modo oscuro

Instrumental music es una pequeña aplicación programada en Java que permite escuchar del micrófono.

Y procesar la entrada capturada, obteniendo en tiempo real, la nota predominante calculada.

Se puede probar silbando notas, y configurando la aplicación para que toque la misma nota detectada en MIDI

Es un simple entretenimiento

En esta versión se actualiza la versión de librerías de plataforma usadas:

Ahora también se puede configurar el umbral de amplitud para detectar una nota

Este módulo incluye las librerías que contienen clases comunes a todas las aplicaciones que he ido desarrollando.

Está organizado básicamente en dos sublibrerías:

La libGeneric incluye clases que no dependen del entorno, y que (en teoría) pueden ser utilizadas en aplicaciones bajo cualquier entorno, incluido Android.


La libGenericDesktop, incluye clases que son más dependientes de swing (entorno de java estándar de escritorio). Incluye:

Este módulo incluye las librerías que contienen clases comunes a todas las aplicaciones que he ido desarrollando.

Respecto a la versión anterior, se añade:

Este módulo incluye las librerías que contienen clases comunes a todas las aplicaciones que he ido desarrollando.

Respecto a la versión anterior, se añade:

Este módulo incluye las librerías que contienen clases comunes a todas las aplicaciones que he ido desarrollando.

Respecto a la versión anterior, se añade:

Este módulo incluye las librerías que contienen clases comunes a todas las aplicaciones que he ido desarrollando.

Respecto a la versión anterior, se añade:

Nuevas librerías externas, que se han incluido por comodidad de compilación, y se han separado las librerías en dos grupos según su licencia (lgpl y gpl):


Funcionalidad de las librerías

Esta pequeña aplicación permite crear los iconos de una aplicación tomando como entrada una imagen y redimensionándola a varios tamaños de iconos estándar para Windows:

También permite redimensionar la imagen de entrada a un tamaño configurable que puede ser distinto de los anteriores.

En el proceso de redimensionado, se permite traducir un color concreto a otro (esto puede servir para cambiar, por ejemplo, el color de fondo, que podría ser transparente, a blanco.

También se permite cambiar el componente alpha (de transparencia) del resto de píxeles.

Nueva opción de modo oscuro

Esta aplicación permite abrir libros en Pdf e inspeccionar sus imágenes y texto.

Es un ejemplo básico de lo que se puede hacer con la librería pdfbox.

Nueva opción de modo oscuro

Esta aplicación muestra un Donut en tres dimensiones, dando la posibilidad de aplicar rotaciones en ambos ejes.


Es un ejemplo básico de lo que se puede hacer con las librerías de plataforma.


Funcionalidad de las librerías