Fran Rojas' personal web page


APPLICATIONS

THIS PAGE NEEDS JAVASCRIPT TO WORK

Multiprecision calculator


v1.0.2



v1.1



v1.2


Lens effect


v1.1


v1.2


v1.3


Java File Encoder (encryptor)


v1.0


v1.1


v1.2


v1.3



v1.4



v1.5


Subtitle synchronization


v1.0


v1.1


Audio synchronization


v0.5


Filtering Google Sheets


v0.5


Chess PDF browser

( ChessPdfBrowser web site )

v1.0



v1.1



v1.11



v1.20



v1.26


pdf2pgn


v1.20


v1.26


Text encryption (Textcrypt)


v1.0


v1.0.2


v1.3


v1.4



v1.5



v1.6


Instrumental Music


v1.0



v1.1



v1.2


Platform libraries


v1.0



v1.1



v1.2



v1.3



v1.4


Icons


v1.0


Pdf Inspector


v1.0


Donut


v1.0


Music player


v1.0


Morphing Editor


v1.0



v1.1


Fractal Image Compression


v1.0


Copy of images basing them in a color


v1.0



Color Ball


v1.0



Polinomial roots


v1.0



Working with QR codes


v1.0





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 is a new version of multiprecision calculator application.

Goals for the new version:

The main explanatoin for the new version has been to implement a calculator of derivatives.

The idea of this functionality comes from very long ago, when a teacher of highschool proposed us to participate to the annual software competition presenting an application that calculated derivatives.

In those times we could not make many advances in the project, but with this version of multiprecision calculator, almost 30 years after, the application that calculates derivatives comes :-).


There is wide handbook where it is explained how the application works.

The translator of this handbook is Tamara Perry

New version of multiprecision calculator application.

Goals:


There is wide handbook where it is explained how the application works.

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.

The last subversión available of this versión of the application, works on both Java-8 and Java-11 Java versions.

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.

The translator of this handbook is Tamara Perry

This version has arisen to try to avoid an error produced by the interaction with a new functionality of Java-9 which deals with screens with high density of pixels.

It also includes support for Maven.

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

The translator of this handbook is Tamara Perry

The goal of this version is to add new version query at start of the application for having some statistics of how many people uses it.

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

New dark mode option

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 handbook 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 handbook 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 wide user handbook where the user interface is explained.

With the new version of the application, some bugs have been fixed, and some new features have been added:

There is wide user handbook where you can see how the application works.

With the new version of the application, user handbooks have been updated.

There is wide user handbook where you can see how the application works.

With the new version of the application some new features have been added:

There is wide user handbook where you can see how the application works.

The translator of this handbook is Tamara Perry

The new application version appears with the needs of extracting games of PDFs in figurine algebraic notation.

What is new in this version:


There is wide user handbook where you can see how the application works.


You can watch a video demo about the new functionality Video demo

Complement of ChessPdfBrowser application

Command line application that allows getting the games of a pdf chess book as .pgn

It accepts several parameters that allow:


There are a pair of basic scripts for different environments that make java invocation passing the parameters to the application:

Update of the online version of ChessPdfBrowser

A new bash script has been added to easy the task of processing all pdfs in a directory.

At the moment it is not able to process Pdfs witn figurine algebraic notation, but it has been updated for including the new functionality of the application.

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:

In this version we have tried to avoid an error produced by the interaction with a new functionality of Java-9 (which automatically deals with screens with a high density of pixels (dpi)).

As a novelty, support for Maven has been added.

This version of the application includes the new version query.

New dark mode option


This text encoder has some appealing features:

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.

With this version platform libraries version is upgraded:

Now you can also configure the threshold for detecting a note

This application version arises thanks to the extra free time got after the ban to enter bars and restaurants in Catalonia without COVID certificate during Christmass'2021.

The most remarkable novelty, is that it allows changing the voice pitch, to lower or sharper pitch, depending of a slider.

Demo video

This module includes the libraries that have common classes to all the applications that I have been programming.

Basically is divided into two sublibraries:

libGeneric includes classes that do not depend on the environment, and that (theoretically) can be used in applications under any environment, Android included.


libGenericDesktop, includes classes that are more dependent on Swing (Desktop environment of standard Java). It includes:

This module includes the libraries that have common classes to all the applications that I have been programming.

Compared with the previous version, it adds:

This module includes the libraries that have common classes to all the applications that I have been programming.

Compared with the previous version, it adds:

This module includes the libraries that have common classes to all the applications that I have been programming.

Compared with the previous version, it adds:

This module includes the libraries that have common classes to all the applications that I have been programming.

Compared with the previous version, it adds:

New 3rd-party libraries, which have been included for comodity of compilation, and libraries have been divided into two groups, depending on their license (gpl y gpl):


Functionality of libraries:

This tiny application allows you to create the icons for an application taking as input an image and resizing it to different Windows standard sizes:

You can also resize that input image to a configurable size that can be different from the previous ones.

When resizing, you can translate a particular color to another one (that can be useful to change the background, that might be transparent to white).

You can change the alpha component (of transparency) of the rest of pixels too

New dark mode option

With this application you can open Pdf books and inspect their images and text.

It is a basic example of what can be done using pdfbox library.

New dark mode option

That application shows a Donut in three dimensions, giving the possibility to apply rotations in both axis.


It is a basic example of what can be done using platform libraries.


Functionality of libraries:

This application is a music player.

It works with play lists of type .m3u, which can be created by dragging and dropping music files from the file explorer.



Demo video

The idea for this application has been in my mind for some time.

Ever since I was young, I've been fond of programming, and liked to watch the demos that many teams of computer programmers hosted for different demo competitions around the world.

I was impressed by many of the demos, considering the capacities of computers at that time.

Once, I saw a demo of a Spanish team that used a morphing effect: the members of the team morphed from one to another, and lastly into an iguana (this was fitting, as the team’s name was Iguana).

It was an effect that caught my attention.

Over the years I have been thinking about how to achieve this effect, and finally have figured out a way to do so. Now, as the final product of my efforts, I am pleased to present you with this application. I have also compiled a user guide that explains how the application works step-by-step.

There is a handbook that explains how to use the application.

Demo video

Video created with the application

Since I recently completed my Master's degree in artificial intelligence, I was eager to incorporate AI technology in my personal project.

This time I implemented the use of a sophisticated face detection database.


This new version is designed to improve the user experience by providing tools that make creating meshes easier.

In particular, it includes a comprehensive database that can detect faces in an image (dlib-68 face landmarks), which will then generate 68 vertices of each of the faces detected


With this new data, the application allows the user to:


With this improvement, Morphing projects can be created in a much more agile way.

For example, you can create an alluring effect with four photos in less than 20 minutes, whereas with the previous version it could take at least two hours


There is a user's manual that explains step by step how to use the application.

Demo video

A video created with the application

The application is the implementation of a fractal compression algorithm explained in an IEEE paper of my universitary time, based on Delaunay triangulation and block coding.

I programmed the first verion of that algorithm with a university class mate in Television subject of the last season of Telecomunication's degree (64's Barcelona plan).

Internet was still starting and development depended almost only on your own and on the physical documentation you could get.

I remember having programmed a Delaunay triangulation that was not bad at all, and the split and merge, and the calculation of the most representative triangles and also the calculation of the optimal triangle mapping during encoding, but we could not finish to program the whole application (after having dedicated to it three intensive months of developing)

25 years later, a new implementation of the algorithm comes, this time the whole application, in the record time of two weeks

It is clear that you can improve something in 25 years, and in addition, this time with the aid of functions for triangle management already programed for the Morphing effect application

And this time using a Delaunay triangulation programmed by professionals

It is clear that when you do not have to build your own bricks, walls grow faster ...


Demo video

The application (in Java too) appears during the creation of the presentation of the Artificial Intelligence Master's thesis (2022/2023).

The Power Point template that we had to work from was based in the orange color, the identifier of VIU University.

So it seems a good idea to create images that match with that color scale, and then I proposed myself to create a command line application for copying images basing then in a key color.

As novelties of the application, the usage of "Apache Commons CLI" library for the parsing of input command line parameters

The use of logback for slf4j is also a novelty.

ColorBall application, is born as an entertainment between projects (just after finishing the v1.1 version of Morphing Editor, and before starting with the new version of ChessPDFBrowser)

The Painter ImageJPanel allows to attach is used, with which you can paint over the showed image, also KeyColorImage is used, with which you can color pixels with a tonality, that in this case can be chosen by selecting a color with JColorChooser

This way, tha application paints a ball with size selectable subtly colored with the chosen tonality over the showed image


The application has been an excuse for integrating JColorChooser in my libraries, in order to be available for all applications:

Demo video

Polynomial root calculators are a classic at Information Technologies degrees.

I contribute with my version of the solution to the problem.

It is not a very efficient solution, as in the worst case the computational complexity is O(G^2), being G the polinomial degree

But I think that it does the job with effectivity


The algorithm is based in the calculus of a polinomial roots, supposing that the root of its derivative function are known

Under that supposal, it is very easy to calculate the roots of the polinomial, as we can know the range within all roots are in (See: Properties of polynomial roots)

This way, in combination with the roots of the derivative function, we can delimitate the range of every one of the possible roots and, simply by applying the Bolzano's theorem, we can calculate the roots

But ... do not we need the function we are programing for calculating the roots of the derivative function?

No problem: we can use recursivity, and the recursive function ( the one that calculates the roots of a polinomial), has a termination case for the polinomial of zero degree (a constant), which we will suppose that lacks of roots.

As the derivative function has a degree less than the one of the original polinomial then, when applying recursivity, we are going to reach the case to have to calculate the roots of a zero degree polynomial, with trivial solution: problem solved


That way to proceed can create the necessity of having high precision calculations, but that is not a problem if we can make use of the BigDecimal Java class

Application that combines a Java desktop part (QR printing) and an Android part (QR reading)

It is the result of a copy/paste of some internet resources that explained how to make Zxing library work for QR processing

There is also a command line application that lets you create QR images