Pàgina web personal de Fran Rojas


APLICACIONS

AQUESTA PÀGINA NECESSITA JAVASCRIPT PER A FUNCIONAR

Calculadora multiprecisió


v1.0.2



v1.1



v1.2


Efecte lent


v1.1


v1.2


v1.3


Java File Encoder (encriptador)


v1.0


v1.1


v1.2


v1.3



v1.4



v1.5


Sincronització de subtítols


v1.0


v1.1


Sincronització d'audio


v0.5


Filtrat de fulles de càlcul de Google


v0.5


Chess PDF browser

( Lloc web de ChessPdfBrowser )

v1.0



v1.1



v1.11



v1.20



v1.26


pdf2pgn


v1.20


v1.26


Encriptació de texts (Textcrypt)


v1.0


v1.0.2


v1.3


v1.4



v1.5



v1.6


Instrumental Music


v1.0



v1.1



v1.2


Llibreries de plataforma


v1.0



v1.1



v1.2



v1.3



v1.4


Icones


v1.0


Pdf Inspector


v1.0


Donut


v1.0


Player de música


v1.0


Editor de Morphing


v1.0



v1.1


Compressió Fractal d'imatges


v1.0


Còpia d'imatges basant-les en un color


v1.0



Bola de color


v1.0



Arrels de polinomis


v1.0



Treballant amb codis QR


v1.0



Parlant amb la I.A.


v1.0



Llibreria en Java per a l'extracció de taules de PDFs


v1.0





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.

És una nova versió de la calculadora multiprecisió.

Objectius:

L'excusa principal d'aquesta nova versió ha sigut implementar un derivador algebràic.

La idea d'aquesta funcionalitat ve de lluny, quan un professor a l'institut ens va proposar de participar al concurs anual de software presentant una aplicació que permetés derivar.

En aquella ocasió no vam arribar molt lluny al projecte, però amb aquesta versió de la calculadora, gairebé 30 anys després, arriba l'aplicació que deriva :-).


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

Nova versió de la calculadora multiprecisió.

Objectius:


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

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

La última subversió disponible d'aquesta versió, funciona tant amb Java-8 com amb Java-11.

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.

Aquest versió ha aparegut per a intentar evitar un error que apareixia per la interacció amb una nova funcionalitat de Java-9, que tracta amb pantalles d'alta densitat de píxels.

També s'inclou suport per a Maven.

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

L'objectiu d'aquesta versió és afegir la consulta de nova versió per a tenir una estadística de quanta gent fa servir l'apliació.

S'afegeix l'opció de mode obscur

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

Amb la nova vesrió de l'aplicació, s'han corregit diversos errors, i s'han afegit algunes noves característiques:

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

Amb la nova vesrió de l'aplicació, s'han actualitzat els manuals d'usuari.

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

Amb la nova versió de l'aplicació s'han afegit vàries noves característiques:

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

La nova versió de l'aplicació apareix amb la necessitat d'extreure de partides de PDFs en notació algebraica de figures.

El que és nou en aquesta versió:


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


Pots veure un video de la nova funcionalitat Video de demostració

Complement de l'aplicació ChessPdfBrowser

Aplicació d'interfície de comandes que permet obtenir les partides d'un llibre d'escacs en pdf en format .pgn

Accepta diferents paràmetres que permeten:


Hi ha uns scripts bàsics per als diferents entorns que fan la invocació java passant els paràmetres a l'aplicació:

Actualització de la versió online de la ChessPdfBrowser

S'ha afegit un script en bash que facilita la tasca de processar tots els Pdfs d'un directori.

De moment no processa Pdfs en notació algebraica de figures, però s'ha actualitzat per a que inclogui la nova funcionalitat 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:

En aquesta vesrió de l'aplicació s'intenta evitar un error que es produïa per la interacció amb una nova funcionalitat de Java-9 (que tracta automàticament les pantalles amb alta densitat de píxels (dpi)).

Como a novetat, s'afegeix suport per a Maven.

Aquesta versió de l'aplicació inclou la consulta de nova versió.

Nova opció de mode obscur


Aquest encriptador de text té algunes característiques molt dessitjables:

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.

Amb aquesta versió s'actualitza la versió de les llibreríes de plataforma:

Ara també es pot configurar l'umbral d'amplitud per a detectar una nota

Aquesta versió de l'aplicació és fruit del temps lliure extra obtingut de la prohibició d'entrar a bars i restaurants a Catalunya sense el certificat COVID durant el Nadal de 2021.

La novetat més destacada, és que permet canviar el to de veu, a més greu o més agut, depenent d'un control lliscant.

Video de demostració

Aquest mòdul inclou les llibreries que contenen classes comuns a totes les aplicacion que he anat programant.

Bàsicament està organitzat en dues subllibreries:

La libGeneric inclou classes que no depenen de l'entorn, i que (en teoria) es poden fer servir en aplicacions sota qualsevol entorn, inclós Android.


La libGenericDesktop, inclou classes que són més depenents de swing (entorn de java estàndard d'escriptori). Inclou:

Aquest mòdul inclou les llibreries que contenen classes comuns a totes les aplicacion que he anat programant.

Respecte a la versió anterior, s'afegeix:

Aquest mòdul inclou les llibreries que contenen classes comuns a totes les aplicacion que he anat programant.

Respecte a la versió anterior, s'afegeix:

Aquest mòdul inclou les llibreries que contenen classes comuns a totes les aplicacion que he anat programant.

Respecte a la versió anterior, s'afegeix:

Aquest mòdul inclou les llibreries que contenen classes comuns a totes les aplicacion que he anat programant.

Respecte a la versió anterior, s'afegeix:

Noves llibreries externes, que s'han inclós per comoditat de compilació, també s'han separat les llibreries en dos grups segons la seva llicència (lgpl y gpl):


Funcionalitat de les llibreries

Aquesta petita aplicació permet de crear les icones d'una aplicació prenent com a entrada una imatge i redimensionant-la a diferents mides d'icones estàndar per a Windows:

També permet redimensionar la imatge d'entrada a una mida configurable que pot ser diferent dels anteriors.

Al procès de redimensionament, es pot traduir un color concret a un altre (això por anar bé per a canviar, per exemple, el color de fons, que podria ser transparent, a blanc.

També es pot canviar el component alpha (de transparència) de la resta de píxels.

Nova opció de mode obscur

Amb aquesta aplicació es poden obrir llibres en Pdf i inspeccionar les seves imatges y text.

És un exemple bàsic del que es pot fer amb la llibreria pdfbox.

Nova opció de mode obscur

Aquesta aplicació mostra un Donut en tres dimensions, donant la possibilidad d'aplicar rotacions en ambdos eixos.


És un exemple bàsic del que es pot fer amb les llibreries de plataforma.


Funcionalitat de les llibreries

Aquesta aplicació és un player de música.

Treballa amb llistes de reproducció tipus .m3u, que es poden crear arrossegant i deixant arxius de música des de l'exporador d'arxius.


Video de demostració

La idea d’aquesta aplicació ve de fa molt de temps.

Quan era jove ja m’agradava la programació i disfrutava veient les demos que molts grups de programadors preparaven per a les diferents competicions de demos per tot el món.

Molts efectes d’aquestes demos eren espectaculars, tenint en compte la potència dels ordinadors de l’època.

Un cop vaig veure una demo d’un grup espanyol a la que hi havia un efecte de morphing: els components de l’equip s’anaven transformant de l’un a l’altre, i al final, l’últim es transformava en una iguana (el grup es deia Iguana).

Un efecte molt vistós.

Amb els anys li he estat donant voltes a com realitzar aquest efecte, i al final us presento aquesta aplicació amb la solució que proposo per a aconseguir-ho.

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

Video de demostració

Video creat amb l'aplicació

Justament desprès d'haver cursat el màster d'intel.ligència artificial, hi ha ganes d'intruduir elements d'IA al meu projecte personal.

Aquest cop fent ús d'una llibreria de detecció de cares ja madura.


Amb aquesta nova versió, s'intenta facilitar la tasca a l'usuari afegint eines que permeten crear malles amb més soltura

Més concretament, s'inclou una llibreria que detecta cares a les imatges (dlib-68 face landmarks), que retorna 68 vèrtex de cada una de les cares detectades


Amb aquesta nova informació, l'aplicació permet:


I es pot comprovar, que amb aquesta millora es poden crear projectes de Morphing d'una manera molt més àgil.

Així, per exemple, es pot crear un efecte interessant amb quatre fotos, en menys de 20 minuts, quan amb la versió anterior podies tardar ben bé un parell d'hores


Hi ha un manual d'usuari que explica pas a pas com fer anar l'aplicació.

Video de demostració

Video creat amb l'aplicació

L'aplicació és la implementació d'un algoritme de Compressió Fractal d'imatges explicada en un article d'IEEE de la meva època universitaria, basat en la triangulació de Delaunay i en codificació per blocs.

La meva primera versió d'aquest algoritme la vaig programar conjuntament amb un company d'universitat en una pràctica de l'assignatura de Televisió de l'últim curs de Teleco (plan 64 de Barcelona).

Internet encara estaba en els seus començaments i la programació depenia gairebé únicament d'un mateix i dels documents físics que poguessis aconseguir.

Me'n recordo d'haver programat una triangulació de Delaunay que no estava malament del tot, i que vam programar el split and merge, el càlcul dels triangles més representatius i també el càlcul dels mapejos òptims de triangles durant la codificació, però no vam aconseguir acabar l'aplicació (després d'haver-li dedicat tres mesos intensius de programació)

25 anys després, arriba una nova implementació de l'algoritme, aquest cop complerta, i en el temps rècord de dues setmanes

Està clar que alguna cosa s'aprèn en 25 anys, i a més, aquest cop amb la posibilitat de reutilitzar funcions per a manipular triangles que ja havia programat per a l'aplicació d'efecte de Morphing

I fent servir aquest cop, una llibrería de triangulació de Delaunay programada per professionals

Està clar que quan no tens que construir-te els maons, les parets creixen més ràpid ...


Vídeo de demostració

L'aplicació (també en Java) apareix durant la creació de la presentació del Treball de fi de Máster de Intel.ligència Artificial (2022/2023).

La plantilla de Power Point que ens van passar estava basada en el color taronja, identificador de la Universidad de VIU.

Així que sembla una bona idea crear imatges a joc amb aquesta gama de colors, i em proposo crear una aplicació de línia de comandes per a copiar imatges basant-les en la tonalitat d'un color

Com a novetats, l'ús de la llibreria "Apache Commons CLI" per al parseig dels paràmetres d'entrada de la línia de comandes.

També és novetat l'ús de la opció logback de slf4j

L'aplicació colorBall, neix com a un entreteniment entre projectes (desprès d'acabar la versió v1.1 de l'Editor de Morphing, i abans de començar amb la nova versió de l'aplicació d'escacs)

Es fa ús del Painter que permet programar l'ImageJPanel, amb el que es pot pintar damunt de la imatge mostrada, i el KeyColorImage, que permet colorejar píxels amb una tonalitat, que en aquest cas es pot escollir seleccionant un color amb un JColorChooser

Així, l'aplicació pinta una bola de mida seleccionable colorejada subtilment amb la tonalitat que hagis escollit al damunt de la imatge mostrada


L'aplicació ha sigut l'excusa per a integrar el JColorChooser a les llibreries, per a que estigui disponible a totes les aplicacions:

Video de demostració

Les calculadores d'arrels de polinomis són un clàssic de les carreres d'informàtica.

Contribueixo amb la meva versió de la solució al problema.

No és una solució molt eficient, ja que en el pitjor cas la complexitat computacional és O(G^2), essent G el grau del polinomi

Però crec que fa el treball amb efectivitat


L'algoritme es basa en el càlcul de les arrels d'un polinomi, suposant conegudes les arrels de la seva funció derivada

Sota aquesta suposició, és molt senzill calcular les arrels, ja que podem conèixer al límit del rang a on es troben les arrels (Veure: Propietats de les arrels polinòmiques)

I d'aquesta manera, en combinació amb les arrels de la funció derivada, podem delimitar els rangs de cadascuna de les possibles arrels i, simplement aplicant el teorema de Bolzano, podem calcular els zeros

Però ... no necessitem la funció que estem programent per a calcular les arrels de la funció derivada?

No hi ha problema: farem ús de la recursivitat, i la funció recursiva (la que calcula les arrels d'un polinomi), té un cas de terminació per al cas d'un polinomi de grau zero (una constant), que suposarem que no té arrels.

I com la funció derivada té un grau menys que el polinomi original, llavors, aplicant la recursivitat, arrivarem al càlcul de les arrels d'un polinomi de grau zero, amb solució trivial, i problema solucionat


Aquesta manera de procedir pot crear la necessitat de tenir alta precisió als càlculs, però això no és problema si fem ús de la classe BigDecimal de Java

Aplicació combinada de Java desktop (Impressió del QR) y Android (lectura del QR)

És el resultat d'un copia/enganxa de recursos a internet que explicaven com fer anar la llibreria Zxing per al processament de QRs

També hi ha una aplicació de línia d'ordres que permet crear imatges de QR

Aquesta aplicació neix del desig de treballar amb serveis de I.A. avançats, tals com:


Amb ella, podrás conversar amb una I.A. generativa: Llama3

Parlant pel micròfon (el reconeixement de veu no és perfecte, però reconeix algunes parts)

Editant el text a enviar a la I.A. i enviant-lo

Veient la resposta de la I.A. en temps real, i escoltant-la per l'altaveu

Video de demostració

Aprofitant les classes programades per a l'aplicació ChessPdfBrowser, que llegeix partides dels PDFs d'escacs, he pogut crear una versió beta de la llibreria per a l'extracció de text de PDFs incloent elements tabulats

La llibreria recorre les pàgines indicades, extraient el text, i durant l'extracció d'aquest text, es busquen patrons en forma de taula, que s'extrauen de manera especial (en forma de matriu rectangular)

Espero que li pugui ser útil a algú