Skip to content
Jenna edited this page Jan 15, 2019 · 38 revisions

1/10/2018

Demos

Kenny (PR148, PR150)

  • Demo 1 - Puzzle auth filtering (admin / author)
    • Demo event now makes the creator author of most but not all puzzles
    • Puzzle state map & puzzles list will filter if you're acting as an author! :D
    • Prerequisites can show up even for non-authors if they have the IsGloballyVisiblePrerequisite
      • As things that you can add as prerequisite
      • They won't be available for you to set your puzzle as a prerequisite
    • Open question on how it works with waves - P1? They had been on the P0 list (currently no equivalent to timed unlocks)
    • Can still set min prerequisites (same functionality as the old system)
  • Demo 2 - Bulk response add
    • Instead of having to add responses one at a time, you can now add them in bulk!
    • Supports copying over from Excel!
    • Can include empty lines & they're handled nicely (don't have to finish out each row)

Jenna (PR155)

  • Role-aware team pages
  • List of all teams for admins / authors, just team details for players
  • Clicking on "Team" as a player will take them specifically to their team
  • Members + Details + Status options for admins, just Status for authors

Jay

  • Demo - custom site for his own module / meta setup for PuzzleHunt
  • Ask for integration with full site - unlocking clues (clues + annotations - two tables)

Megan (PR151)

  • Page-wide authorization! (not for content on the page - filter that separately)
  • [Authorize(Policy = IsRegisteredForEvent")] < added to the class right before the class declaration to enforce a policy (example at the top of the EventSpecificPageModel, which checks that you are registered for the event)
  • Info is taken from the route (so make sure to match other routes so we're using the same format)
  • Can use "And" by listing multiple (but can't use 'or' - need to use separate policies)
  • Can be overridden using 'allow anonymous' for FAQ pages
  • List of policies are under Areas/Identity/UserAuthorizationPolicy (Megan can add more if needed)AuthorizationPolicy
  • Can also use OnPageHnadlerExecutionAsync example in EventSpecificPageModel to see how to check for something specific within the page

State of the union

Happy New Year!

We have a few key dates coming up:

  • Jan. 15th: PuzzleHunt go / no-go call on using the new website
  • Mid-feb: PuzzleDay Alpha
  • March: PuzzleHunt Beta

We are planning on having a recommendation for PuzzleHunt to help them with their decision. There was a larger discussion of gaps and pros/cons that will be included in that doc. It can be found here.

At a high level, the main missing components and our plans to address them are:

  • Deployment - Megan believes we are very close and is going to attempt deployment over the weekend to her own subscription. We'll have the conversations with UR about funding ideally next month to find a more permanent home
  • Authorization - A lot of pieces of the site don't include proper auth checks. With Megan's updates to policy we expect these to be quick to add
  • Usability - Jenna is already working on this one and we believe that for PuzzleHunt at least players may be willing to put up with a sub-par UI as long as they enjoy the puzzles themselves
  • Team registration - Morgan will be working on this next
  • Development velocity - We fell off over the holidays, making it questionable that we'll be able to finish in time. To address this, Kenny, Megan, Morgan, and Jenna all re-confirmed their commitment to development with the understanding that we're about to enter a crucial crunch time. We'll also be having weekly meetings much more heavily focused on working and we'll have a hackathon Sunday afternoon.

Open questions

Team registration: We can use invite codes or we can build functionality into the site to make it possible for users to join teams directly. Morgan will be investigating a solution here.

What's happening next

Jenna

  • Recommendation doc for PuzzleHunt
  • Team navigation + auth
  • Unbreak login button? (login / register)

Morgan

  • Team registration

Kenny

  • Auth cleanup for puzzles
  • Event routing by name instead of integer (URL cleanup)

Megan

  • Auth policies
  • Deployment

12/6/2018

Demos

Morgan (coming soon)

  • Hints! With hint costs! And unlocks! And sorting! :D

Megan (PR111, PR118)

  • Auth things <3
  • The app has been deployed!

State of the union

Happy late Thanksgiving! :D

Our go/no-go for PuzzleHunt is going to be in January. We should be ready to make a call once we get back from break. Jenna will send out a poll early January so we can pick a meeting time.

We think we'll be close to finishing our P0 list after we make all pages user and role aware with a few exceptions (team invitations being one). In order to make that work happen, we're going to have a hackathon specifically focused on making all existing pages auth-aware. We'll come with examples so that we can hit the ground running :)

Open questions

We'll need to look into getting a nice URL for the page - worst case we use an aka link for a while. We think we own some of the domain names for puzzles.

What's happening next

Megan

  • Deployment stuff (KeyVault & app settings)
  • Authorization things (possibly page policies for the hackathon)

Morgan

  • Puzzle wave releases (manual at least)

Jeremy

  • Finishing things up & splitting the feedback view

Jenna

  • Headers & roles & titles (oh my!) (for the hackathon)
  • Sending out hackathon poll
  • Sending out next meeting poll after holidays

Kenny

  • Import / export
  • Possibly menu team things

11/7/2018

Demos

Kenny (PR108)

  • You can now set up a demo event with the click of a button!
  • Demo events can be improved by anyone!
  • BUNNIES!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Megan (PR111)

  • AUTH IS A THING!
  • IsAdmin / IsAuthor methods

State of the union

We estimate that deployment costs will be less than $200 so we're not worrying about securing funding yet

Open questions

Impersonation

  • We would like to be able to validate a team view
  • We would like to be able to check that things are not viewable by real players
  • Hopefully this would also make it easier to do development (nice to have)

Import / Export

  • Module based?
  • History based?
  • Kenny is thinking about a proposal

What's happening next

Jessica

  • Submissions - admin aware

Kenny

  • Import / export

Lambert

  • Other pages - admin aware

Jenna

  • Still doing headers

Morgan

  • Hints

Megan

  • Auth

10/24/2018

Demos

Kenny (PR93)

  • Prerequisites! Add / remove!
  • Dependencies! Add / remove!
  • Can jump between them!
  • MinPrerequisiteCount = minimum! You can have 3 prerequisites but if MinPrrequisiteCount is 2 only 2 of the 3 are needed to unlock the puzzle
  • Solve all for !!!StartEvent!!! Starts the event!
  • You can play the event and things unlock!!! :D :D :D

Jenna (PR98)

  • Can now view a list of all users on teams in an event!
  • Includes copy-able list of e-mails!
  • Team member lists also include copy-able list of e-mails!

Lambert (PR101)

  • Defaults for events and puzzles!!! :D :D :D
  • Can set lockout policies for events
    • Putting explanations in will be a later error
  • Shows lockout timeout!
  • Locks you out for realsies if you fail too many times!
  • Can start an e-mail to 'the admins'
    • In future will need to be puzzle specific to account for module authors
  • Can't reset timeout yet
  • Defaults in master, timeouts still in PR

Jessica (PR105)

  • Blocks submissions after the event! :D
  • Allows submissions during the event! :D
  • Changes link text to say 'view past events' & adds text to the top of the page!
  • Even if the page was previously loaded then it will validate and block you!

State of the union

We're getting pretty blocked on users and the current navigation is getting frustrating. We're working on both of those.

Open questions

New issue where deleting submissions or deleting teams with submissions crashes. Investigating.

What's happening next

Jeremy

  • Open / close team registration

Kenny

  • Test event quick create (so we don't have to keep re-making everything whenever we reset the database)

Lambert

  • Ability to undo a team lockout for a puzzle

Jessica

  • View all puzzle submissions from all teams for a specific puzzle

Jenna

  • Layout things / improved page navigation / improved titles & headings

10/10/2018

Demos

Megan (PR82)

  • Login! :D
    • Can click login
    • Can login via microsoft
    • Can go to register page
    • Yay!
  • User update pages!
    • Edit
    • Not yet delete

Kenny (PR76, PR78)

  • State map resolves ties! :D
  • Standings (team view showing team ranks)
  • Fastest! (both solve count and times)
  • Discussion - show teams with no solves in standings? Old site doesn't :)

Jessica (PR60)

  • Can add responses! :D
  • Can submit answer & view previous sumissions
  • Locks submissions after corrrect
  • Text changes to 'see answers' instead of 'submit answer'
  • Shows solve time!
  • Shows as solved on author site!

Jenna (PR84)

  • Can view team members!
  • Can add team members

Lambert (PR83, PR64)

  • Events w/ main page!
  • Teams & puzzle links in the top bar work!

State of the union

By the end of the day of the meeting, we had 15 / 36 P0s completed! This is 9 more than we had at the last meeting.

That means we're back on track! :D

There's definitely still more to get done but that is a very good sign :) Let's keep it up!

Open questions

No new open questions :)

What's happening next

Jessica

  • Start / stop event

Kenny

  • Top level menus
  • Edit puzzle dependencies

Lambert

  • Lockout notice on puzzles page

Morgan

  • Hints / user things

Megan

  • Auth

Jenna

  • View all users

9/26/2018

Demos

Morgan (PR71)

  • Finishing out file upload mechanics (new File Management page)
    • Can specify puzzle pdf, answer pdf, materials (things that are available after solving the puzzle, such as music files), and solve token files (things that are available after solving the puzzle)
    • Can multi-upload for materials & tokens and can delete
    • There's some bonus refreshing - sometimes not all of the files were showing up for multi-files
  • Puzzle name now links to the PDF :D (only if you have a puzzle pdf)
  • Adding a new puzzle / answer pdf replaces the old one
  • Kenny politely requests a
    tag to separate headers :) (just to keep himself from going crazy)

Jeremy (PR74)

  • Feedback button now shows up for each puzzle!
    • Shows author view with list of all feedback, including time, text, difficulty, and fun
    • Includes page for adding feedback that auto-grabs time (we should check UTC)
  • Suggestions:
    • Have feedback per user instead of per team (not started, but coming up)
    • Have a separate view for author / player
      • Note: This got done during the meeting :D

Kenny (PR70, PR76)

  • Join between puzzle & team tables to get the page to show by a default :D
    • Still separate when writing to the two tables (check that the record exists before writing)
    • Slight bug with single unlock, but he'll fix it :)
  • State map!!!
    • Also using sparse information
    • Includes links to status by team and status by puzzle
    • Colors work!!
    • Exact match for what we used to have (including style sheet)
    • Bit of a ragged border at the top column

Lambert (PR77)

  • Set contact e-mail of an event, which is used in the footer link
  • Added footers! :D

State of the union

In the last 6 weeks, 6 P0s were completed (2 P0s per 2 weeks).

There are about 10 weeks and 30 P0s left (6 P0s per 2 weeks).

At that rate, we would finish in March 2019.

We are not on track.

:(

What do we need to do?

In order to finish on time, we need everyone to complete about one P0 requirement per person per week. We think we can make that happen.

What's blocking us from doing that and how can we unblock ourselves?

  • Authentication - we don't currently have the ability to distinguish between players / admins / authors nor can we determine which player we are
    • Workaround - we can work on the different admin / player pages, and as long as they're separate pages we can add the auth pieces in later
    • Morgan & Jenna offered to be available to help Megan with any blocking auth things
  • Documentation / incomplete knowledge (C#, Razr, etc.)
    • Jenna is going to update the getting started documentation to fill out the gaps
    • Morgan is going to update the documentation with how to run the storage emulator so files will work
    • Hackathon! (time to ask the experts)
  • Finding time / setting aside time / busy time of year
    • Hackathon! (set time to focus on puzzletech work)
  • Things being stuck in review (no reviewers, things being close but not quite done)
    • Hackathon! (collaboration time for reviews)
    • Tracking the rate of progress to make sure we're motivated to keep moving

The main idea we came away with was to have mini-hackathons on off-weeks. This would be time specifically dedicated to coding and getting things done without any of the usual meeting overhead. Suggestions were made both for usual weekday times and for potentially longer weekend sessions. @Jenna will send out a poll to find a good time and we'll try it out next week.

Open questions

What copyright should we be using for the website?

What's happening next

Morgan

  • Puzzle files
  • Puzzle waves

Megan

  • Auth
  • Deployments

Lambert

  • Show cookies policy on site

Jessica

  • Add puzzles submissions / responses
  • Player submitted responses (from 'Play' page)

Kenny

  • Team standings
  • Most / least solved

Jenna

  • Admin player management

Jeremy

  • Submit feedback
  • View feedback
  • Homepage / some link consolidation

Phil / Asia

  • Continuing to work on site wireframes (draft can be found here)

9/12/2018

State of the union

Done

Philip

  • Said hi!!

Jeremy

  • Said hi!!

Megan

  • Made it so that objects don't have to worry about referencing other objects
    • Ex. if a team references an event, it will just work
    • IF the classes are custom they need to be labeled virtual and then it will just work
  • Also updated to .NET core 2.1

Kenny

  • Fixed database table names (inconsistency with pluralization)
  • Blocked out menus
    • Including notes on when things should be hidden
  • Routing and event awareness cleanup
    • Clicking on puzzles actually brings you into an event! :D The menus update to show menus accordingly
    • Event id shows up in URL
    • "Making a page Event aware" added to Wiki
  • Added teams pages
    • Is event aware :)
    • Can add / edit / delete & view details
    • Used pre-generated pages + event aware - only about 10 minutes

In progress

Kenny

  • Get puzzle status of teams and team status of puzzles!
    • View status of each puzzle for that team
    • Can also unlock / lock puzzle for team and solve puzzle for team
    • Unlocking shows time in UTC
    • Can unlock all puzzles and lock all puzzles
    • Puzzle names link to the view of which teams have solved puzzle where you can also lock / unlock Jessica (in PR)
  • Answer submissions & responses!
    • Can add answers & responses & partials / answers for cake is a lie
    • Answer submission shows incorrect / correct
    • Still todo:
      • Answers are not yet per-team / team aware - that will come later :)
      • Right now symbols are removed, which matches previous cases :)
      • Responses should not allow empty (discussion around UI - possibly grey out add button until something is entered)
      • Responses are missing - currently uses notes

Morgan

  • Focused on adding puzzle files - mostly focused on backend instead of UI
  • Internally, files are called ContentFiles to avoid naming collision with built-in types
    • Currently Puzzles have a collection of contents
      • Adding separate columns caused the database to be confused (multiple references out and one reference back was confusing)
    • Includes way to map back to specific ContentFiles + code-side safeguard against multiple puzzle / answer files (server-side safeguard wasn't possible)
  • FileController has placeholders for auth
  • Puzzle PDF shows on edit puzzle page (although it can be any file)
    • ASP.NET has a built-in upload control
    • Throws error if it's the same name (can ensure uniqueness by convention - ex. prefix with author name for module or use puzzle name for puzzleday)
      • Could also add in module name, although we can do it by convention so it's ok for now
    • Includes a link from puzzle name to PDF!!! (currently uses dev storage emulator)
    • Note: edge and IE show entire drive path, but firefox / chrome will just show the file name in the URL
    • URL includes storage, event, obfuscation per file, then URL file name
      • Is a backing URL - players won't have to use it (actually goes to event/Files/filename)
      • Nice URL will be able to check if you have the file
      • Will probably need to have a way to view obfuscation just in case things break and we need to manually go through the storage account
      • Note that file name isn't required in obfuscated url, but nice if I download things to machine
  • Also added FileManager class for interfacing with Azure storage (includes obfuscation)
  • Only need to be using Azure Storage Emulator if you're trying this part out
    • Also must be a recent version
  • Still todo:
    • Can have one answer and one puzzle PDF (linked from UI)
    • Can have additional files & 'solve tokens' (things that unlock on puzzle solve)
    • Obfuscated URL still shows up in link - shouldn't do that
    • Zip files / need to reference files outside of the website
    • Suggestion: Add puzzle number to nice URL
      • Advantage - doesn't require uniqueness
      • Disadvantage - makes URLs harder to remember, now need to contact the server to get puzzle id
      • Undecided
    • Suggestion: Add URL-friendly version of puzzle name to make it easier to find / print

Notes

  • We should be validating the model when arriving on a page
    • If you go to a puzzle page, you need to know which puzzle you're viewing
  • Should formatted submission be in the database only or also on the model?
    • If it's something we're going to use every time we look at a submission, then it should be on the model
    • We can keep an eye out for similar cases to make sure we're making the right call each time
    • If you wrap a property around a backing field and they think it's the name you'll use, they sometimes use one and sometimes use the other :/
      • We're going to double check this - to stay safe, add a 'not mapped' attribute on the backing field
  • How do we test model methods?
    • We can just make another test project
  • Puzzle notes?
    • Can be used if things changed between betas
    • Can explain how to get partials

Non-code

Asia + Phil + Jenna

  • Requirements & priorities
  • Basic goals
  • Basic scenarios

Meetings

We're going to set the meeting for Wednesday every other week instead of sending out a poll each week. Jenna will send out the invite and watch out for any issues.

Priorities and timelines

The scenarios / priorities can be found here.

Discussion points:

  • Impersonation was added from the draft as an important scenario, although the mechanism may still be under discussion. Previous impersonation implementations were a bit buggy.
  • Deployment is still an important open question and P0.
  • Architecting the system such that a user can be forgotten without having to dismantle the database was discussed (register answers by team instead of player, etc.). This is especially important with GDPR concerns.

Timelines were discussed:

  • There was agreement to target all P0s by the start of January with a hard cutoff at the end of the month. That should get things ready in time for PuzzleDay Alpha.
  • P1s will likely be targeted by March for PuzzleHunt beta, but that call will be made in Jan and the target may be re-evaluated at that time.

What's happening next

  • Jessica - will just pick an issue
  • Phil / Asia - Site map (for next meeting)
  • Jenna - teams w/ players & e-mails, PM things (what's done checklist & velocity)
  • Morgan - more file UI, maybe puzzle dependencies
  • Jeremy - feedback / puzzle-specific feedback
  • Kenny - player puzzle page

8/29/2018

Note: Line numbers in PRs are given for the edited file and not the original file unless otherwise noted

Progress since last week

Kenny set up a linked databases example!

  • What changed:
  • Dev notes:
    • Removing columns for list pages (where you can see a list of things that are in a database) was just a matter of removing some columns from a pre-generated file
    • Watch out for duplicate file names - right now some of them share names to keep the URLs clean, so don't forget to check which folder the file is in while working in editor
    • When linking to the puzzles page in the code, he had to use /Puzzles/Index to get everything to work (line 44 of file ServerCore/Pages/Events/Index.cshtml in PR 47)
    • In ASP.NET, using "@" causes a switch to code execution instead of just html. One major use is to reference variable (ex. @item.ID)
    • You can pass values from one page to another via variables like 'asp-route-yournamehere' and having a parameter option in the OnGetAsync function for the target page
      • Defining the asp-route variable: PR 47 File ServerCore/Pages/Events/Index.cshtml Line 44
      • Defining the function parameter: PR 47 File ServerCore/Pages/Puzzles/Index.cshtml.cs Line 26
      • You can also search 'EventId' in the PR to see how it was used on the Puzzles page
    • Objects are actually references, which required some workarounds, but during the meeting Megan merged a change to fix this

State of the union

  • We have independent front end sites for events (puzzle hunt / puzzleday)
  • We have data models and associated pages
  • We have space for tests (Megan will add an example test)

Overall code notes

Make sure you have the latest 2.1 .Net sdk

  • If you set up recently, you should be fine since it was in the instructions To view database changes, right click on the table and select 'view data'
  • That view also allows you to edit the database directly Performance shouldn't be an issue if we follow basic best-practices
  • Use link queries instead of loops
    • Link queries are database queries that join tables and get properties within the query itself instead of getting one set of data and then iterating over that data in the code to get a second set of data
    • Just watch out when using loops to get data - generally it's not a good idea. Especially nested loops. Those hurt
  • If you just want one property of an object, you can include it as part of a link query instead of getting the entire object
  • Trying to be smart about caching caused a number of problems on the previous site - don't try it until we know we need it
    • Once we have more Megan will run a profiler so we can check site performance and find out where we actually need to optimize For now, we don't need additional standard libraries
  • Our project already has bootstrap, JQuery, JQuery validation, and JQuery validation unobtrusive
  • JQuery will ideally address most needs
  • If we realize the libraries we have are insufficient (ex. if we need specific hashing to check meta puzzle answers)we'll look at adding more - until then feel free to use anything from the ones already in the project
  • Asia is happy to help with JavaScript things - reach out to her if you have questions :D

Puzzle upload

Puzzle upload is currently done via deployments meaning that authors do not have the ability to self-manage puzzle files. This puts a large burden on tech and becomes a problem in decentralized events (like puzzle hunt).

Proposal: Puzzles should be stored separately and not deployed with code

  • An example would be using Azure Blob Storage for the files and referencing them via URL
  • There are concerns around puzzles being discoverable before intended, either by players directly or by web crawlers
    • One proposed solution was to create obfuscated URLs to prevent them from being guess-able
      • An issue raised was that associated files (ex. not the puzzle PDF) might need to be referenced by the puzzle PDF, in which case randomly changing URLs would require a lot of manual updating for those files. A counter was that this was mainly an issue for metas, in which case those might be addressable as a special case and could potentially be addressed later
      • Another issue was that we wanted to keep URLs clean and random obfuscated gibberish would work against that
  • There were additional concerns about the puzzles being accidentally deleted
    • It would not be good if someone from the team that owns the subscription was doing clean up the day before an event and deleted the storage account because they didn't recognize it
    • Storage accounts can be locked as a safeguard against this
  • A note was made that it would be nice to be able to import puzzles / files from the beta to the actual event, but this is not a primary scenario we need to focus on at first
  • Morgan is going to continue to investigate and work on this :D

Goals and timelines

Need for direction & timelines

  • Right now, issues are the only direction we have and it's difficult to see the overall trajectory of the project
  • A decision on whether or not to use the new site should not be made days before an event. Instead, milestones should be set in advance as checkpoints and if the milestone goals are not met then the next event should instead be run using the old site
    • Some key dates:
      • Puzzleday alpha - January / February
      • Puzzle hunt betas - March / April
    • Time should be set aside for debugging and testing
  • Goal and timeline proposal will be brought to the next meeting for group review (Asia, Phil, Jenna)

Suggested changes to existing behavior

  • Author powers could be expanded
    • Authors should be able to create puzzles, see a state map for their own puzzles, and edit puzzle answers
    • Batch upload for puzzles / answers would be super helpful
    • Decided there was no need for a 'support author' scenario - they can have full author permissions (note: this does imply that puzzles can have multiple authors)
    • Authors can probably see all team states
  • Feature requests
    • For admins, puzzle answers should be hidden by default to avoid spoilers
    • Admins should be able to promote other users to admins
    • Teams / modules as a concept so users can become authors of all at once (similar to CPD's ground teams - could be pizza team for puzzle day or module authors for puzzle hunt)
    • From CPD - regex validation for puzzles
    • From CPD - Hints / errata / clues / answers all editable
    • From CPD - puzzle solves in descending order to help teams figure out which ones to try
  • Kenny came in with an awesome sample site map that he's planning on working on :D

User groups

  • People who run the events (admin, author, logistics)
    • Should include larger focus on author productivity than we've had in the past
  • Players
    • Registering / joining team (landing page, matchmaking)
    • Playing in the event
    • Beta testers
  • Archive
    • Users viewing / playing older events
    • Not a primary user group - will be targeted later
  • Impersonation
    • Organizers need to be able to check things from a player's point of view, but there may be other solutions (ex. having separate pages, having admins join test teams…)

Open questions

  • How will we persist event ID?
    • The general discussion was that event ID is probably special and can be persisted using a mechanism that isn't used for smaller properties
    • Some options were to persist it in a session object or to put it as part of the URL

Next few weeks

Here's what the team is focusing on next :)

  • Jessica - Answer submission / responses
  • Kenny - Scaffold menus / data (starting with teams and puzzle states per team)
  • Morgan - File upload
  • Megan - Authentication (live ID + user, user access / denial)
  • Scenarios & timeliens & milestone definition
    • Phil - Player (registration & team-building)
    • Asia - Player (during event)
    • Jenna - Admin / author focus

8/15/2018

First meeting!

Next steps for the team

  1. Set up environment
  2. Edit the sign-in sheet (found here)
  3. Select an issue (or create a new one)
  4. Fix that issue!
  5. Repeat steps 3 and 4 whenever possible :)

Discussion topics for future meetings

Meetings for those interested in these topics will happen later

  • Archive structure for hosting previous events
  • Deployment model / database deployment
  • (possibly) Sign-in / authentication (maybe only need Microsoft verification for Puzzleday, can send link to employee alias)

Timelines

  • Hunt has betas in March / April
  • Possilbly could aim for Puzzleday alpha in January / February

Other things to do

  • Set up meeting in 2 weeks (check days for availability)
  • Map of the system / documentation
Clone this wiki locally