Giter VIP home page Giter VIP logo

tachi's Introduction

Q?

I'm 22 and write code for a living. And for a hobby.

More specifically, I guess it's correct to call me a "rust programmer" at the moment, as that's what I'm primarily writing, but I have some pretty strong experience in Typescript.

Q?

Well, my main personal project at the moment is not public (In East-Coast parlance: "Stealth Mode"). It's not exactly unlike what I've done before, but I've definitely matured a lot as an engineer since starting it. It's a year underway now, and will be a while before it's even worth showing to the world.

I'm pulling something like 50 hour work weeks on this alongside working a real job; the exact kind of nonsense you want to get away with in your early 20s.

Q?

Tachi is the largest thing I've got publically released and contains a good 3 or 4 years of work.

While I wrote almost all of the code that powers the thing, at the moment I possess a sort of managerial role over Tachi, spending more time reviewing PRs than writing any code myself.

Designing it so that other people can contribute and help out with something they legitimately personally care about is a big pride point for me. I've met some excellent friends from it.

Q?

It is a rhythm game score tracker. That means that when people get scores in a game, they get ingested by Tachi and turned into nice dashboards and tables and graphs that people share with their friends.

Tachi boasts an impressive ratio of around 3000 users to 5 million scores. While it's not a lot of People, it's definitely popular within its niche.

Q?

Outside of programming, I read and I exercise, mainly. I used to do a lot of bouldering but haven't bothered in a while. Not had the money or time.

Q?

I'm a big fan of Pynchon, Wallace, those sorts, like... obsessively idiosyncratic, digressive, clearly mental.

Q?

Isn't it obvious?


If you like my work, you can support me on Ko-Fi.

tachi's People

Contributors

737465616466617374656e646572 avatar adamaq01 avatar albshin avatar beer-psi avatar bottersnike avatar cg505 avatar dependabot[bot] avatar emskye96 avatar ereti avatar fluzzarn avatar fruityenloops avatar grim657 avatar gyoo avatar hewoicvewse avatar hibikidesu avatar hoshikara avatar j1nxie avatar kanrik avatar kawachiboy14 avatar lopsell483224 avatar meta-link avatar minaangura avatar nyairobi avatar pfych avatar phileas0408 avatar saintnoodle avatar tachi-seeds avatar theodosiouth avatar yahooeny avatar zkrising avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

tachi's Issues

Goals

Goal support needs to be ported from Kamaitachi. We should consider changing the goal format - The additional power it brings (at the performance cost) isn't worth it.

file/json:batchmanual

Support our own batchmanual format, I guess? We should make a couple of extensions to it based on some new IDs that can be used to lookup data.

ir/json:direct-manual

A 1:1 engine for BATCH-MANUAL, but interprets the data from the body of a POST request, instead of as part of a multipart file upload. This makes things simpler for people who are integrating stuffs.

ScoreImport Update Score Data

Complex, and might not even be worth it.

The current scenario is that people have been able to technically stonewall themselves out of storing data - If they import a score with 100ex +HC on chart foo, and then later import a score with the same EX and lamp, but different metadata (i.e. more fields about gauge or whatever), the new data will be ignored (score documents will not be updated if the ID conflicts).

This was deliberate, but I wonder if it would be worth considering updating score metadata. Maybe? The performance hit would be HUGE, so this is low priority.

Sieglinde

I'm not funny.

This would be a sequel to Walkure, but more competently designed. It's possible this could be the default metric for BMS 7K.

As for 14K, I don't really know what we would do, I'd have to talk to the people who play 14K more.

Snover said he'd look into it, but he hasn't gotten back to me yet, If he doesn't get around to it, I probably will.

Complete Tachi-DB-Importer

Separate project. Lets just whip together an electron UI or whatever. Should be alright. Then we can pipe things to ir/direct-manual.

Tachi Discord Bot

Shouldn't be too hard. A good excuse to pull MMind out as a framework and go from there.

We can add more IPC hooks to it, and generally make it better.

Main issue with MMind right now is that its a glorified command line, and bordering on user-hostile.
It'll just be an even more glorified command line, but uh, atleast it'll be cooler. Low priority, anyway.

ir/usc

Support for USCs IR mode

file/solid-state-squad

Support for the XML exported format of SOLID STATE SQUAD. This is a legacy format.

Some care needs to be taken with respect to parsing XML.

PMS Support

Seems to be in demand, can leverage ktchiIR to send this over.

Classes

Formally known as dans, but named classes in Kamaitachi so it can also be used for jubeat's colours and so on.

These should be ported. Could be handled in score-import-main.ts as a post-cycle hook. probably.

I guess the main issue is actually knowing when or how to update these. Certain requests (mainly IR requests) provide metadata that lets us update classes. Sometimes, a class is dependent on a rating property instead of IR info (i.e. skill > 6000, rather than IR saying you are kaiden), so this definitely seems rather import-dependent.

We could have something like a set of importType "handle class update" hooks, but maybe they'd need to be returned from the parser as things like file/json:batch-manual could cause obvious generic-issues.

Will sleep on it, but could be more of a pain than initially thought.

versioning and isAvailable should be pulled out and into chart-by-chart basis instead of song basis

Although the latter works, its transparently a hack. This needs to be pulled out unto chart documents.

This would add some overhead to chart calls, but ultimately shouldn't be that bad. We're allowed to store duplicate difficulties now, maybe we should change up our system a bit so that any difficulty name is legal? This wouldn't actually be an issue for anything other than colorizing difficulties. -- Just storing old charts under "DJT ANOTHER", and hidden by default? seems sensible.

Sessions

There's no session code available at the moment (We're referring the Kamaitachi's "score sessions", rather than authtokens).

Needs to be sorted out, but at the moment is just stubbed.

Folders

Needs to be ported for obvious reasons, but we should probably investigate optimising them.

Unlike goals, I think it's reasonable for these to stay as meta-queries, but limiting them to only songs-charts (and storing relevant data as dataprops) seems reasonable. Maybe we could add a third option for routing through tierlists, but I think that could just be done in post.

Regardless, we can make some obvious improvements by cacheing the returns of folders (since they are static, pretty much) and using those instead of ever fetching things again. This would improve performance on goals, too, since we could perform reverse lookups and normal lookups on folder chartIDs.

User Game Stats

Needs to be ported from KT. Should be decently simple, maybe. This is related to #462, too (sorta?).

Could be done tonight, seems easier than writing goal support ๐Ÿคฎ

ir/json:fervidex

Support for fervidexes' onScore hook - That is, when a score is posted from the score screen.

Milestones

Milestones need to be ported from Kamaitachi. We should look into creating "Milestone sets" (it's turtles all the way up!), so things can be grouped more appropriately.

We also need to completely redo a lot of the existing milestone goals -- they're broken in creative ways.

Update IIDX-INFO data for K%

IDK if the site has been updated yet, but we should eventually go and update our data (maybe when bistrover ends?)

ir/beatoraja

Support for the beatorajaIR as specified in ktchiIR.java

Change ImportTypes Syntax

We could just go for something like

(method of entry):(filetype):(name)

such as

file:csv:eamusement-iidx
api:json:arc-iidx

this seems more reasonable

User Game Stats Thorough Testing

Coverage for UGS is rather low. It's stable from integration tests hitting it, but some unit tests wouldn't hurt. Low priority, though.

ir/chunitachi

Need to speak with my favourite soup fella about this, since ATM chunitachi uses direct manual, when we could probably provide a more dedicated version of IR-style hooks for them.

Webhooks

Lower priority, not really needed for MVP.

We could investigate setting up webhook support, so people could create their own ktchi-dependent bots, or set up channels in their servers or whatever. I doubt anyone would ever use this though, so it's lower priority. Maybe I'll find some use out of it.

Investigate Storing PBs

Motivation: Getting someones "PB" is a very common operation. This was initially optimised for Kamaitachi 1.6 not long ago, with the isScorePB and isLampPB flags. The main issue is that these are disjoint flags, and don't exhaust all states of a "pb".

Functions like AutoCoerce handle the joining of isScorePB and isLampPB, but it's a weird performance hit.

The other issue is that there are other things (like BP in iidx) which may be under neither flag (although this is rare). Could we perhaps do something like a "pb-scores" collection which is updated on score-submission? This would be heavily optimised, and reduce calls to things like AutoCoerce.

Downsides: Heavy redudancy! We're copying score documents, more or less. We're conjoining scores that can't properly be referenced, either.

This should probably be sat down and thought on. We'll see how everything looks when we approach the tail end of the score import cycle, since that should give us a better idea. I think this might be good though.

ScoreQueue may hold scoreIDs that need to be deduped.

It is possible for a user to submit two identical scores in the same import. This could result in a scoreID collision mid-air, as the scoreQueue holds the scoreID that needs to be checked. This could be trivially worked around, I think?

Possibly. It could also end up as a race condition.

Needs investigating?

OBS Integration

Port from Kamaitachi issues. I have some decent ideas for this, should work out nice.

ir/json:fervidex-static

Support for fervidexes static score submission feature (i.e. onCardIn requests). This produces less data than the alternative.

Session Testing

No tests are wrote, should probably get on that - Surprisingly, there isn't a lot to test.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.