michzimny / aktywator Goto Github PK
View Code? Open in Web Editor NEWSterowanie pierniczkami Bridgemate II
License: GNU General Public License v2.0
Sterowanie pierniczkami Bridgemate II
License: GNU General Public License v2.0
Zrobiło się ciasno i nieczytelnie. mkl proponował pogrupować w panele z obwódkami brzmi super
Jak się wgra nazwiska i zaznaczy, że ma pytać o id i nie może pytać o id, to nie pyta o id.
Innymi słowy w teamach efekt jest odmienny od oczekiwanego.
Testowałem niestety tylko w boju i przypadkiem. Zdarzyło mi się dwa razy, gdzie jeden teraz na najnowszym sofcie i firmware, wcześniejszy "test" był, mam wrażenie, ze 2-3 lata temu.
Wyświetlanie wyniku meczu w IMPach podaje zawsze wynik BEZ bieżącego (wybranego w Aktywatorze, domyślnie: pierwszego niezamkniętego) segmentu.
Wynik w VP pobierany jest z matches
- aktualnie wyświetlana jest suma VP do wybranej w Aktywatorze rundy włącznie.
Jeśli chcemy wykluczyć możliwość przypadkowego ujawnienia bieżącego wyniku meczu zawodnikom (np. przez zostawienie auto-aktualizacji nazwisk do momentu, kiedy Webmaster zdąży zapisać wynik do tabeli matches
), należałoby zmienić warunek na runda < wybranej.
Ale możemy czasem chcieć wyświetlić między segmentami meczu aktualny wynik drużyny w VP.
Która wersja jest przydatniejsza?
Przy sprawdzaniu karty wistu, dane pośrednie nie są wysyłane.
Sprawdzić, czy to bug, czy może warto napisać do BM, żeby "dane pośrednie" w tym wypadku nie uwzględniały karty wistu (albo uwzględniały, ale bez jej sprawdzenia).
Dodać do listy nazwisk pozycję startową i pozwolić sortować po wszystkich kolumnach.
Aktualnie są moim zdaniem fatalne.
Kiedyś było chyba tak, że są inne domyślne dla par i inne dla teamów. Względem domyślnych zazwyczaj musiałem zmienić może ze trzy opcje czy coś takiego. Aktualnie spędzam multum czasu na samym zmienianiu opcji.
Idąc w kierunku optymalnego rozwiązania:
Czasem się zdarza, że RRB pisze do pliku RRT w momencie, kiedy Aktywator chce z niego czytać.
Obsłużyć.
Po jakichś "niedawnych" zmianach we wczytywaniu nazwisk, opcja wczytywania faktycznych nazwisk (z line-upu) w teamach zaczęła wariować.
Patch jest w drodze.
Zgodnie z wcześniejszym mailem, podsuwam pomysł sygnalizowania użytkownikowi minimalnej wersji pierniczków i oprogramowania dla wybranego zestawu opcji BWS.
Na razie tylko dla zakładki z checkboksami, bo ona pokrywa zdecydowaną większość (jeśli nie całość) sytuacji, w których taka informacja jest przydatna. Tzn. nie wydaje mi się, żeby jakiekolwiek opcje nazwisk/rozkładów robiły różnicę - zwykle jest tak, że szczegóły zakładek nazwisk/rozkładów degradują funkcjonalność w jakiś zdrowy sposób, a jak było coś dopisywane (np. dane analizy w widne), to "po cichu", bez angażowania w to użytkownika.
Ogólna koncepcja:
Settings
o dwa pola typu Version
save()
) emitować zdarzenie, które w razie potrzeby zaktualizuje wyświetlaną gdzieś u dołu panelu opcji informację o wymaganych wersjachEwentualnie można pokusić się o wyszukanie w rejestrze wersji zainstalowanego BCS i ostrzeganie, jeśli do działania wszystkich wybranych opcji wymagany jest upgrade (z firmwarem tak oczywiście nie zrobimy, ale upgrade jest często powiązany, a minimalne/maksymalne wersje potrafią być wymuszane między BCS a serwerem).
Jeśli nie masz poważnych uwag lub przeciwwskazań, spróbuję coś na dniach zaimplementować.
Co to może być? Wyskakuje po otwarciu bws.
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.Data.OleDb.OleDbException: No value given for one or more required parameters.
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteScalar()
at Aktywator.Sql.selectOne(String q, Boolean checkForRow)
at Aktywator.Bws.convertSettingsPerSection()
at Aktywator.Bws.convert()
at Aktywator.MainForm.MainForm_Shown(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnShown(EventArgs e)
at System.Windows.Forms.Form.CallShownEvent()
at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
at System.Threading.ExecutionContext.runTryCode(Object userData)
at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
at System.Windows.Forms.Control.InvokeMarshaledCallbacks()
Opcje z v3 firmware'u BM2 (BM3?).
Ogarnąć, czy działają, jak działają i czy można ich użyć również w BWSach generowanych przez JFR.
Może i przez Teamy, gdybyśmy mieli taki kaprys, ale niekoniecznie - firmware obsługuje również grę meczową.
- IMP scoring added
- X-IMP scoring added
- Team games functionality added. Teams can review scores from both matches and view their match results in IMP at the end of the match.
Piki, kiery i kara na W, w dość zawstydzającym stylu, wyświetlone są z ręki N.
W kodzie jest burdel. Do tego stopnia, że jak ustawić jakiś breakpoint, to się okazuje, że np. opcje z BWSa na starcie są odczytywane trzy razy. Nie winię nikogo poza sobą.
Chciałbym wstrzymać rozwój po wersji 1.1.5 i do wersji 1.2 zrobić gigantyczny refactor kodu.
Jeśli są jakieś małe rzeczy do zrobienia/poprawienia, chciałbym je upchnąć jeszcze w wersji 1.1.5, ale nie da się tego odkładać w nieskończoność.
Ponoć nie uwzględnia wyrównań w IMP w matches
.
Pewnie należałoby wykryć, czy mamy do czynienia z turniejem bez przeliczania na VP i przy okazji wyświetlać dobry suffiks wyniku.
Bonus: BAM?
Olo zgłaszał, że wczytywanie różnych rozkładów do różnych sektorów nie działa, przynajmniej w Teamach.
Sprawdziłem, napisałem do BM o pomoc w diagnozie.
Okazuje się, że żeby rozkłady mogły być różne, sektory muszą być w osobnych grupach maksowania.
Dla turniejów par przeważnie jest to prawdą, bo opcje maksowania są w nich dostępne, bo włączamy wyświetlanie wyników.
Proponowana poprawka: przy wczytywaniu rozkładów sprawdzać, czy są różne między sektorami - jeśli tak, wyłączać możliwość wspólnego maksowania (+ jakieś ostrzeżenie). Jeśli nie - przywracać tę opcję z poprzednio ustawioną wartością.
Mogło by leżeć sobie zapisane lokalnie. Szczególnie że niektórzy maja rzeczy, które ZAWSZE chcą mieć po swojemu (choćby inny PIN).
Wersja bardziej na bogato: zapisywanie opcji jako presetów i możliwośc wybierania z rozwijanej listy dodawania nowych, usuwania starych.
Aktualnie wyznacznikiem tego, czy użytkownik wypełnił formatkę ustawień MySQL, jest niepuste hasło.
Może lepiej dołożyć do parametrów aplikacji flagę "użytkownik zapisał parametry", z domyślną wartością "nie", a przełączaną na "tak", gdy tylko użytkownik zapisze parametry, żeby program nie nagabywał użytkownika, który zapisał sobie puste hasło.
Co prawda nie testowałem nigdy, czy Aktywator działa z pustym hasłem MySQL, ale ufam, że tak.
Od ostatniego trochę commitów minęło...
@emkael, wrzuciłbyś?
Wersja 2.3.1 BCS (czyli dawno temu) wprowadziła dla BM2 alternatywną metodę grupowania stołów/sektorów w protokołach - pole Group
w tabeli Tables
.
Gdy było ono używane (a jest - bo BWSy, z którymi mam styczność, ustawiają dla wszystkich stołów 1
), opcja GroupSections
w tabeli Settings
była ignorowana.
Zaimplementowałem ponownie tę opcję, używając pola w Tables
- i wygląda na działającą.
Jedyny problem to brak możliwości przełączenia między wspólnym a oddzielnym maksowaniem sektorów w trakcie trwania sesji - nie do końca wiem, dlaczego.
Mogę jedynie się domyślać, że opcje z Tables
nie są przeładowywane przez serwer standardowym UpdateFromRound=997
, może konieczne jest ponowne dodanie stołów do serwera, ale nie podejmuję się proponować, jak to zrobić bezpiecznie.
Niestety, również w "starej" wersji (Group
w Tables
ustawione na 0
i pisanie GroupSections
w Settings
), ustawienie nie jest odświeżane, albo nie umiem go skutecznie wymusić.
Może należałoby napisać do BM.
Rozkład zaczynający się, w notacji PBN, od innej pozycji niż N, wczytuje się obrócony.
Wersja dla RRB:
Wersja dla Par:
Użycie BYE na własną odpowiedzialność. Trzeba pamiętać o opcji zmiany numer pary (również na pusty) i by to się uploadowało poprawnie do serwerka.
Bug ponoć odwieczny.
W polu "synchronizuj co" jest limit minimalnej wartości, który jest w żaden sposób niezaznaczony. Poza tym pole słabo reaguje na wpisanie błędnej wartości, a oznaczanie włączenia funkcji stanem przycisku też mogłoby być czytelniejsze.
Kliknięcie w okolice nagłówka sekcji może zaznaczać/odznaczać wszystkie
Zgłoszenie:
Wskazałem Aktywatorowi plik .rrt, z którego ma sobie pobrać nazwiska i kliknąłem 'synchronizuj teraz' dla sektora * (miałem dwa sektory - A i B).
Początkowo wydawało mi się, że w ogóle nie zadziałało, ale okazało się, że w sektorze A nazwiska wyświetlają się prawidłowo, a tylko w sektorze B wcale.
Wybrałem więc teraz sektor B i 'synchronizuj teraz' - to do obu sektorów zassały się nazwiska z B.
A w A zawodnicy zaczęli drzeć mordy :(
Niezrażony wybrałem sektor A, 'synchronizuj teraz' i było dobrze w obu!
Olo też coś zgłaszał, że jakieś problemy z sektorami miewał.
Do ogarnięcia.
Wraz z przyrostem funkcjonalności i rozwojem samego formatu BWSów, proste rozróżnienie między plikiem BM2 a plikiem, który trzeba skonwertować do BM2, nie zawsze wystarcza.
Czasem mamy do czynienia z BWSem, który już jest formatu BM2 (w tym: jest wykrywany przez Aktywator jako BM2, więc nie jest proponowana jego konwersja), a nie zawiera całej struktury, która jest niezbędna do działania programu. Na przykład, tabela Settings
może nie zawierać wszystkich pól, zwłaszcza tych wprowadzanych niedawno (bo na przykład sędzia zdążył już skonwertować BWS starą wersją Aktywatora).
Może powinniśmy rozważyć stopniowy, w dużej mierze "cichy" (przezroczysty dla użytkownika) upgrade struktury BWS? Może w związku z tym również początkowa konwersja ("do BM2") może odbywać się bez wyrażenia przez użytkownika wprost zgody?
Jak często zdarzają się jeszcze użytkownicy, którzy potrzebują użyć Aktywatora, ale jednocześnie trzymać strukturę BWS w starym formacie? (I jak bardzo możliwe, że ci użytkownicy będą korzystać z jakichkolwiek aktualizacji Aktywatora, gdy funkcje, które wprowadzamy, dotyczą BM2?)
Propozycja ulepszenia bezpieczeństwa PINów:
Grubsza Sprawa™.
Po pierwsze, odróżnianie turnieju parowego od indywidualnego może nie okazać się trywialne.
Po drugie, nie jestem pewien, czy to jest w ogóle wykonalne - w sensie, czy na poziomie BWS nazwiska nie operują numerami par, które dla turniejów indywidualnych i tak trzeba ukrywać, bo pokazują się N/E, a nie ma jak określić S/W.
Może taka funkcjonalność wymaga wręcz poważnej ingerencji w BWSa generowanego przez Pary dla indywiduelów.
Version: 3.0.1
Date: February 13th, 2018
Requires server: 3.0.1d USB usbs301d.exe
File name: BM2_3-0-1.BM2
Team games functionality added. Teams can review scores from both matches and view their match results in IMP at the end of the match.
Program jest dystrybuowany na GPL.
Problem łatwy - czy to nie oznacza, że wraz z binarną postacią programu muszą być dystrybuowane jego źródła (choćby w formie linku do tego repozytorium) albo przynajmniej deklaracja ich dostarczenia?
I problem trudniejszy - w paczkach dołączamy Mysql.data.dll. Czy to jest zgodne z GPL?
Z tego, co udało mi się wyczytać [1] [2] - samo używanie zamkniętej(?*) DLLki nie jest naruszeniem GPL, o ile taka DLLka jest tzw. "System Library", co w przypadku Mysql.data.dll raczej ma miejsce.
Ale dystrybucja tej DLLki to zupełnie inna para butów, bo wyjątek dla "System Library" jest pomyślany w ten sposób, że kod może nie dystrybuować źródeł biblioteki, z której korzysta, a którą końcowy użytkownik jest w stanie łatwo zainstalować, zachowując (do)wolność instalacji tej biblioteki.
* w końcu - czy ta DLLka nie pochodzi aby z: https://dev.mysql.com/downloads/connector/net/, dystrybuowanego na GPL i nie wystarczy jedynie odnośnik w sekcji "Licencja" w README?
Sądzę, że aktualnie jest nieergonomicznie (albo nieintuicyjnie).
Jak już ustawię tak jak chcę muszę (?) na dole okna kliknąć zapisz do BWS
, a potem na górze okna BCS
.
Dodatkowo muszę jeszcze odwiedzić inna kartę -> Nazwiska
. Muszę to kliknąć na górze programu.
Otwieram turniej z JFR i zgaduję że na dole muszę kliknąć synchronizuj teraz
i znowu na górę BCS
.
Moim zdaniem:
Przykładowe rozwiązanie:
Uruchom BCS
wykona najpierw zapisanie i synchronizację (nikt nie chce przecież uruchomić z innymi ustawieniami niż te co są wybrane teraz)Przymierzam się do dopisania wczytywania nazwisk z RRB.
Pytania:
Integrować w jakikolwiek sposób z istniejącym interfejsem nazwisk z Par/Teamów?
Mówię tu o zachowaniu opcji "Synchronizuj teraz", "Wymuś przesłanie wszystkich" i "Synchronizuj cyklicznie". To by wymagało pewnie wprowadzenia jakiejś warstwy abstrakcji dla listy spisu nazwisk, żeby logika prawej części panelu pozostała bez zmian, a jedynie w lewej części panelu wczytywać informacje z .rrt zamiast MySQLa.
RRB oczywiście nie trzyma osobno imienia i nazwiska zawodnika. To sprawia, że trzeba zgadywać przy skracaniu imienia do inicjału.
W CEZaRze są trzy pozycje zawierające spację w nazwisku (tj. więcej niż jedno słowo w nazwisku) oraz nikogo, kto by miał spację w imieniu - strzelam, że dlatego, że drugie imiona są trzymane osobno i nie wystawiane w CSVce. Narzuca się więc traktowanie ciągu do pierwszej spacji jako imienia, a całej reszty jako nazwiska.
Spotkaliście się kiedyś z jakimś przypadkiem upartego uczestnika, który upierałby się przy wyświetlaniu go w wynikach jako "Anna Maria", "Jan Maria", "Jan Paweł", czy cokolwiek?
Przy okazji patrzenia w nietypowe nazwiska, okazało się, że przydałoby się również podmienić poczciwą metodę bezOgonkow na coś, co nie będzie sprawiać problemów przy okazji różnych Jørgensenów.
Zamiast pełnej nazwy
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.