Skip to content
View jim3692's full-sized avatar

Highlights

  • Pro

Organizations

@college-resources
Block or Report

Block or report jim3692

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Please don't include any personal information such as legal names or email addresses. Maximum 100 characters, markdown supported. This note will be visible to only you.
Report abuse

Contact GitHub support about this userโ€™s behavior. Learn more about reporting abuse.

Report abuse
jim3692/README.md

Hi there ๐Ÿ‘‹

  • ๐ŸŒฑ Iโ€™m currently learning

    • OpenShift
    • CCNAv7
  • ๐Ÿ’ฌ Ask me about

    • Docker
    • Linux
    • Node.js
    • React.js
    • MikroTik
    • Salesforce Apex
  • ๐Ÿ“ซ Reach me @ dim@knp.one

  • ๐Ÿš€ Some details about my projects

    DISCLAIMER: None of the projects are currently live as I am working on configuring a new server cluster.

    It started as a school project. The requirement was to develop a simple online game using MySQL, PHP and HTML. However, me and my team wanted to go beyond those limits. We wanted to develop a Monopoly clone that would be inspired by the life in our college.

    The game runs on a WebGL build of Unity3D and it also uses UniRx, UniTask and a custom Socket.io client based on NativeWebSocket. UniRx helped to keep the code as minimal as possible and UniTask helped with threading issues we had due to the single threaded nature of Web Assembly. The Socket.io client was something I had to develop as all the implementations that we found were either faulty or closed source. Adding to that, I also had to override Unity's native cookie handling as it occasionally refused to send the required cookies to the server.

    The server side of the game is built on Express.js/Socket.io and it uses a MongoDB database. We chose MongoDB because having each game in a separate document allowed us to have very simple queries. However, that does not imply that we hadn't any challenges. Authenticating Socket.io connections using Express's sessions was harder than expected. But, thanks to some npm packages and some code magic with Rx.js, everything synced perfectly.

    But besides all the difficulties we made it in less than a month.

    This is a hobby project that is still under construction. It will be a monorepo for the whole College Resources project, which currently consists of college-resources/api and college-resources/web.

    • college-resources/api is our GraphQL API and it is based on Express.js and Apollo Server. For user authentication, it uses JWT tokens that are generated by Auth0. Its data is stored in a MongoDB database. This repo is about to get archived as we are trying to restructure the College Resources project.

      This API was my first opportunity to design a Node.js based web-app. A lot of mistakes were made, starting from the database choice which is not only slow compared to other DBMS, but it also lacks the flexibility that SQL provides for queries. The new GraphQL API will be based on Nest.js and it will use a PostgreSQL database instead.

    • college-resources/web is the Next/React + Redux client of the project. Once again, the server is based on Express. Express is responsible for the sessions and the Auth0 interactions, as it handles both Password Login and the Authorization Flow (with a little help from Passport.js).

      Express also acts a proxy for the API. This decision was made in order to keep the API tokens away from the end users, and better protect them against XSS attacks. All tokens are stored in the session store and get injected to the API requests.

    Another school project. It is a Dominoes game that is limited to MySQL, PHP and HTML. As claimed in the requirements, we were not allowed to use external libraries and/or frameworks. So, I had to develop my own component framework. It supports lazy loading, props, and component swapping. Since there is no toolchain, all the component files need to be registered in a JSON file and there is no special syntax for the templates. Everything is done using special data attributes on div tags.

Pinned

  1. IceDBorn/pipewire-screenaudio IceDBorn/pipewire-screenaudio Public

    Extension to passthrough pipewire audio to WebRTC Screenshare

    JavaScript 147 4

  2. server.nix server.nix Public

    A flake providing a framework for steamlined declarative management of NixOS containers and VMs

    Nix 9

  3. arch-novnc arch-novnc Public

    Forked from Almo7aya/arch-novnc

    Docker container running ArchLinux accessible through novnc in a browser

    Dockerfile

  4. doh-docker doh-docker Public

    Docker Compose stack for DoH deployment with AdGuard Home

  5. college-resources/monopoliee college-resources/monopoliee Public

    IHU Themed Monopoly

    C# 2