🎉 Spectral Wrapped 2023

Technology

This page briefly explains different projects and their codenames.

Projects

Currently active

  • Lordgenome (LRG2) — Stats Hub Core. A collection of scripts and tools to collect and process Dota 2 match data (PHP7, MariaDB) — API
  • Viral v1 — Live matches monitoring (PHP7, D)
  • d2s — Additional tools for monitoring and management (PHP7, Bash, D)
  • Hero Board (AngularJS)
  • Attenborough (Spectral Notifier) — Notifier bot and server monitoring interface (PHP7, ReactPHP, Bash)
  • Courier — Resources hub (PHP7)
  • Nerds Hero Builds — Interface for stats-based hero builds (PHP7.4)

In development

  • Lurker — An interface to search for matches and advanced stats of high rank players (PHP7)

  • Leyron — Analyst dashboard (ReactJS)

  • Simon (LRG3) — Stats platform oriented for Teams, Analysts, Tournament orgs and Enthusiasts. Rewritten and modern codebase for Stats Hub Core (PHP, ReactPHP, JS). Consists of following components:

    • Kamina — Set of monitoring and management tools, early version of the project, comparibility layer with LRG2
    • Viral — Live matches monitoring
    • Yoko and Leyron v2 — UI for Simon
    • Lagann — Custom built database layer
  • SampleText (PHP8, ReactPHP, JS)

Planned

  • Nami (Kittan) — Simon-based stats platform for LoL
  • Draft Simulator

Dropped

  • Guame (Simon v1, old LRG3) — Improved stats platform. First iteration of Simon, the development was supported and later stopped by Winstrike (PHP, ReactPHP, Angular)
  • Immortal Rank Meta API (on hold)

What is Simon

Simon is a Dota-oriented Stats Platform. It's aimed for use by Analysts, Teams, Tournament orgs and Enthusiasts.

Some of the most interesting (planned) features

  • Microservice architecture
  • Robust filters system
  • Generation of "reports" — cache for requests with specific filters (autoupdatable if needed) for quick access
  • Persistent daemons and multi-node support
  • ReactJS-based UI with server-side rendering (through PHP)
  • Custom database layer library

Stack

  • Backend: ReactPHP, PostgreSQL, Redis (also developer console)
  • Frontend: Custom framework + ReactJS
  • API: Custom engine

Answers to some questions

  • Why PHP? — Multiple reasons.

    • LRG2 initially started as PHP scripts (that I used in Python-like manner)
    • I don't want to rewrite everything from scratch
    • I really like PHP8 as a strong and mature languare with a strong toolset
    • ReactPHP allows me to achieve everything I have in mind
    • While PHP is not a strongly typed language, it still still has a strict mode and enough tools to control the code quality
  • What is ReactPHP? — It's event loop support for PHP. In a way ReactPHP apps do the same things as Node.js apps, but in PHP. This also allows to use the same codebase across multiple components and projects.

  • Why not Node? — Initially I wanted to rewrite everything using Node. But then kind of didn't want to. Also had a lot of old code. And no reason to switch. And an interest in trying out PHP8. And also there are all the technologies I need, so no need to switch.

  • Not afraid of performance issues? — No, PHP8 is quite fast. I might consider moving to something else in future, but currently I'm satisfied with what I can get. Well, of course, PHP8 or Node would not be close to performance of something like Java or Go. But my case doesn't require this kind of performance. It requires being able to reuse a single core library for dev console, match fetcher server, web API and UI, match monitoring and so on. Even if I'll need more resources, I have plans to solve this issue, but this is unlikely to happen in foreseeable future.