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 didn't finish at the time to focus on this company).
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, my lack of focus towards the later part of my time there forced their great yet small crew to cut ties with me.
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.]psbc
A Mesa-based shader compiler targetting the PlayStation 4's hardware.
[In development.]gnmtrace
A PlayStation 4 game frame tracing utility, with a focus in replayability.
[In development.]And as part of my learning on the Zig programming language:
open-orbis-zig
Package for integrating Zig with PlayStation 4's Orbis OS.
[In development.]orbpack
Set of tools to create and manipulate PlayStation 4's packages and their data.
[In development.]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.