This was the biggest project I ever did on my own. About 20K lines of code, hundreds of automated tests (unit, integration,
functional), and so many functionalities I could not cover them all in a short video. I spent about a year and
a half on this project. I would not be surprised if this is actually 1 year of full-time work.
Gains:
- Learnt to use InnoSetup to create my custom EXE file. This made me explore the ApplicationData folder, which I
did not know before. I am happy to say that creating my EXE file worked, because there were many custom commands
in my packaging that made it difficult to do.
- Increased my experience with Maven. Some test packages I added took a lot of my time, because I wasn't sure which
dependencies I needed.
- Created my functional tests with TestFX. TestFX was very useful for me: I was able to create tests that covered
all of the sections of my application to make sure they were still running fine after I made modifications. It was
in this project I truly realized the gain of automated tests.
- Got deeper knowledge of JavaFX. The most important thing I learnt about JavaFX was the GUI thread. The GUI thread
should only be used by GUI tasks. If you need to do processing tasks, don't do them on the GUI thread, otherwise your
application hangs!
- Managed my own large application. I was making the decisions on my own, and I still delivered. This is an application
I am still using today. I refactored my code a couple of times, added and updated tests, added documentation, managed
my backlog of tasks...
- Explored complex SQL queries and how to optimize them. For example, the Recipe Search section of my application has
a complex SQL query to get recipes. I wanted to make sure I had as much flexibility I needed to make it easier for me
to search for the recipes I wanted.
Difficulties encountered:
- I believe InnoSetup has poor documentation compared to other tools I have used. I struggled a lot. Not to mention
that I used a USB key to transfer the EXE to another computer to make sure it worked... and most of the time, the file
was corrupted! It took me weeks before I thought about using a VM. Once I did that, I never had that problem again!
- I believe TestFX has poor documentation compared to other tools I have used. It took me a lot of time before I
could start to tweak my tests to have them do exactly what I wanted. I didn't even follow the examples from the
repository, because they didn't have the capabilities I was looking for.
- Maintaining motivation when I clearly didn't know what to do. I still pushed myself to work a minimal amount of time
per day, because I wanted to get it done.
- I had difficulty dividing the front-end from the back-end (for a desktop app). I didn't realize what was the best way
to do this. After having done unit tests at work, I realize that I should have created more 'setters' for foreign objects
to be able to mock them more easily. This 'merge' of front and back made it so difficult for me to do unit tests.
Lessons learned:
- Keep images of the application inside of the JAR! If I try to get it from the file system... I won't be able to see
them!
- Maintain a clear division between front-end and back-end, even in a desktop application. Tests are much harder when they
are mixed.
- Don't use the GUI thread for backend tasks.
- It is so hard making an EXE file from Java (compared to C#). At least now I have some boilerplate I will be able to reuse.
- When the application gets too big, the documentation gets all over the place. Managing an application this scale alone
is a big task! And migrating it from Netbeans to Eclipse is really annoying too, especially when about a quarter of your
automated tests fail as a result.
(BE WARNED: Video in French!)
In this project, I used Windows Forms, computer vision with EmguCV (C# OpenCV), low-level programming, and Windows
text-to-speech to be able to analyze the Solitaire game window.
Gains:
- Learnt a lot about communication with the OS (low-level programming). I was intercepting the keystrokes on the
keyboard, taking information on the focused window (size, title), as well as taking a screenshot with the Windows API
to make this application work. I also interacted with the OS to get information on the user's system, such as the
languages that were downloaded on the PC to make my text-to-speech work.
- First time implementing a Windows Forms application. It was refreshing seeing how easy it was to build the UI of the
desktop application.
- Used computer vision (EmguCV) to be able to analyse the cards. I created my own dataset to be able to compare the values in each
deck. I broke down the images by finding where the decks were located. Then, I would make an analysis on the decks by
delimiting each card to better isolate the numbers on the cards.
- Discovered how to create the EXE file in C#. I was amazed to see how easy it was.
Difficulties encountered:
- It is harder to find code for low-level programming, as most coders never touch low-level programming. Most programmers
go in web, mobile, or desktop applications. To be able to do the low-level programming I needed to do, my solution was to
get as much information as I could about the subject, and then create a custom solution based on that understanding. I never
would have found the information as-is on the web.
- A lot of contradictory information found on the libraries I had to use to make the speech-to-text feature work.
After days of searching, I eventually was able to tweak my search engine requests to get an answer that would make
my application 'speak' (text-to-speech).
- My computer vision dataset was not good enough. I had to tweak my dataset multiple times and change the precision
of my algorithm to finally be able to achieve a high level of success.
Lessons learned:
- Should make it a priority to learn how to setup the project on github, because it takes time to learn again how to setup
the project once you haven't touched it for a while.
- C# has a tool that makes it so easy to bundle the application into an EXE.
- Key bindings can interfere with other applications used in parallel (Solitaire in this case). Key bindings should be flexible.
I made this project to demonstrate computer security with the cross-site scripting vulnerability (XSS). I used the
usual technologies for web (HTML, CSS, JS), but what was special about this project is that I learnt how to create
SVG images using Inkscape. I also put a lot of time into animations and different screen resolutions support.
Gains:
- Gained understanding of SVGs. I was able to create all of the components of the web page using Inkscape.
- I delved more into animations, and cascading them to make the website interesting for the participants
(this project was presented in an event).
- Started to use media queries for the first time.
Difficulties encountered:
- I explored a completely different field: the field of the graphic designer. It's just too vast to cover it all
in the little time that I had. I just looked over at multiple videos and eventually I decided what I would do.
This is probably the project that I liked the most. It was my first time attempting a project with a bigger scale
without being based on a tutorial. In this project, I used Unity and Blender to create a Monopoly game.
Gains:
- Gained a deeper understanding of Unity by delving into its specifics and dynamics. Created views that would allow
me to see all of the properties and their owner, an AI that would compete against the main player, manipulated
angles as I turned each corner to follow each player and switch between them, implemented the actions described on
the community and chance cards.
- Got introduced to Blender: I created the dice of the game, the Monopoly board, the game pieces, and the house /
hotel properties.
- Used Github for the first time to store the data for my project.
Difficulties encountered:
- There was no tutorial to create a Monopoly board in Blender. I had to find out how to do the little things I wanted to do:
thus, I searched for ways to divide a board to be able to apply different colors to it. Decomposition of the tasks I
wanted to do was key for the success of this project: Blender itself takes months to learn, and I didn't want the project
to take near a year (I also took the time to learn Unity). After all, this was my first big project.
- The game included a great number of dynamics that a novice Unity user would not have been able to go through. Before starting
the project, I made sure to get the necessary training by buying a Unity course. That Unity course would let me follow
the creation of multiple projects, which allowed me to gain experience. Then, I found a website where there were complete
Unity projects tutorials. I did many of them, and each time, I would go a little beyond what I learnt/read on the website
to be able to get even more knowledge. That is how I got the confidence to build the Unity Monopoly game.
Lessons learned:
- Unity projects are very heavy to store on Github. For that reason, I was not able to store the Unity project like
I wanted to.
- I should write cleaner code (make functions clearer and more concise), because navigating into hundreds of lines of code
in a single function is exhausting.
I took this certification to dig deeper into Cisco Systems. Indeed, Cisco hardware is frequently used
in networks, so I thought this certification could give me insight on how to interact with Cisco systems.
As soon as I finished university, I started reading the CCNA manual. I wanted to pass this certification
to formalize my knowledge of networks, learn more about Cisco systems, and challenge myself. I had heard
how complex Cisco certifications can be, and how CompTIA certifications were simpler. It certainly showed
in the first minutes that I was passing that test: I could not review my questions once they were answered,
and I had very limited time to answer each of them!
I passed this certification to get a more guided learning into cybersecurity. I had read a number of books
on cybersecurity and was fascinated by it. I wanted to formalize and diversify that knowledge, and determine
if cybersecurity was something I wanted to get into. The buzz I had gotten from
the previous certification (Strata IT) certainly helped to motivate me to take this certification.
I passed this certification while I was in high school. I wanted to formalize my knowledge of computers,
learn more about how computers work, and gain an advantage over my peers. Taking the exam was also a challenge that I
had given myself: getting the discipline to read hundreds of pages out of the CompTIA Strata IT manual, take
notes on them, and take the exam was a big step for me. The exams I had at school were about learning a couple of
pages of notes... not hundreds!
Native language. Proficiency: 10/10
Second language. Completely bilingual. Proficiency: 10/10
Third language that I have practiced over the years. I can understand it better than I can speak it. Proficiency: 5/10.
Fourth language that I have started to learn for a trip I went on in 2024. I have started learning it in September of 2023.
I have consistently practiced the language until March of 2024, which is when I came back from my trip.
I was able to only speak Portuguese for my daily interactions (no phone / translator), and make myself understood.
It helped that the language is similar to Spanish. Proficiency: 3/10.