ACBLscore was not used in parallel for any KO start. I think we ran it this way last year as well. It is much faster/easier running by itself than not having ACBLscore running as well. BS+ has started hundreds of KOs in the last 2+ years.
This is the summary table of KO starts. The times are from the log files, the clock was set to the atomic clock before the start of the tournament. BS+ generated approximately 4,000,000 lines of log file data from the week.
There were 2,097 teams in the 14 KO starts (compacts/regular/dinner bells).
There were 153 corrections (7.3%) after the data was entered into BS+. A small number of these will be corrections by the TD because they misentered the data (from the log file I cannot tell), but the majority will be corrections by the players. Historically it is 2-5%. It is higher for the larger KOs because more teams are pick-up teams.
There were 33 team corrections AFTER the event was supposed to start. These are all corrections by the players, not a TD error. There were an average of 2 corrections after the event start time for every KO.
There were 34 sales AFTER the event was supposed to start. These are tracked separately from team masterpoint corrections. Don't blame the DIC for accepting the entries. This generated approximately $1,254 for the District. Without accepting them, we would never have received the money. In some cases, we had entries after the assignments were published. If possible, the DIC added them, in some cases, he sent them away. If it is possible to accept an entry into a non-16 team bracket, he did.
Just so you understand, each time there is a correction or new sale, we have to re-bracket, re-match the teams, re-assign the tables, re-print the bracket sheets (sometimes 20 pages - one per bracket), before we are ready to publish (put assignments on the screen). For Gatlinburg, there were 67 changes (new teams or corrections to existing teams) AFTER the event was supposed to start. We print 3 sets of bracket sheets for each KO start (one for TD on floor, one for caddy, one for DIC). We throw away what is no longer valid. BS+ will get blamed for the late start (players don't see these corrections), but the problem is not with BS+. We only had 1 KO that did not have a late sale or change after the start time. Using pre-registration would have cut down on many of these problems.
The average KO started 06:40 (minutes:seconds) after the published start time. Within this 6:40 delay, BS+ took an average of 02:35 after the last sale/team MP correction/inventory change until the final bracket was published. My stated window for 2-3 minutes from last correction was met.
The range of the last sale/team MP correction after game time was 0:00 to 8:34. The range of overall delay for KO starts was 2:36 to 13:33. The range of time for BS+ to go from last correction to last bracket published was 1:07 to 5:42. There are some things that are not covered in log files. For example, if there is a buffer section (a set of tables that could be used by 2 or more different events depending on how popular each event is), we have to wait to find the numbers from the other event before the buffer can be used (or released). Players are unaware of this.
These are the raw figures from the log files.
For the all important five big KOs, the range was 244-312 teams. There were 1,363 teams (272.6 average), 110 total team corrections (8.1%), 20 corrections after game time (1.5% of all teams), 16 sales after game time (1.2%). The average last correction was 04:33 after game time, range was 0:58 to 8:34. The average start was 07:55 after game time. BS+ averaged 03:23 from last correction to last bracked published. For the last three large KOs, the times were 2:35, 1:07, 2:03 after the last correction. Those averaged under two minutes as the TDs became more familiar with the software and the correct process/procedures.
In general there were 6-7 TDs on the main side of the wall for the big KOs. Before BS+ there would be 11-13 TDs on the main side of the wall. The average start time for the large KOs using ACBLscore 3 years ago was 23-27 minutes after published start time. Using Bridgescore+ this is down to 8 minutes. A large part of that delay is team MP corrections. If we had used pre-registration this number would have been much lower.
If we assume that previously the average large KO start was 25:00 after start time, then, assuming only 4 players per team, 40 hour work week, BS+ saved 38 man weeks just on the large KOs.
One of the more important time savings is that there is enough time to finish a KO and be ready for the dinner bells.
How does this compare to ACBL? Wish we knew, ACBL does not keep these metrics, nor can they generate them.
The Sunday Bracketed Swiss was started the old fashioned ACBLscore way. I do not know why they would not run Bridgescore+. This is a good question for the D7 TOC. There were 126 tables. The last bracket was put up 18 minutes after game time. After the brackets were up, 2 teams were in the wrong bracket and everything had to be cascaded. This is the only comparison from this tournament of ACBLscore and Bridgescore+.
BS+ average KO size was 150 teams, started on average 6:40 after game time. ACBLscore had 1 Bracketed Swiss of 126 teams, started 18:00 after game time.
The table is quite wide - I put a lot of data into it. There were some ACBL people questioning the software (there is some bias against Bridgescore+) during the tournament so I thought it best to include all the details and all the metrics. I can publish the 4,000,000 lines of log files if there is any dispute about the numbers.
The time of the last sale is the time that the last sale was entered into Bridgescore+. We typically entered the data as soon as we got masterpoints (MPs) for the last sale. The time of last change is a team masterpoint change from a team, or the time of the last change of inventory (available tables), usually the former. The delay from late sale is the delay caused by late sales. The delay from late change is the delay caused by last change, either a last sale or a change to a team masterpoints or an inventory change. There was only 1 KO start where we did not have any late changes (Wed AM CKO).
|Date- April||Event||Type||Teams||Official start time||Time of last sale||Time of last change||First bracket published||Last bracket published||Delay from last sale||Delay from last change||Delay from official start||Delay for first bracket||Delay for last bracket||Delay for BS+||Team changes||Team changes after start time||Sales after start time|
BS+ can run either stand-alone, or in parallel with ACBLscore. I had more than one director ask why we did not use projectors for the Swiss. Another question for the D7 TOC.
Used Bridgemates for two 2 day Swiss. Many thanks to Bridgemate for providing the Bridgemates. All scores came in electronically.
Swiss finished at 12:10 to 12:20 with a 9:00am start. About 3 hours 10 to 3 hours 20 minutes. I played in the evening Swiss. Finished 11:15 to 11:20 with a 7:30pm start. About 3 hours 45 minutes to 3 hours 50 minutes. Bridgemates make a big difference because the TD knows who is slow while the match is being played and can go to the table and issue a slow play notice (then a warning, then take board away). TDs assigned to the A/X Swiss were very good at going to players half way through a match and giving them a heads-up notice. This did make a difference.
BS+ handles 3 way matches using Bridgemates. I currently refuse to write the code to handle a short (one round) RR because this is a bastardized form of scoring. This was handled manually. Players scored manually. A short RR can be entered into BS+ with no problem.
We had lots of spare Bridgemates, so we ran one full session in round 1 of one bracket for the KOs as a test. Everything went well.
This is clearly something for next year. Put Bridgemates at every table. BS+ know who is playing at which table. As soon as we get the player information, we can check that the teams have the correct number of masterpoints and are in the right bracket.
For some reason, D7 TOC chose not to run this. This cuts down on lots of player errors for TD entries. I was ready to do this for the first KO, but no TD had been assigned. We did it in 2015. I had spent a lot of time improving the process for 2016 but D7 TOC chose not to do it. Very frustrating.
Another frustration. I bought hardware, wrote software, everything set up in advance that we would do it, tested it at multiple tournaments in the Atlanta area, sectionals and regionals, but at the tournament the D7 TOC said no. Even though this was all agreeed upon before the tournament. Why?
Various computers were connected at different times, including TD computers, computers for projectors, printers. At its busiest, we probably had 10+ computers all connected to the same server.
The BS+ server ran on a MacBook Pro, early 2013 model, 2.7 Ghz Intel Core i7, 16 GB 1600 Mhz DDR3 memory. This laptop was also used for data input during events.
One projector was powered by a MacBook Air, the other projector was powered by a laptop donated to D7 by Unit 253 in Atlanta. There were differences in the output capability of the two machines, but this can be handled by the BS+ software. The quality of the projected image in the main room using the MacBook Air was higher than the other room, but I doubt any players noticed.
I ran BS+ in "developer mode". This typically runs much slower than "production mode" but allow more logging and also the ability to fix any problems quicker. Google for "Rails" and "difference production and development" for more details.
The version of BS+ that runs on the Internet and is available for free to Districts and Units and has been used for 18 months runs in "production mode".
At times, BS+ was running at the same time an A/X Swiss with Bridgemates, starting a KO, displaying assignments for BCD Swiss, i.e. running 3 events at the same time on a 3 year old laptop and driving two very large projectors as well as handling Bridgemates. All of this done using the much slower "developer mode". There were no performance issues. Documenting this as there have been attempts to claim BS+ has performance issues.
When I did error checking with ACBLscore, we found two separate bugs in ACBLscore (not Bridgescore+).
The first bug affects all brackets with a team that has more than 45,000 MPs. For Gatlinburg this is typically only bracket 1. For other sectionals/regionals around the country it will only be bracket 1. The bug causes bracket 1 to be awarded more MPs than they should. The bug was not in ACBLscore in Gatlinburg 2015, but I do not have enough game files from regionals/sectionals since April 2015 to know when the bug was introducted. The bug will cause incorrect (too many) MPs for not only first overall, but all places, and most likely the match award for bracket 1. So, for a 16 team bracket 1, this will affect 8 teams, or at least 32 players. This bug could have affected as many as 100 regionals/800-900 sectionals over the last 12 months.
The second bug was worse. It affected middle brackets. ACBLscore was awarding fewer MPs than it should. In some cases as much as 3.86 MPs, most of which would be gold. This bug will affect at least 1,000 players in Gatlinburg. Just looking at the Monday/Tuesday events, at least 544 players were affected.
It is possible that errors within 0.12 MPs for first overall are 'rounding errors' and can be ignored. I use simple mathematics and simple rounding to create my numbers. ACBLscore uses some very unusual rounding methods.
|Day||Event||Bracket||ACBL||Bridgescore+||Difference||Min # Players|
|Tuesday||Mor Comp KO||1||24.35||22.44||1.91||32|
I reported the problems at the Saturday D7 meeting. It was very disturbing to find out later that ACBL and the D7 TOC knew of the problem since Tuesday of the tournament but had both decided not to do anything about it, and even worse not tell Rick Beye or me. Had we been told, we would have structured the bracket sizes for the KOs to minimize the impact of the second bug (no work-around for the first bug).
I have offered to create correct game files for all D7 Regionals/Sectionals since the bug was introduced. All you need to do is to get me the game file, and I can correct the MPs awarded (import to Bridgescore+, use correct formula, write ACBLscore game file).
I met (socially) with some of the top people from ACBL on Saturday night and was told that ACBL would not fix the problem. I strongly disagreed with this approach!
Since then, the D7 President sent me an email that the ACBL CEO "assures me ACBL has handled the matter". As of May 7, most of the corrections appear to be have been made so it appears that ACBL has backed down and done the right thing and fixed the MPs for everyone. I note that the Tuesday KO Bracket 11 MP total is still wrong. If D7 can get me the game files, I can compare my results against what is on the ACBL web site - some results are still wrong.
While the server is running not connected to the Internet, it is using its own clock, but this typically loses less than a couple of seconds a day.
Most evenings I would go home, connect to the Internet, and the clock would be automatically set to the current atomic clock time.
The log times are based on the computer clock times, so will be accurate within about a second.
The times displayed on the projector during the start of an event, and for a Swiss event, are the BS+ server times so are typically accurate within a second.
Gatlinburg is always interesting because of the layout. Here's a typical inventory for a KO event:
Head to head: YY1-ZZ20, UU1-XX16, UU17-VV20, WW17-XX19, AA10-BB20, CC1-FF20, QQ1-RR16, SS1-TT9, GG1-HH16, II1-JJ20, AA1-BB8
Round robin:: UU1-WW18
BS+ will assign the tables in the order listed in the inventory.
There was a bug in the version on Monday afternoon where the letters "YY", "ZZ" were not allowed. This was a historical bug. When the code was first written the inventory (set of tables available to be used) was set as a range. The default was a "box" where each letter is the start of a 6 letter box. So A1 was a shorthand for "A1-F1". There are four default boxes, A-F, G-L, M-R, S-X. If you start a box with "Y", the next letter is "Z", but there is no third letter for a round robin. So the code explicitly did not allow for Y or Z as table letters as there was no location for the round robin. The code was modified a long time ago to allow a separate inventory for round robins and a separate inventory for head to head matches but the restriction had been left in. For the Monday afternoon KO event, the inventory include YY, ZZ but the software would not assign these letters. A bug. Fortunately the software is designed for work-arounds, so the lowest 3 brackets was assigned to the letters "YY", "ZZ", and the entire bracket was set to "See TD" on the screen. We put the assignments up on the rack. The bug was simple to fix. I played in the 1pm Afternoon KO, fixed the bug, and we used the letters YY, ZZ for the Monday Dinner Bell assignments with no problem.
BS+ has a single button where an entire bracket can "See TD" or "See Rack". On Monday afternoon, I used the "See TD" option for the lowest 3 brackets. The message "See TD" is displayed on the projector instead of the team's table assignment. Later in the week there was another issue - I forget exactly the problem - but we manualy assigned a bracket. I think an event did not have enough table space, so we published all other brackets, but then asked that bracket to "See Rack". Nearly all the players for that bracket came to the TD to ask what a "Rack" was. Lesson learned. Use "See TD" and not "See Rack" for players in lower brackets. They have not played enough Swiss to know what a "Rack" is.
For one KO start, I entered the round robin inventory wrong. Instead of "UU1-WW8", I entered "U1-W8". The head to head inventory correctly had "UU1-VV8". My mistake. The tables U1-W8 were assigned by BS+ to round robin matches and UU1-VV8, WW1-XX8 were assigned to HH matches. Tables U1-W8 were pairs events. Oops. This involved a manual fix, where we had to move the players to sections RR, SS, TT. As I caused the problem, Rick made me fix it. Fair enough. The good news is that with the printed output for the floor TD, this was relatively easy to fix.
The lesson learned is that the software needs to include a warning for mixing double letters and single letters in the inventory. I plan on introducing this in the next release.
On the Tuesday big KO there was a team entered with the wrong number of masterpoints. A "0" was missed in data entry. They were a later entry, the team did not catch the error on the projector. In general if it is our problem (software/me/TDs) then we fix it, if it is a problem with the team (e.g. wrong number of MPs in entry), then it is up to the DIC how to fix. In this case, the change affected 10 brackets. Teams had to be cascaded down from bracket 2 to 11. In the past, this was a nightmare for the DIC. They had to manually find where 10 brackets had been assigned, use the rack to find where each team was were playing, they usually had to re-print the ACBLscore list of all MPs (takes 20 seconds per page to print). It would take 20-30 minutes to fix and involve multiple TDs. With BS+, the bracket sheets were already pre-printed, including the teams with the lowest and highest masterpoints in the bracket, along with the table assignments. It was a simple matter for the TD to go to each table, and manually move a team down each bracket. As the bracket sheets were pre-printed, the work could be broken up down and shared between more TDs. I was told it was less than 5 minutes to fix this problem. Previously it could take 20-30 minutes with multiple TD and players were already some number of boards into a match.
Unfortunately they had the same problem in the Sunday bracketed Swiss (they did not use Bridgescore+). In this case there were two teams with wrong MPs (so I was told). Fixing it took some time.
During the emails before the tournament, I said I wanted to use caddies. Caddies are great for checking this type of stuff. For some reason, this message did not get passed on (another D7 TOC issue/frustration). Later in the week I just went to the caddy office and 'grabbed' whatever caddies were available (with Mary's blessing). Next year we need to make more use of the caddies. There is no reason that the caddies cannot help with data entry as well. I know some TDs do not like this, but a well trainined caddy knows how to enter data into a web page better than a TD. Something to consider for next year. Much rather pay a caddy's wage than a TD wage.
During the week, I looked at this. The code has been the same for 3+ years. It is random assignment. There is no basis for this complaint. Statistically there is about a 1 in 15 chance that you will play the same team the next day (e.g. you lose on Mon, you play again on Tue KO. There is about a 1 in 15 chance you will play the same team - assuming the team that beat you lost on Mon Eve).
This team had a bad week (the team had lots of MPs, did not win many matches). I am sure they were looking for something to blame. They were almost always knocked out in either the first or second match in the KOs so they were always starting a new KO each day.
What the player/team does not know is that the brackets are automatically re-calculated each time there is a change in a bracket size (any bracket) or a new team added, or a change made to a team's MP total. I have over 4,000,000 lines of log data from the Gatlinburg 2016 tournament.
This is from the first event (Mon Aft KO).
The complaining team were Team 58. They had 107,000 MPs.
This data is from the log files and shows who they would have played if there were no new changes (i.e. no teams added, no team with changes to the masterpoints).
2016-04-11 12:58:00 58 playing 153 (180,000) 2016-04-11 12:58:01 Team ID 301 updates their MPs 2016-04-11 12:58:23 58 now playing 83 (100,000) 2016-04-11 13:01:15 Added new team. Team 165 has 41,000 MPs. 2016-04-11 13:01:34 58 now playing 96 (214,000) 2016-04-11 13:01:39 Team 490 changes their MPs 2016-04-11 13:01:41 A bracket size changed by TD 2016-04-11 13:01:50 58 now playing 11 (55,000) 2016-04-11 13:04:00 A bracket size changed by TD 2016-04-11 13:04:00 58 now playing 150 (55,000) 2016-04-11 13:04:17 A bracket size changed by TD 2016-04-11 13:04:17 58 now playing 153 (180,000) 2016-04-11 13:07:01 Publish first bracket. 2016-04-11 13:07:21 Publish last bracket.
As can be seen from this log file, there were 6 changes made to bracket 1 that were caused by outside interference (change in number of teams etc.). There were 5 different teams that this team would have played.
The same thing happened during the week. For each KO, the team that they are supposed to play changes whenever there is a change to the setup of the event. It takes a lot of time to go through the log files to be able to disprove this type of allegation, but I will be happy to make the entire 4 million lines of log files available if needed.
This team happened to be unlucky, statistically it will happen. The TD won't make any changes to the random assignments because a team complains that they drew a high MP team in the previous KO (and Rick did not). All assignments are random.
I offered to show this player how the process works by running a sample event, by using the same data as had just been done, but they were not interested.
Here is the code that matches teams within a bracket. The "numbers = team_numbers.shuffle" line of code is where the team numbers within a bracket are randomized. Shuffle is a standard library routine.
# Random assignment of team matches. def generate_matches(team_section) numbers = team_numbers.shuffle is_bracketed_swiss_event = team_section.team_session.event.is_bracketed_swiss_event self.rr_matches =  self.hh_matches =  # For a regular KO we do rr first, for a bracketed Swiss, we do last... count = self.starting_team_number if (is_bracketed_swiss_event == 1) then nhhs.times do opponent_numbers = numbers.slice!(0..1).sort self.hh_matches << generate_match(team_section, opponent_numbers) # Bracketed Swiss - assign the numbers team_number = opponent_numbers team = team_section.team_with_entry_number(team_number) team.team_new_entry_number = count count = count + 1 team.save! team_number = opponent_numbers team = team_section.team_with_entry_number(team_number) team.team_new_entry_number = count count = count + 1 team.save! end end nrrs.times do opponent_numbers = numbers.slice!(0..2).sort self.rr_matches << generate_match(team_section, opponent_numbers) # Get team 1 and 2, assign if (is_bracketed_swiss_event == 1) then team_number = opponent_numbers team = team_section.team_with_entry_number(team_number) team.team_new_entry_number = count count = count + 1 team.save! team_number = opponent_numbers team = team_section.team_with_entry_number(team_number) team.team_new_entry_number = count count = count + 1 team.save! team_number = opponent_numbers team = team_section.team_with_entry_number(team_number) team.team_new_entry_number = count count = count + 1 team.save! end end # For a regular KO we do rr first, for a bracketed Swiss, we do last... if (is_bracketed_swiss_event == 0) then count = self.starting_team_number nhhs.times do opponent_numbers = numbers.slice!(0..1).sort self.hh_matches << generate_match(team_section, opponent_numbers) end end identify_stationary_tables end