ATTN: SIBRPUNKS, BLASEBALL FANS, AND CAPYBARA ENTHUSIASTS

The Society for Internet Blaseball Research is seeking an answer to an important question over the Grandito Siesta: What is the most cursed way to watch a Blaseball game?

To answer this, we will be hosting the first Official SIBR Hackathon! Starting Aug 2 – Sep 5, participants will have the challenge to create new and interesting ways to watch Blaseball. All levels of interest and all definitions of "watch Blaseball" are accepted.

At the end, entries will be ranked by a small group of Professors and surprise secret guests according to three criteria: Cursedness, Technicalness, and Accessibleness:

The highest ranked in each category will be eligible for a $50 USD donation to a charity of their choice, and the highest overall combined rating will be eligible for $100 USD!*

*Participants may opt out of ranking for whatever reason. If this feels like competition and that stresses you out, or you don't like being perceived, or anything else, no worries! Just let us know in your submission.

Some of our Professors have so kindly offered ideas to take or leave to get the creative juices flowing!

Rules

As this is happening over the Siesta where games will not be happening, we invite you to use before.sibr.dev and/or replay.sibr.dev (or make a new replayer as your submission). Documentation for our tools can be found at our website (sibr.dev) and you are also invited to join us on Discord (discord.sibr.dev) if you need additional help, are looking for a group, or just want to hang out. Information about the contest will be officially shared on twitter, as well as in the SIBR Discord in the #😈-snackathon-general channel.

Submission

Submit as many projects as you want via this form before Sep 5!

If you want to opt out of judgement, let us know in the additional information.

A panel of seven (7) judges from the SIBR College of Augury will rank submissions according to the above judgement criteria. There may also be special guest appearances from ||| |||| ||||👁.

Getting Data

While programmatically connecting to a live data stream isn't strictly necessary, we do have options for you to play with streaming data.

Typically game updates will be delivered as JSON in the format documented here.

You can get these game updates in a variety of ways:

Streaming before.sibr.dev and api.sibr.dev/replay

You can find SSE streams emulating historic Blaseball data at https://before.sibr.dev/events/streamData and https://api.sibr.dev/replay/v1/replay?from=2020-08-30T01:00:08.17Z

JavaScript


    stream = new EventSource(`${BLASEBALL_ROOT}/events/streamData`);
    stream.addEventListener("message", (event) => {
        const games = JSON.parse(event.data).value?.games?.schedule
        console.log(games);
    });
    

Python

Blaseball-Mike is a convenient wrapper around the Blaseball and SIBR APIs.


    async def playback():
        async for event in stream_events(url="https://before.sibr.dev/events/streamData"):
            if not event:
                continue
            print(event)

    if __name__ == "__main__":
        loop = asyncio.get_event_loop()
        loop.create_task(playback())
        loop.run_forever()
    

Polling Chronicler

Chronicler is the backend that powers tools like Reblase and Before. It provides a REST API to query historic data. Full documentation can be found here

cURL


    curl "https://api.sibr.dev/chronicler/v1/games/updates?limit=10" | jq .
    

Polling Eventually

Eventually provides a query interface over Feed events, and as such can also be used to reconstruct game logs, for example with Feedeck. Full documentation can be found here and our understanding of the Feed data model can be found here

fetch


    let params = new URLSearchParams();
    params.append('limit', 10);
    fetch(`https://api.sibr.dev/eventually/v2/events?${params.toString()}`)
        .then(res => res.json())
        .then(js => console.log(js));
    

Signed

Judge c|||||| ||||, Judge ||||e, Judge ||||||||||||| ||||||||||||||, Judge |||||||||, Judge |||||| ||||||, Judge |||||| r||||||, Judge |||||||||||, Assoc. Judge ||||||, Assoc. Judge |||||, Assoc. Judge |||||