Skip to content
View AgustinSRG's full-sized avatar

Highlights

  • Pro

Organizations

@bisite @AIRInstitute

Block or report AgustinSRG

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
AgustinSRG/README.md

👋 Hi, I'm Agustín San Román

  • 💼 Working as a software engineer for AIR Institute.
  • ⏳ 6 years of experience in the software industry.
  • 🎓 Degree and master's degree in computer engineering from University of Salamanca.

📫 How to contact me

🎯 Personal projects

I have worked on several personal projects and published them under open source licenses.

You can find a complete list of my personal projects, with a brief description and links to the repositories below.


📌 Featured projects (Click to expand)

Personal Media Vault

  • 🎯 PersonalMediaVault is an open source tool you can use to create an encrypted, easy to backup and easy to access media gallery. It is a privacy and usability focused project, prioritizing keeping media assets private while being able to access them in a convenient and efficient way.
  • 🛠 Developed as a web application in the Go programming language for the backend components, and HTML + CSS + TypeScript + Vue for the user interface. The project also includes a product website powered by Hugo + Docsy and a CLI tool developed in the Rust programming language.
  • 🌐 PersonalMediaVault product website
  • 🧬 Main repository: PersonalMediaVault
  • 🧬 Website source code: pmv-site
  • 🧬 CLI tool source code: pmv-cli
  • 🧬 Encrypted storage library: encrypted-storage

RTMP server and video streaming tools

  • 🎯 This project consists on multiple backend tools for developing video streaming platforms. This includes an RTMP (Real Time Messaging Protocol) server and several tools to encode and server streaming in the HLS (HTTP Live Streaming) format.
  • 🛠 The tools were developed in the Go programming language.
  • 🧬 RTMP server: rtmp-server
  • 🧬 Streaming infrastructure tools: tcp-video-streaming
  • 🧬 HLS WebSocket CDN: hls-websocket-cdn

ImageToMapMC

  • 🎯 This project is a desktop application for Linux and Windows to generate Minecraft maps from images. It can be used by server administrators to generate the .dat files to import into their servers. It can also be used to generate schematics to build the map in survival mode.
  • 🛠 The application was developed in the C++ programming language, using the wxWidgets GUI library.
  • 🧬 Source code repository: ImageToMapMC

Showdown ChatBot

  • 🎯 This project is a chat bot for the popular Pokémon simulator Pokémon Showdown. It provides room staff many features like automated moderation, games and custom commands. It can also play battles automatically using a simple decision algorithm. This was my first open source project, being used in production for the Spanish room since 2015.
  • 🛠 Developed in JavaScript, for Node.js.
  • 🧬 Source code repository: Showdown-ChatBot

Typescript bean-like ORM

  • 🎯 This project is a generic object relational mapping framework for TypeScript and NodeJS. The main purpose is to abstract the database logic from the web application, allowing to change from very different databases (like MySQL and MongoDB) simply changing the data source of the ORM. It is promise-based and the drivers are separated from the core, meaning you only need to import the ones you want to use.
  • 🛠 Developed in TypeScript.
  • 🌐 Code generation tool
  • 🧬 Main repository: tsbean-orm
  • 🧬 Drivers: tsbean-driver-mysql | tsbean-driver-postgres | tsbean-driver-mongo
  • 🧬 Driver template: tsbean-driver-template
  • 🧬 Code generation tool: tsbean-codegen

WebRTC CDN

  • 🎯 This project is a media content delivery network based on the WebRTC protocol. It allows for sending and receiving media streams in real time from the Browser. The use of a CDN instead of peer-to-peer communication can be useful to reduce the bandwidth requirements of the users. For example, in a call of 10 people, instead of having to send the media stream to all the 9 other participants, it sends it to the CDN, which distributes it to the rest of participants.
  • 🛠 Server developed in the Go programming language. Client developed in TypeScript.
  • 🧬 Main repository: webrtc-cdn
  • 🧬 JavaScript client: webrtc-cdn-client
  • 🧬 Experiments: webrtc-publish | webrtc-forwarder | webrtc-video-filter

📂 Other projects (Click to expand)

Smart Contract Wrapper

  • 🎯 This project is a TypeScript library that can be used to simplify the interaction process with Ethereum smart contracts. You can generate a wrapper from the contract ABI, allowing to interact with the smart contract calling the wrapper methods.
  • 🛠 Developed in TypeScript.
  • 🌐 Smart contract wrapper generator
  • 🧬 Source code repository: smart-contract-wrapper

Async tools for JavaScript

  • 🎯 This project is a JavaScript library that provides tools to work with asynchronous functions in JavaScript. It includes and async interval (waits for the async function to end before running it again), an async queue, an async semaphore and an async value provider.
  • 🛠 Developed in TypeScript.
  • 🧬 Source code repository: async-tools

JavaScript object sanitizer

  • 🎯 This project is a JavaScript library that provides a convenient way to sanitize untrusted objects (for example, the ones provided by the user). Ensuring an object follows an schema allows for accessing its properties without the possibility of crashes or unexpected behaviors.
  • 🛠 Developed in TypeScript.
  • 🧬 Source code repository: javascript-object-sanitizer

Basic request library

  • 🎯 This project is a basic request library aimed to be used by the frontend of web applications to communicate with the backend. It provides a way to define API bindings (to ensure parameters are the correct types and error are handled thanks to TypeScript) and it also provides named requests, to automatically abort duplicate requests.
  • 🛠 Developed in TypeScript.
  • 🧬 Source code repositories: request-browser | request-axios

Pokemon Showdown bot library

Parallel request controller

  • 🎯 This project is a backend component to control parallel requests. The main use case for this component is to impose limits on parallel requests when using multiple web servers for horizontal scaling.
  • 🛠 Server in the Go programming language. Client developed in TypeScript.
  • 🧬 Source code repository: parallel-request-controller

Other small libraries and tools

Project Category Language Description
genv Library Go Golang library to read and parse environment variables.
glog Library Go Golang library for logging.
go-simple-rpc-message Library Go Golang library that implements a very simple RPC message system to be used in a text-based communication system.
go-child-process-manager Library Go Golang library to ensure all the child processes are killed if the main process is killed.
go-tls-certificate-loader Library Go Golang library to load TLS certificate and key.
crystals-dilithium-js Library JavaScript Javascript implementation of post-quantum signature algorithm: CRYSTALS-Dilithium
Text-Transform Library JavaScript Library to build simple text transform tools you can run in your browser.
psim-log-to-replay Tool JavaScript Simple web tool to turn a Pokemon Showdown battle log into a replay.
eth-test-node-action CI Shell GitHub Action to setup an Ethereum node to test Smart Contracts.

Pinned Loading

  1. PersonalMediaVault PersonalMediaVault Public

    Web application to store media files (video, audio and pictures) in an encrypted storage, and visualize them using a web browser.

    Vue 3

  2. rtmp-server rtmp-server Public

    RTMP server implemented in Golang

    Go 8 1

  3. ImageToMapMC ImageToMapMC Public

    Minecraft map art generator. Can be used to generate both structure and dat files from images.

    C++ 2

  4. Showdown-ChatBot Showdown-ChatBot Public

    Pokemon Showdown Bot for Node JS

    JavaScript 6 20

  5. tsbean-orm tsbean-orm Public

    Typescript ORM for NodeJS

    TypeScript 2

  6. webrtc-cdn webrtc-cdn Public

    Live media content delivery network based on the WebRTC protocol.

    Go 4