Página web personal de Fran Rojas


APLICACIONES

ESTA PAGINA NECESITA JAVASCRIPT PARA FUNCIONAR

Calculadora multiprecisión


v1.0.2


Efecto lente


v1.1


v1.2


v1.3


Encriptador (Java File Encoder)


v1.0


v1.1


v1.2


v1.3


Sincronización de subtítulos


v1.0


v1.1


Sincronización de audio


v0.5


Filtrando Google Sheets


v0.5


Chess PDF Browser


v1.0


Encriptación de texto (TextCrypt)


v1.0


v1.0.2


v1.3


v1.4


Instrumental Music


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.

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.

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 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.

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:

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

Es tracta d'una de les meves primeres aplicacions programades en Java.

Vaig crear una llibreria que feia càlculs de precisión configurable fent ús de la classe BigDecimal. En concret, la llibreria implementa les funcions matemátiques principals acceptant números de tipus BigDecimal i acceptant també la precisió desitjada.

L'aplicació final disposa d'una caixa de text on es poden escriure les operacions que es volen calcular. També permet guardar funcions i variables.

La interfície d'usuari es molt simple i amb alguns errors que fan que sigui una mica tediós utilitzar-la. Tinc pensat programar una nova versió que millorarà una mica aquesta carència.

La manera interna de funcionar, es que quan s'escriu l'operació que es vol calcular, llavors l'aplicació realitza una anàlisi del text introduit i guarda en memòria aquesta operació en forma d'arbre. D'aquesta manera es poden guardar fórmules, perque es pot guardar l'arbre en funció d'una o més variables. Després d'haver obtingut l'arbre d'operacions s'evalua recursivament el resultat i després de finalitzar es mostra el resultat total.

La petita aplicació efecte lent va aparèixer com a resultat t'una Setmana Santa sense plans.

Per aquelles dates jo estava acabant de programar la primera versió de l'encriptador (File Encoder Application), i necessitava alguna cosa vistosa per a l'opció "Sobre l'aplicació ..."

La idea original no és meva, si no que la vaig implementar seguint un efecte que havia vist en una d'aquelles legendàries demos de DOS.

La forma d'implementació escollida va ser encapsular l'efecte dins d'un JPanel de Java swing.

Tot el que es fiqui dins del panel, pot ser "ampliat" amb la lent, que pot ser posada a les coordenades que s'escullin.

Va ser especialment costós aconseguir que els refrescos dels components de text (en concret quan es modifica la ubicació del text seleccionat), no afectés negativament a l'efecte visual.

Internament, la manera de funcionar és que quan es crea el LensJPanel, se li passa el JPanel que té el contingut al que es vol fer l'efecte, el radi de la lent i si serà una lent d'ampliació o de disminució.

Com tenim el radi i si la lent serà d'ampliació o de disminució, es crea una matriu quadrada de dues dimensions, amb un element per cada pixel del quadrat que conté la lent.
Per a cada un d'aquestos píxels (píxel destí), es calculen las coordenades de la imatge original (píxel origen) d'on s'haurà d'agafar el color per quan es faci la transformació.
La transformació és senzilla, això sí, en coordinades polars. Ara explicaré aquesta transformació pel cas de lent d'ampliació:
Per a una posició determinada del quadre de la lent, es calcula un píxel del que es recollirà el color quan s'hagi de fer la transformació. Aquest píxel, estarà també dins del quadre de la lent. A més, per a un píxel determinat, es calcula el radi (desde el centre de la lent) i l'angle.El píxel "origen" pel píxel que estem calculant tindrà aquest mateix angle, però canviarà el radi. El radi sempre varia del 0% al 100%, tant pels píxels "origen" com pels píxels "destí", on el 100% és la longitud del radi de la lent. És a dir, per a cada píxel destí, per a calcular el seu píxel origen, es manté l'angle i el radi es transforma, utilitzant una función amb derivada monòtona creixent en l'interval entre 0 i 1, on f(0) tindrà un valor de 0 i f(1) tindrà un valor de 1, on 0 es el 0% del radi de la lent i 1 es el 100% del radi de la lent. Això voldrà dir que els radis prendran el seu píxel origen d'un radi menor, cosa que farà l'efecte de que a prop del dentre de la lent s'amplia la imatge. Fora del cercle de la lent, la transformaciò serà la identitat (és a dir, els píxels destí en aquesta zona, seran iguals que els píxels origen).


L'explicació ha quedat una mica confusa, però si t'interessa el tema, te pots posar en contacte amb mí.

Espero que a algú li sigui d'utilitat :-)

La nova versió de l'aplicació obre una finestra gràfica circular amb la lent que es pot moure fent click amb el ratolí i arrossegant.

Es poden veure un parell de problemes:

La nova versió de l'aplicació corregeix un error de transparència que es produïa a entorns Mac i Linux.

També millora el problema del pixel.lat que hi havia a les versions anteriors.

Això s'aconsegueix passant a la imatge de la lent un filtre de suavitzat gaussià que fa un efect de difuminat i disminueix l'efecte de pixel.lació de l'ampliació.

Aquesta aplicació va aparèixer amb la necessitat d'encriptar arxius amb un mètode propi.

Permet encriptar arxius d'una manera molt configurable, permetent obtener formes d'encriptació realment costoses en temps (cosa que dificulta els atacs per força bruta), que poden ser utilitzats per a encriptar arxius petits.

Hi ha un manual d'usuari bastant extens, en el que s'expliquen tots els detalls del funcionament, tant de cara a l'usuari com intern de l'aplicació.

Aquesta nova versió de l'aplicació va sortir degut a que la nova versió de JRE d'aquella època va afectar a l'aspecte visual de l'aplicació v1.0. Per això va aparèixer aquesta versió, per intentar solucionar aquests problemes.

El manual d'usuari no va canviar amb aquesta versió i es va mantenir el mateix que per a la versió anterior.

A aquesta versió de l'aplicació es van fer un parell de canvis:

Hi ha un manual d'usuari específic d'aquesta versión, on s'expliquen tots el detalls.

A aquesta versió s'han fet diferents canvis:

Hi ha un manual d'usuari específic d'aquesta versió, al que s'expliquen tots els detalls.

Aquesta és la primera versió d'una petita aplicació en Java que permetia ajudar a sincronitzar els subtítols aplicant un factor temporal als arxius de subtítols de tipus (.srt).

L'aplicació autodetecta el joc de caracters de l'arxiu de subtítols i permet escollir un joc de caracters per a generar l'arxiu de sortida (o utilitzar la codificació detectada durant la lectura).

A aquesta versió es van afegir diverses coses:

Això fa que, prèviament coneixent els valors de retard i factor, es puguin sincronitzar perfectament vídeo i subtítols.

Aquesta aplicació d'interfície de comandes programada en C++, permet l'aplicació d'un factor temporal als arxius d'audio.

Aquesta operació implica que els arxius d'audio d'entrada i de sortida, tindran tamanys diferents (i duració diferent).

La manera de realitzar aquesta transformació, es mitjançant la interpolació de senyals digitals.

Hi ha un ampli manual que parla de l'aplicació i del seu funcionament intern.

Aplicació programada en Java que permet connectar-se a Google Drive i llegir una fulla de càlcul.

Després d'això, l'aplicació col-loca les dades en una JTable i en permet fer un filtrat.

Hi ha un ampli manual en castellà que explica pas a pas com configurar l'aplicació.

La Chess PDF Browser és una aplicació programada en Java que permet navegar per llibres d'escacs en format PDF.

També permet treballar amb arxius de partides en format .pgn.

Mostra un taulell d'escacs on es pot navegar per les partides.

Permet obrir llibres d'escacs en PDF i extreure les seves partides, per a poder guardar-les en format .pgn

També es poden editar les variant de les partides que té a la memòria (bé llegides de .pgn, extretes d'un PDF, o bé creades directament movent les peces del taulell.

Hi ha un ampli manual on s'explica el funcionament de l'aplicació.

TextCrypt és una petita aplicació programada en Java que permet encriptar i desencriptar textos plans.

Els textos no arriben a estar guardats mai al disc dur en clar, sempre està encriptat.

El format de l'arxiu encriptat creat amb aquesta aplicació és compatible amb el de l'aplicació Java File Encoder, simplement canviant adequadament l'extensió.

A aquesta versió es van corregir alguns errors.

A aquesta versió es van corregir alguns errors.

A aquesta versió de l'aplicació s'han introduit algunes noves funcionalitats:

Instrumental music és una petita aplicació programada en Java que permet escoltar del micròfon.

I processar l'entrada capturada, obtenint en temps real la nota predominant calculada.

Es pot provar xiulant notes i configurant l'aplicació per a que emeti la mateixa nota en MIDI.

És un simple entreteniment.

This is one of my first major applications developed using Java.

A new library to perform the calculations was written specifically for this application. The said library adopts the parameters of the class BigDecimal. Most of the main mathematical functions were programmed incorporating BigDecimal numbers with the chosen precision.

The final application has a text box where the operations to be calculated can be written on. It also allows storage of functions and variables.

The Graphic User Interface is quite simple but it has some errors which makes the application not user friendly. I am planning to design a new version of this application which will eliminate some of the bottle necks.

.

This is how it works: when the user writes the operation to be calculated, the application will make an analysis of that operation and will be stored in a tree structure. Formulas can be stored this way because the tree structure can be stored in the function of one or more variables. Once the tree structure of the formulas is constructed, the result of each operation is evaluated recursively until it yields the final result.

This small application is called lens effect, developed during one of the Easter break without plans.

At that time, I was finishing the first version of the application called File Encoder Application and I needed something beautiful or colourful for the About page ...

The original idea is not mine but I implemented it using an effect that I saw many years ago in one of the legendary DOS demonstrations.

The implementation chosen was to encapsulate the effect inside a JPanel of Java Swing.

Everything inside the panel can be zoomed with the lens, which can be placed in any coordinates inside the panel.

It was especially hard to achieve the refresh of the text components (particularly when the location of the selected text is modified by the programme) without badly affect the visual effect.

Internally, it works in such a way that when the LensJPanel is created, it receives 3 parameters i.e. the content from JPanel which the effect will be made on, the lens radius and the zoom in and out effect.

With this information, a square matrix of two dimensions will be created where each pixel inside the square surrounding the lens.
For each of those pixels (destination pixels), the coordinates of the original image (source pixel) are calculated. This source pixel is the location inside the original image to be set in the destination pixel in the image with the lens effect done.
The transformation is a simple transformation in polar coordinates. I will explain that transformation for the case of the zooming out effect:
For a particular position inside the square surrounding the lens, an origin coordinate is calculated, as explained previously.
This source pixel will also be inside the square surrounding the lens. Besides that, each destination pixel will be translated to polar coordinates (radius and angle, from the center of the lens). The source pixel associated with every destination pixel, will have the same angle but the radius will change. The radius will be always within the range of 0% to 100% for both the destination pixels and source pixels. 100% is the length of the radius of the lens. That is, for every destination pixel, to calculate the source pixel the angle is maintained but the radius is transformed using a function with increasing monotonous derivative, inside the interval between 0 and 1, where f(0) will be 0 and f(1) will be 1, where 0 means 0% of the radius of the lens and 1 is the 100% of the radius of the lens. That means that the radius of the source pixel for a particular destination pixel will have a radius lesser than the destination pixel itself, which will make the lens to zoom out.
Outside the circle of the lens, the transformation will be the identity (that is, the destination pixel and the source pixel will be the same) so that outside the lens no zooming is done.

The explanation is a bit confusing, but if you are interested to know more, please contact me.

I hope it will be useful for someone :-)

The new version of the application opens a graphical window with the shape of a circle with the lens which can be moved by clicking with the mouse and dragging.

A couple of problems can be seen:

The new version of the application fixes a bug of transparency that arose in Mac and Linux environments.

It also tries to solve the problem of pixellation present in previous versions.

This is achieved by passing a blurred gaussian filter to the image of the lens that decreases the pixellation.

This application was arisen because of a necessity of encrypting files with an own method.

You can encrypt files in a very configurable way, achieving encryptions really expensive in time, which makes difficult force brute attacks, that can be used to encrypt small files.

There is a user handbook quite talkative in which all details of working are explained, from the point of view of both, the user interface and internal to the application.

This version of the application was arisen due to that a change in the new version of the JRE of those times affected the look of the version v1.0 of the application. That is why version v1.1 arose.

The user handbook did not change with this version (it was the same as for the previous version).

For this version a couple of change were done:

There is a user handbook specific for this version, in which all details are explained.

In this version of the application several changes have been made:

There is a user handbook specific for this version, in which all details are explained.

This is the first version of a little application in Java that let help sincronize subtitles by applying a temporal factor to subtitle files of type (.srt).

The application autodetects the character set of the file of subtitles and allows choosing a new character set for the output (or using the encoding detected during the reading).

In this version some new things where added:

This makes that, previously knowing the values of delay and factor, video and subtitles can be prefectly synchronized.

This application of command line was developed using C++ and allows to apply a time factor to audio files.

This operation implies that the input and output files will have different sizes and different duration).

The way to achieve this result is through interpolation of digital signals.

There is a very complete user manual which explains about the user interface and the functions of the application.

This is a Java application which allows you to connect to Google Drive and read a spreadsheet.

After that, the application will presents the data in a JTable and allows using filtering function.

There is a complete user manual in Spanish which explains step by step how to configure the application.

Chess PDF Browser is a Java application which allows browsing chess books in PDF format.

It also allows working with game files in .pgn format.

It shows a chess board which you can also browse the moves of the games.

It also allows opening the chess books in PDF format, extract their games and is able to save them in .pgn format.

Besides that, it allows to edit the movesof the games which is stored in the memory (either reading from a .pgn file, extracting from a PDF book or create directly the movement of the pieces on the board.

There is a user manual where the user interface is explained.

TextCrypt is a small application developed in Java with which you can encrypt and decrypt plain texts.

Text is never stored in the hard disk, it is always stored encrypted.

The format of the encrypted file created with this application, is compatible with the one of the Java File Encoder application, simply by changing accordingly the extension.

Some errores were fixed in this version of the application.

Some errores were fixed in this version of the application.

Some new functionalities are added in this version of the application:

Instrumental music is a small Java application which receives the data from the microphone and process the input signal in real time and detects the predominant music note.

You can try whistling and then configurethe application to play that same detected note using the MIDI device.

It's a simple entertainment tool.