Previous Work and Projects
At Webincode
2019-2020, 2020-2021
Working at Webincode was my first step into the professional tech world.
I joined it through an internship program in the 2-year degree I was taking at a local polytechnic school (which I never finished since I left one course behind).
It helped me not only improve my Web development skills, but also how to organize work and how to act as part of a team.
Regrettably, I did not take the job as serious towards the end of my time there, forcing the great yet small crew there to cut ties with me, which I wish I could undo.
Lessons learned:
- Putting in practice modern Web 'front-end' development with Bootstrap, and custom CSS+JS for unique page elements.
- How SQL database queries should be formed in real life situations
- Being introduced to the gigantic (in code size) cross-platform mobile app development made possible by Cordova and Angular through the Ionic Framework.
- The importance of defining tasks (and time estimates) to solve before tackling a project
Reverse-engineering the PS4
2023-2026
With my hands on a passed down PlayStation 4 from a family member with a very convenient firmware version supported by the latest jailbreak at the time, I started hacking away on various small projects for it.
As time passed, some of these became more venturious and spawned:
egemu
An open-source compatibility layer for running PlayStation 4 games and applications.
[In development, not public yet.]freegnm
An alternative PS4 GNM's user graphics library implementation.
[In development, not public yet.]psbc
A Mesa-based shader compiler targetting the PlayStation 4's hardware.
[In development, not public yet.]gnmtrace
A PlayStation 4 game frame tracing utility, with a focus in replayability.
[In development, not public yet.]And as part of my learning on the Zig programming language:
open-orbis-zig
A wrapper for Zig over the PlayStation 4's Orbis OS system libraries.
[In development, not public yet.]Lessons learned:
- How powerful knowing the underlying hardware your software is targetting can be, versus abstracting over all theoretical hardware in the world, and how to balance that.
- Insights on how GPUs operate, from an user's perspective down to a driver developer's view.
- A new understanding of how complex mainstream graphics APIs are compared to console specialized ones.
Restoring Counter-Strike Online 2
2018-2022
This was my first modestly popular open-source project where my rookie reverse engineering skills were useful for others.
Technically this started in 2017, in the last week of the Chinese-flavor of this live service game, where I recorded a Wireshark dump of the network during a match.
A year later, I published on YouTube a video of a prototype custom game launcher that created a room and hosted a match, locally - made possible by Source Engine's DLL architecture, and by referencing previous leaked engine source code (fortunately Valve never found this project legally bothersome).
cso2-launcher
A custom game launcher for Counter-Strike Online 2 (abbreviated CSO2) in C++, with runtime hooks and patches for connecting to custom master servers and self-hosting matches.
[No longer in development.]Following a reasonable amount of positive feedback, and inspired by the trending technology at the time, I began creating a master server in NodeJS for the custom launcher to connect to.
cso2-master-server
An implementation of a master, central server for CSO2 that manages user accounts and player's game sessions.
[No longer in development.]This also lead to unexpected, but very welcome patches and bug fixes submitted to the source code repositories, giving me a taste of project management.
However, the project started to interfere with my work at Webincode, which coupled with a failed rewrite of the master server in modern C++, and a loss of interest for the game itself, lead me to stop working on this full-stop.
cso2-leet-server
A failed master server re-write in modern C++20.
[No longer in development.]Lessons learned:
- Don't over-engineer solutions or else they will impact development negatively. In this case combining NodeJS with MongoDB-then-Postresql and Docker-compose to top them all.
- To not blindy follow 'modern' software practices such as 'microservices'. At some point in the project a user and inventory services (individual programs) were split from the master server itself.
- Acquired an understanding of C++'s gigantic complexity. While I find the custom launcher's code more sensible, my decision to go all in C++20 with the master server rewrite was a complete disaster.
- That public open-source projects require time to nurture the any interested users and developers.