GithubHelp home page GithubHelp logo

neotenic / protobowl Goto Github PK

View Code? Open in Web Editor NEW
91.0 91.0 27.0 6.21 MB

real time multiplayer quizbowl

Home Page: http://protobowl.com/hsquizbowl

License: Other

CoffeeScript 37.26% HTML 2.15% JavaScript 35.08% Shell 0.04% Pug 7.06% Less 18.40%

protobowl's People

Contributors

antimatter15 avatar coffeeflux avatar davidgumberg 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

protobowl's Issues

Global leaderboards

This has some problems in that it could lead to cheating and such so we would have to implement measure to prevent that from occurring.

Move /static/less to /client/less or /less

I just realized that it's pretty useless to have the less in static because it's pretty much useless there. We could then omit the client folder from server deploys, which would reduce the actual code size about 50% by saving about half a megabyte.

The two options then are to have a top-level css folder or a subfolder of client. Since Ben's fork uses views as a sub-folder for html-style content, it might be a good idea to put less under client (or even possibly server) for that metaphorical symmetry server-html (content), client-css (display). But you could also say server-(html-css) because they do kind of go hand in hand, and then you can have shared and client both entirely code.

Serverless Multiplayer

One cool thing about the design is that every client is fully capable of behaving as a fully functional server. We're using this for offline, but it could be much more than that and do offline multiplayer.

In the near future we'll have WebRTC and serverless peer to peer connectivity, for low-latency Protobowl lan-parties. We can have a twenty-line p2p simulator running on any platform, Google App Engine, Azure, AWS, JVM, etc and use those as seamless fallbacks whenever the server does go down.

This doesn't actually have much in terms of practical application, but it's certainly technically interesting, and might help with our technical-audience pitch.

The main problem is with no trust mediator. If each client is by definition the same, which one will run the server code and which ones will self-subordinate to their natural state (cf. " Is not this simpler? Is this not your natural state? It's the unspoken truth of humanity, that you crave subjugation.").

So serverless multiplayer implies one of two approaches (there may be more, but I haven't thought of them yet)

The first is to retain the client-server architecture, but to have one client elevated to godhood, and all the other clients defer to his almighty reign. The problem is of course in picking which player to give such a status, and in handling an untimely death (however, this may be a non-issue since serverless multiplayer is designed itself as a fallback system, and should automatically be able to transition in advent of a coup d'etat).

The second option is to have each server activated, acting essentially in a synchronized offline mode. The problem here that arises is what exactly the synchronization/communication does, what do you broadcast, how do you verify it, and fix conflicts when they occur.

The simplest implementation of the second option is for every action to be sent two places, to the local server, and externally broadcast to all other clients. Servers receive external events and apply it to the local state.

The problem is of course loss of synchronization. Race conditions will not get resolved in the same way for everyone, and players would end up on different questions.

One way to resolve this is to check for consensus first, before applying anything to the server's internal state. That is, you contact all peers with your current (normalized) timestamp, and once everyone's acknowledged that you have the right to speak, you send along your actual message.

Then there's the problem of computing a "normalized" timestamp. Well, if you're just dealing with the fallback case, fine, you can retain whatever sync_offset the central authority had decided on when you were connected, but how do you create a normalized timestamp in an entirely decentralized environment?

Tips and a Tutorial room

Turn off-able tips that say stuff every couple mins and a tutorial room with lots of tips / possible arrows and a walk through that is constantly cycling. Also we could have some kind of video or something of this nature as well, i don't know.

Text to Speech

The only problem with this is that if we match speaking speed to read speed it becomes almost completely impossible to understand using Speak.js. I don't know if there is a better alternative that is free but it doesn't seem that there is.

Private persistent conversations

Not sure about the feasability of this from a storage standpoint.

Basically being able to chat with someone from in the profile area / send a message that they will get next time they are on protobowl. Also any private chats inside rooms are stored here for later so that you can continue a conversation with someone / find them.

Add Jeopardy Questions

Under /jeopardy/:blah, not sure how well these will work though since they're so short and such

Crisis Management tools

Specifically the ability to redirect all new traffic to another location and being able to move people to different rooms. Probably some other general crisis management tools would be cool too.

The Hound of the Protovilles™

Mr. Sherlock Jitsu, who usually has very high latency in the afternoons, save upon those not infrequent occasions when he was restarted earlier, was running with a median latency of 625.7ms.

"Well, Watson, what do you make of it?"

Jitsu was running with his root shell hidden from view, and I had no means of discerning the precise etiology of its performance strains.

"How am I supposed to know what causes your present lag issues? I believe you do have a gaping memory leak on the back of your head."

"I have, at least, a well-polished mechanism for evading your diagnostic skill, my dear Watson. For I am a true master of disguises, you see."

"I think," said I, following as far as I could the methods of my PaaS companion, "that Dr. Socket.IO is a successful, stable library, well-esteemed since those who know him give him this mark of their appreciation."

"Good!" said Jitsu."Excellent! There is almost certainly no way it is a fault of his, that our situation is afflicted by such a terrific malady."

Temporary unlock settings for certain user

so like if you click on the grayed out icon
i want it to come with some kind of vote-to-make-this-person-an-admin-for-sixty-seconds
then i can change the default to be 100% locked
or i can change the default to be whatever the majority was at time of logging in
and locked if public

Should all bans go to the same room?

As in, if someone gets banned from any and all rooms, maybe they should be sent to /b because it might make a degenerate but still active group of like minded trolls, and that looking glass will a) teach them to reform their ways or b) distract them enough that they don't focus efforts on evading our schemes

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.