Git Product home page Git Product logo

live-v3's Introduction

live-v3

Welcome to the ICPC Live Source Code Repository.

Run release version

  • Download release from https://github.com/icpc/live-v3/releases

  • Create contest config files

  • (Optional) Tune imported data, so it looks better

  • Run java -jar /path/to/jar/file --config-directory=/path/to/config/directory

    Check for more options by running java -jar /path/to/jar/file without arguments. Here is the couple most useful

    • --creds=creds.json -- The path to the credential file. It can be used to avoid storing credentials in the main config file.
    • --no-auth -- Disable auth in admin interface. It's useful if you are running the overlayer on localhost.
    • -p 8080 -- 8080 is default port to listen, but it can be changed.
    • --widget-positions=filename -- customize positions of each widget, see examples in config/widget_positions.json.*
    • --visual-config=filename -- customize colors, sizes, captions and other, see examples in config/visualConfig.json.*
  • (Optional) Check imported contest data

  • Add a source to OBS

    #root > div {
        background: unset;
    }
  • Use admin interface in your browser to control overlay

  • Check general broadcast production schema for other details of typical setup

  • Check emulation mode part of development doc for testing your setup before the contest started.

  • Check troubleshooting guide is something looks wrong.

  • Read our awesome auto-generated documentation for extensive settings.json and advanced.json usage.

Authorisation

For now http basic auth is used. If you try to login with user, which does not exist, it will be automatically created. First created receives admin rights. Others only receive them when someone with admin rights confirms, it's okay.

Consider, if you are okay with passing your passwords using plain HTTP.

If you don't need auth, you can disable it by --no-auth command-line option.

Using as a library

Check separate document

Run in development mode

Check separate document

Previous versions:

Other repos:

  • Script that collects competitive programming historical data for analytical information
  • Autoanalyst
  • OBS Video Scheduler Plugin with web interface
  • Outdated OBS plugin for shared memory (dll)

For more information, email [email protected]

live-v3's People

Contributors

arsnotfound avatar azat-ismagilov avatar brianvar avatar cubercsl avatar irdkwmnsb avatar kbats183 avatar klimarissa17 avatar kokx avatar kunyavskiy avatar ldvsoft avatar lperovskaya avatar maleksware avatar masha237 avatar masha238 avatar megaverkruzo avatar mond1c avatar nakinamo avatar nsychev avatar pandadtdyy avatar perveevm avatar pmavrin avatar temikfart avatar vvolochay 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

Watchers

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

live-v3's Issues

Overlay. Scoreboard Row doesn't expect undefined in scoreboardData

export const ScoreboardRow = ({ teamId, hideTasks, rankWidth, nameWidth, sumPenWidth, nameGrows, optimismLevel }) => {
const scoreboardData = useSelector((state) => state.scoreboard[optimismLevel].ids[teamId]);
const teamData = useSelector((state) => state.contestInfo.info?.teamsId[teamId]);
return <ScoreboardRowContainer>
<RankCell rank={scoreboardData.rank} medal={scoreboardData.medalType} width={rankWidth ?? SCOREBOARD_RANK_WIDTH}/>
<TeamNameCell teamName={teamData.shortName} width={nameGrows ? undefined : (nameWidth ?? SCOREBOARD_NAME_WIDTH)} canGrow={nameGrows ?? false} canShrink={nameGrows?? false}/>
<ScoreboardStatCell width={sumPenWidth ?? SCOREBOARD_SUM_PEN_WIDTH}>
{scoreboardData.totalScore}
</ScoreboardStatCell>
<ScoreboardStatCell width={sumPenWidth ?? SCOREBOARD_SUM_PEN_WIDTH}>
{scoreboardData.penalty}
</ScoreboardStatCell>
{!hideTasks && scoreboardData.problemResults.map(({ wrongAttempts, pendingAttempts, isSolved, isFirstToSolve }, i) =>
<ScoreboardTaskCell key={i} status={getStatus(isFirstToSolve, isSolved, pendingAttempts, wrongAttempts)}
attempts={wrongAttempts + pendingAttempts}/>
)}
</ScoreboardRowContainer>;
};

We can't expect that scoreboardData in ScoreboardRow isn't undefined also as in QueueRow

export const QueueRow = ({ entryData, isEven }) => {
const scoreboardData = useSelector((state) => state.scoreboard[SCOREBOARD_TYPES.normal].ids[entryData.teamId]);
const teamData = useSelector((state) => state.contestInfo.info?.teamsId[entryData.teamId]);
const probData = useSelector((state) => state.contestInfo.info?.problems[entryData.problemId]);
return <QueueRowWrap>
<RankCell width={CELL_QUEUE_RANK_WIDTH} isEven={isEven} rank={scoreboardData?.rank} medal={scoreboardData?.medalType}/>
<TeamNameCell teamName={teamData?.shortName ?? "??"} isEven={isEven}/>
<Cell width={CELL_QUEUE_TOTAL_SCORE_WIDTH} isEven={isEven}>
{scoreboardData?.totalScore ?? "??"}
</Cell>
<ProblemCell probData={probData} width={CELL_QUEUE_TASK_WIDTH} isEven={isEven}/>
<VerdictCell verdict={entryData} width={CELL_QUEUE_VERDICT_WIDTH} isEven={isEven}/>
</QueueRowWrap>;
};

feat: allow usage of locally hosted of images from Titles view

Feature description

Right now, images are required to be hosted via some external URL. Make it possible to use self-hosted images.

Motivation and possible use case

Two scenarios - one is that you are running a contest locally and cannot connect externally for some reason. Another is that you don't want assets to be publicly accessible at all.

feat: scroll last scoreboard page partially

To make scoreboards with little remainder nicer, we can just scroll the last scoreboard page for the remaining number of lines. Will look super nice for two-page scoreboards

feat: Allow to have noop cds

Feature description

It should be possible to run overlayer with noop CDs, which will produce empty contest

Motivation and possible use case

Sysops were unhappy we were querying CDs after the closing ceremony because they were not sure if they can disable it.

feat: filtering for teamView

  1. В инфо хочется несколько режимов - показать все решенные, показать все задачи которые трогали. Я бы ещё подумал над тем, чтобы показывать последние несколько попыток. (?)

Rework advanced properties and hot reloading

Add mapping from hot reloading structure to partisipant xml.

List with team ids (may be in contest.xml) (it's immutable).

Mutable list with special data (team video urls, team and cute full names, special start time).

bug: Build results in StackOverflowError

Context (Environment)

Trying to build the application using ./gradlew build or running using ./gradlew run.

Expected Behavior

The build succeeds without an error, and its possible to run ./gradlew release afterwards and use the resulting jar, or run the application.

Current Behavior

When running ./gradlew run or ./gradlew build, the build results in a java.lang.StackOverflowError, failing the build. Full logs: https://gist.github.com/kokx/ca709aebf3f8274235d78bfa81f43019

Possible Solution

Removing sniper-tools from from the include in /settings.gradle.kts allows the build to succeed.

Steps to Reproduce

  1. Run ./gradlew build
  2. For more information, see the logs in https://gist.github.com/kokx/ca709aebf3f8274235d78bfa81f43019

feat: Show submission language

Show submission language in queue

Feature description

We could show the programming language for runs in queue.

Motivation and possible use case

I think some viewers are wondering — what languages the contestants are using.

bug: fix statistics widget location

Статистика в кривом месте. Также кажется что она не согласована с таблицей результатов, особенно после заморозки

feat: Add keyboard shortcuts to admin

  1. В целом мышкой пользоваться довольно неудобно - много маленьких кнопок. В будущем хочется вообще задавать админке system-wide сочетания клавиш, чтобы можно было на микро-стимдек мапить.

@azat-ismagilov

Correct events loading in clics contest emulation

Merge may give not all events here

override suspend fun loadOnce() = coroutineScope {
val (_, contestInfoFlow, analyticsEventFlow) = launchLoader()
val analyticsEvents = merge(contestInfoFlow, analyticsEventFlow)
.takeWhile { it !is ContestInfo || it.status != ContestStatus.OVER }
.fold(mutableListOf<AnalyticsEvent>()) { ac, it ->
when (it) {
is AnalyticsEvent -> {
ac += it
ac
}
else -> ac
}
}
val contestInfo = contestInfoFlow.first { it.status == ContestStatus.OVER }
coroutineContext.cancelChildren()
val runs = model.submissions.values.map { it.toApi() }
ContestParseResult(contestInfo, runs, analyticsEvents)
}

feat: Support commentary endpoint

Support reading in commentary from the contest API:
https://ccs-specs.icpc.io/master/contest_api#commentary

It would be great to be able to show these in the ticker. Either by automatically including all new items for some time, or by being able to manually pick messages to add to the ticker.

It would also be nice to have single commentary message overlay. Similar to how social media comment overlays look like in similar tools.

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.