Działania użytkownika raz dziennie: resetowanie 24 godzin vs. resetowanie północy [zamknięte]

24

Gdy użytkownik jest w stanie wykonać akcję tylko raz dziennie, na przykład otrzymać bezpłatny bilet na zawody, mam dwie możliwości.

1) 24-godzinny reset

Jeśli wykona akcję w dniu 1 o godzinie 23:45, może wykonać ją ponownie tylko w dniu 2 w dniu lub po godzinie 23:45. Nie będzie w stanie tego zrobić 11:44 w dniu 2.

2) Reset o północy (lub dowolny ustalony czas)

Bez względu na to, o której godzinie użytkownik wykona czynność pierwszego dnia, gdy tylko skończy się północ i rozpocznie się drugi dzień, będzie mógł to zrobić ponownie.


Oba ograniczają użytkownika do wykonywania tylko jednej czynności dziennie, ale najczęściej spotykam metodę 1, która moim zdaniem jest dość niewygodna z dwóch powodów:

  • Najpierw muszę czekać na czas
  • i sekundę w długim okresie czasu, znacznik czasu, w którym wykonuję akcję, stanie się później i później, ponieważ nie będę w stanie wykonywać akcji dokładnie o tej godzinie każdego dnia, tylko kilka sekund lub minut później.

Czy istnieje jakikolwiek techniczny powód, aby preferować metodę 1, chociaż moim zdaniem istotna wada dla użytkownika wskazana wcześniej?


Edytuj, aby sprecyzować: Mówię szczególnie o przykładzie, w którym faktyczna przerwa czasowa 24 godzin nie jest oczywiście potrzebna, na przykład w bieżącym wydarzeniu z darmowym obrotem w teorii 11 , w którym dostajesz 1 darmowy obrót co 24 godziny, aby uzyskać szansę w zdobywaniu nagród.

RUL
źródło
5
Może istnieć powód, aby ograniczyć rzeczywisty czas między działaniami, dlatego wybrali 24-godzinną blokadę. Na przykład, z opcją 2, możesz wykonać akcję o 23:59 i o 00:00 ponownie.
Ivo Coumans
21
Odpowiedź byłaby całkowicie specyficzna dla problemu i nie jest trudno znaleźć problemy, które pasują. Oprogramowanie jest opracowywane w celu wdrażania reguł biznesowych, a nie na odwrót.
Blrfl,
4
Pamiętaj, że północ jest czasem arbitralnym. Równie łatwo może być w dowolnym momencie.
David Starkey,
2
Niby sidenotyczny, północ może być problematyczna dla nocnych sów. Aby obejść ten problem, na przykład WoW resetuje „codzienne” rzeczy o 3 lub 4 rano.
Kevin
6
Uwaga: Istnieje wiele gier, które pozwalają Akcję co 21 godzin. Teoretycznie można nadużywać tego, aby dostać> 1 dziennie, ale to oznacza przebudzenie w półsenach, co jest na tyle rzadkie, że zwykle nie jest tak duże dla serwerów. Pozwala to użytkownikom logować się „codziennie” bez limitu czasu, który powoli postępuje w ciągu dnia.
Mooing Duck,

Odpowiedzi:

21

Jestem zaskoczony, jak zwykle oczekiwałbym resetu o północy.

Ma jednak poważną wadę, ponieważ co godzinę jest więcej niż jedna północ. Musisz wybrać strefę czasową.

Być może dlatego wybrano opcję uniwersalną raz na 24 godziny, możesz sobie wyobrazić, że firma może nie chcieć zaakceptować faktu, że użytkownicy w połowie różnych krajów mogą mieć lokalne godziny końcowe o północy, a raczej nie uważają, że powiedzenie „na dzień” implikuje północ i w ten sposób zmieniają marketing na „na 24h” i specyfikację oprogramowania do dopasowania

Chociaż myślę, że w dzisiejszych czasach jest to dość powszechne, gdy „kończy się o 14:00 GMT” lub podobnie.

Myślałem, że wyzwanie przechowywania daty ostatniej akcji dla każdego użytkownika byłoby trudniejsze niż przypisanie strefy czasowej użytkownikom lub typom akcji.

Edytuj Myślę, że warto zauważyć różnice między tymi dwiema metodami

Zasada 24 godzin

  • Otrzymam stały strumień wydarzeń, stawka ograniczona do mniej niż 1 na 24 godziny.
  • Kiedy to zakończę, niektórzy użytkownicy otrzymają mniej wydarzeń.
  • Muszę przechowywać ostatnie zdarzenie każdego użytkownika
  • Gdy czas letni powoduje długi lub krótki dzień, nie będę miał 1 zdarzenia dziennie
  • Ludzie nie będą w stanie trafić dokładnie kropką dokładnie 24 godziny, więc naturalnie otrzymam średnio mniej niż 1 dziennie

Reguła 1 na dzień kalendarzowy

  • Dostaję wydarzenia zbiorcze w ciągu 50 godzin (? UTC + 14 do -12?) Przypisanych do dnia kalendarzowego
  • realistycznie muszę zapisać ostatnie zdarzenie każdego użytkownika jako „dni” na okrążeniu
  • Mam definitywny koniec dnia w którym mogę powiedzieć wszystkie wydarzenia po teraz nie są w ciągu dnia.
  • Muszę znać lokalizację użytkownika, aby wiedzieć, którego dnia dotyczy jego wydarzenie
  • Niektórzy ludzie budzą się znacznie wcześniej w ciągu „dnia” niż inni

1 na dzień kalendarzowy w regule UTC

  • Dostaję ładny mundur 24 godziny na dobę
  • Mogę organizować wydarzenia
  • Wiem, kiedy jest początek i koniec dnia
  • Oszczędności w ciągu dnia zmieszają ludzi.
  • Ludzie mogą mieć 1 wydarzenie dziennie
  • Ludzie nie mieszkający w pobliżu Greenwich będą mieli zabawne czasy rozpoczęcia i zakończenia
  • Może mogę zrobić sprytną optymalizację i po prostu zapisać listę użytkowników, którzy weszli? (prawdopodobnie skończę na przechowywaniu każdego zdarzenia i czasu każdego użytkownika)

* Grupowanie wydarzeń będzie bardzo przydatne do różnych celów sprawozdawczych. na przykład. powiedz, że mam 10 nagród do wygrania co 24 godziny i różnią się one w czasie. Ilu uczniów zgłosiło się w dniu 10? itp

Ewan
źródło
Wyraźnie poruszasz mój tok myśli, gdy jestem równie zaskoczony. Myślę, że wybranie 24-godzinnego resetu byłoby dość leniwe, ale jak stwierdza odpowiedź @Richard Ward, może być trudniej przestrzegać wszystkich stref czasowych, a nawet powodować problemy z komunikacją w momencie rozpoczęcia i zakończenia wydarzenia.
RUL
hmm, myślę, że masz pomieszane odpowiedzi. Ale po namyśle myślę, że najprawdopodobniej jest to problem komunikacji biznesowej z deweloperem. Mogę sobie tylko wyobrazić spotkanie planistyczne ... Sprzedaż: „Więc użytkownicy mogą mieć możliwość skorzystania z oferty raz dziennie.” Dev: „a jeśli lecą i przekroczą międzynarodową linię daty? Czy mogą złożyć dwa zamówienia? „ Sprzedaż: „..... nie ... powiedzmy 1 na 24 godziny” Dev: „OK, hmm gona potrzebuje więcej tabel do przechowywania wszystkich tych danych!” Wyprzedaż: „Whateves”
Ewan
Widzisz, myślisz, że podejście 24-godzinne jest mniej skomplikowane? Ponieważ nie wydaje mi się, że poza dodatkowym stołem jest o wiele łatwiej powiedzieć 24 godziny niż sprawdzanie i obliczanie w różnych strefach czasowych. Ale masz rację: opuszczając strefę czasową, możesz uzyskać więcej niż jeden obrót.
RUL
4
Myślę, że wyjaśnienie
Ewan,
10
To. Rzeczy zależne od strefy czasowej otwierają całą puszkę robaków, które możesz po prostu zostawić zamknięte przy użyciu reguły 24-godzinnego limitu czasu. I nie jest to trudniejsze do zapamiętania, kiedy zdarzyła się akcja, niż do zapamiętania, że ​​wydarzyło się to w określonym dniu.
cmaster
14

Z czubka mojej głowy:

  • Implementacja wersji „24 godziny od ostatniej akcji” może być łatwiejsza
  • Jeśli użytkownik nie wykona czynności dokładnie 24 godziny po ostatnim czasie, może w końcu stracić całą 24-godzinną przerwę, ponieważ reset musi nastąpić, gdy śpi lub pracuje. Być może robią to o 7 rano przed wyjazdem do pracy i wychodzą do pracy o 20:00. Następnego dnia robią to o 7:15, potem o 7:30, a potem o 7:45, a ostatniego dnia pozostają do 8:00, aby wykonać akcję tuż przed wyjazdem. Następnego dnia nie są skłonni zostać do 8:15, więc po prostu przegap ten poranek i zrób to po powrocie z pracy o 18:00, czyli 34 godziny przerwy. Jeśli wynik działania jest dla firmy kosztowny, oszczędność może być ważniejsza niż niedogodność.
Richard Ward
źródło
3
Dobra uwaga na podstępny powód marketingowy, aby użytkownicy przegapili jeden dzień.
RUL
1
@RUL Lub, co bardziej prawdopodobne, użytkownik jest bardziej skłonny kupić „płatny dodatkowy obrót” (lub cokolwiek innego), jeśli przegapi darmowy. Koszt rozdania spinów może być trywialny, ale okazjonalna dodatkowa sprzedaż może być tego warta.
TripeHound,
Grałem w grę opartą na czasach Zulu, kiedy byłem w USA. Nie było trywialne trzymanie się prosto, gdy mogłem lub nie mogłem podjąć działania.
Cort Ammon - Przywróć Monikę
2
Punkt 2 jest powodem, dla którego Blizzard (itp.) Unika 24-godzinnego timera resetowania w WoW i innych MMORPG i zamiast tego dokonuje codziennego resetowania.
Adonalsium
8
Warto zauważyć, że niektóre firmy stosują mniej rygorystyczne „codzienne” - League of Legends korzysta z 21-godzinnej blokady na „pierwszą wygraną dnia”. Wystarczające, aby zachować bonusy mniej więcej codziennie, a jednocześnie są wygodne dla graczy. Być może wynika to częściowo z faktu, że nie zawsze wygrywasz pierwszą grę, a gra zajmuje ~ 30-50 minut, więc ścisły zegar byłby naprawdę denerwujący (ponieważ możesz skrócić czas o około 30 minut) dzień, w którym to nie jest kuszące, ponieważ masz tylko czas na zdobycie pierwszej wygranej co 3 dni według napiętego harmonogramu).
Delioth,
8

Jak wspomniano w innych odpowiedziach, metoda 24-godzinna jest bardziej przyjazna dla wielu stref czasowych i jest tak samo łatwa do kodowania, jak zapisanie ostatniej pomyślnej sygnatury czasowej dla każdego użytkownika.

Ma również dodatkową „zaletę” polegającą na tym, że użytkownik musi codziennie wchodzić w interakcje z aplikacją, aby uzyskać wszystkie codzienne czynności. Jeśli powiedzą reset północy, użytkownik może wykonać akcję o 23:59, a następnie ponownie o 12:00. Mogli to robić co drugi dzień i nadal otrzymywać wszystkie działania. W przypadku niektórych aplikacji celem codziennych czynności jest zachęcenie użytkownika do codziennej interakcji z aplikacją, co jest mniej idealne.

Istnieje trzecia alternatywa, która pozwala uniknąć pułapek interfejsu użytkownika obu, ale jest nieco trudniejsza do kodowania.

3) Brak serii więcej niż n akcji w ciągu (n-0,75) * 24 godziny

Wymaga do przechowywania dwóch zmiennych, ale pozwala komuś, kto nie próbuje nadużywać systemu, korzystać z jednej akcji w dowolnym momencie dnia bez martwienia się o strefy czasowe i resetowania.

Zapobiega także użyciu przez użytkownika więcej niż 1 „dodatkowej” akcji.

W rzeczywistości zaimplementuj algorytm, w którym musisz zapisać czas rozpoczęcia serii, ostatni czas gry i liczbę akcji w serii.

Śledzenie czasu ostatniej akcji pozwala odrzucić dwie akcje, które są zbyt blisko siebie. Możesz ograniczyć ten limit do mniej niż 24 godzin, ponieważ smuga zapobiega pełzaniu wcześniej w ciągu dnia.

Smuga trwa tak długo, jak codziennie podejmujesz działania. Jeśli wykonanie akcji oznaczałoby, że w serii masz więcej akcji niż dni, zostanie ona odrzucona. Zapobiega to powoli pełzającym naprzód, pakując się w „dodatkowe” działania, ponieważ czas rozpoczęcia twojej serii nie zmienia się.

jakiś pseudo kod do wdrożenia kontroli i śledzenia czasów:

//precondition: streakStart and  lastAction are initialized as in the far past
//              streakCount is initialized as 0
graceHours=18;
checkAllowed(currentTime,&streakStart,&streakCount, &lastAction){
    diffhours=hoursDifferent(lastAction,currentTime);
    if(diffhours< 24 - graceHours){
        return false;
    }
    diffhours=hoursDifferent(streakStart,currentTime);
    if(diffhours <= 24*streakCount - graceHours){
        return false;
    }
    if(diffhours > 24*(streakCount+2)-graceHours){
        streakStart=currentTime;
        streakCount=0;
    }
    streakCount++;
    lastActionTime=currentTime;
    return true;
}

Jako dodatkowy bonus otrzymujesz licznik serii, jeśli chcesz.

Stóg
źródło
Myślę, że jest to prawdopodobnie najlepsza odpowiedź, ponieważ „po prostu działa” dla użytkownika. Jedynym minusem jest to, że może być trudne do zrozumienia, ale powinno to wpłynąć tylko na osoby próbujące zagrać w system. 18 graceHours można wyjaśnić w tekście, ponieważ uważam, że ważne jest, aby ta praca działała (myślę, że powinna być niższa)
rtpax
Interesujące podejście, mimo wszystko, czy mógłbyś rozwinąć więcej słów, jak to działa?
RUL
@RUL Podstawową ideą jest to, że czas resetowania dla użytkownika jest zablokowany po podjęciu pierwszej czynności. Nie jest zablokowany w momencie, w którym podejmują działania, ale nieco wcześniej (w tym przypadku 18 godzin wcześniej), aby zapewnić lepszą obsługę. Pozwala to użytkownikowi nieco wyprzedzić (może wykonać swoje pierwsze dwie czynności w ciągu zaledwie 6 godzin), ale nie ma skumulowanego błędu, ponieważ początek jest nadal zablokowany - jeśli osiągnął maksymalny okres karencji, będzie musiał poczekać co najmniej 24 godziny na następne działanie.
Jacob Raihle,
5

Jeśli chodzi o Twój problem z 24-godzinnym czasem trwania między działaniami, niektóre firmy zamiast tego używają 22-godzinnego czasu, w ten sposób użytkownicy uzyskują swobodę w dokładnym momencie dnia, w którym działanie jest wymagane, i nadal zachęcają użytkowników do faktycznego wykonania działania raz dziennie -nie 23:59 - 00:00 luka.

Brak odpowiedzi, ale nie mam wystarczającej liczby punktów do skomentowania.

TheNaturalTanuki
źródło
Myślę, że ta strona robi to za pomocą zbędnych rzeczy, takich jak głosy. Nie resetują się co 24 godziny, ale co około 16 (nie jestem pewien dokładnej liczby). Wydaje mi się, że ma to sens - powiedzmy, że zaczynasz dzień o 8 rano i zaczynasz głosować w górę / w dół - zabraknie głosów w ciągu 6 godzin o 2 po południu. W przypadku ścisłego resetu 24-godzinnego od działania, jeśli wybierzesz czas resetowania w ostatnim głosowaniu, będziesz musiał poczekać do 14:00, aby rozpocząć głosowanie zamiast zwykłego czasu, a wtedy możesz nie mieć czasu. Jeśli wybierzesz pierwszy głos, masz problem, jeśli któregoś dnia zaczniesz głosować o 10 rano, a następnego 8 rano.
VLAZ,
Chociaż teraz, gdy o tym myślę - nie jestem pewien, czy tak naprawdę 16 godzinny czas resetowania zablokował działania. Może to być 24 godziny i zdarzyło mi się złapać to 8 godzin po codziennym resecie. Ale myślę, że logika trzyma się - jeśli masz 24 indywidualne liczniki, może to nie być wygodne dla użytkownika.
VLAZ,
Ma to odwrotny problem z 34-godzinnym resetem, polegającym na tym, że użytkownicy mogą spakować dodatkowe działania, jeśli zawsze działają tak szybko, jak to możliwe (oczywiście wymagałoby to okropnego harmonogramu snu ...)
Rick
3
tl/dr: 24 hour resets are the lazy man's way of minimizing load spikes

Oprócz powyższych odpowiedzi resetowanie o północy sprzyja wzrostowi natężenia ruchu. Jeśli akcja stanie się dostępna dla wszystkich uczestników w określonym czasie, wiele osób będzie zachęcać do podjęcia akcji w tym samym czasie. Jest to ten sam powód, dla którego w większości stanów wasze prawo jazdy wygasa w dniu urodzin zamiast w ustalonym terminie (USA): DMV nie byłby w stanie dotrzymać kroku, gdyby wszyscy mieli prawo jazdy wygasające 1 stycznia.

Małe na bok : jeśli system komputerowy musi podejmować działania dla dużej liczby użytkowników raz dziennie, możesz zadać to samo pytanie, a ja zwykle projektuję je jako połączenie obu. Można sobie wyobrazić dwa zadania crona:

  1. Biegnij o północy, znajdź wszystkie rekordy, podejmij działania
  2. Uruchom co minutę (lub jakąś regularną częstotliwość), znajdź wszystkie rekordy, które nie podjęły działania od 00:00 wczoraj, podejmij działanie, zapisz, że działanie zostało podjęte

W praktyce uważam, że to pierwsze jest kruche. Jeśli zadanie CRON zepsuje się podczas działania, pewna liczba może nie mieć zastosowanej akcji, a system może potrzebować dodatkowej pracy, aby zapamiętać, gdzie była i odebrać od miejsca, w którym została przerwana. Może również powodować problemy, jeśli uzyskasz wystarczającą liczbę rekordów, że zadanie cron nie może przetworzyć ich wszystkich w rozsądnym terminie i zostanie zamknięte przed zakończeniem.

Ten ostatni rozwiązuje oba te problemy. Nie ma na celu rozdzielenia wszystkiego dokładnie 24 godziny od siebie, ale tak długo, jak twoje zadanie cron może z łatwością wykonywać wszystkie działania każdego dnia, będą one dość blisko i zagwarantujesz, że każdy biegnie każdego dnia (tj. rzeczy nie będą się powoli rozpadać o więcej niż 24 godziny). Najważniejsze jednak, że z jakiegoś powodu z łatwością zejdzie z miejsca, w którym zostało przerwane.

https://www.youtube.com/watch?v=hoMO1yYC7pQ

Conor Mancone
źródło
0

Dzienne bilety autobusowe / kolejowe w TfL (Transport do Londynu) są ważne od 4:30 do 4:30. Wykonaj zmianę, gdy ludzie śpią. Wiele osób będzie chciało skorzystać z usługi, powiedzmy od 8:30 do godziny po północy

gnasher729
źródło
4
Jest to odpowiednie do użytku ściśle lokalnego, ale jeśli oczekujesz interakcji z Internetem, nie możesz wybrać czasu resetowania, który pasuje każdemu. Nawet lokalnie ludzie mają różne czasy snu - pracownicy zmianowi itp. Drobne zastrzeżenia, niewystarczające dla -1.
Corey,
@Corey Steam wiąże większość swoich zegarów z czasem 10 rano pacyficznego. Mówiąc ściślej, dotyczy to wszelkich promocji - codziennie (10 rano każdego dnia), w środku tygodnia (10 rano we wtorek - 10 rano w piątek) lub w weekend (10 rano w piątek - 10:00 w poniedziałek). Jako sklep międzynarodowy, który obowiązuje wszystkich - byłby to 19:00 czasu środkowoeuropejskiego lub 13:00 w Nowym Jorku. Być może nie jest to wygodne w każdej strefie czasowej, ale jest spójne. I szczerze mówiąc, nawet gdybym używał PT, to 10 rano nie byłoby zbyt wygodne - jestem w Europie, więc wieczór jest dla mnie lepszy.
VLAZ,
0

Resetowanie o północy ma określony warunek, który może być pożądany lub szkodliwy, w zależności od tego, jaki problem próbujesz rozwiązać, a mianowicie: Mogę wykonać akcję pewnego dnia o 11:59:58 i ponownie o 00:00:01. Jeśli przestrzenią problemową jest jakakolwiek konkurencja, może to przynieść niesprawiedliwą przewagę osobom decydującym się na wykonywanie swoich działań blisko północy. Reguła resetowania w ciągu 24 godzin jest jedynym sposobem na zapewnienie sprawiedliwego podziału dostępnych działań niezależnie od pory dnia, w której ktoś ma do nich dostęp.

Konsekwencją późniejszego i późniejszego resetu 24-godzinnego można złagodzić, wprowadzając tolerancję, na przykład akceptując żądanie akcji w ciągu 15 minut od zresetowania, o ile akcja nie jest faktycznie zarejestrowana (lub nie jest podejmowana efekt), aż nastąpi reset. Wprowadza to nieco więcej złożoności do rozwiązania, ale nie mogę wymyślić żadnej strategii łagodzenia dla możliwości podjęcia dwóch codziennych działań w odstępie kilku sekund, jak w przypadku resetu o północy.

Jeff Lambert
źródło
0

Nie widziałem nikogo wspominającego o tym, że zasada 24 godzin zachęca do rutynowych regularnych wizyt. Wiele gier ma nagrodę za logowanie / zwycięstwo raz dziennie, która resetuje się po 24 godzinach, ponieważ wolą, abyś odprawiał się przez krótki czas co 24 godziny, a nie dwa razy dłużej co 48 godzin. Wyobrażam sobie, że podobnie jest w przypadku stron internetowych z biletami.

Carl
źródło
1
Obie metody wymuszają ponowną wizytę przez 24 godziny, z wyjątkiem kilku osób, które czekają 48 godzin i wykonują akcję 23:59:59 i 00:00:01, ale myślę, że jest to dość nieistotne.
RUL
@RUL Korzystam z metody odprawy dwa razy z rzędu w przypadku wielu gier, dla których czasy resetowania są dla mnie dogodne. Więc nie sądzę, że jest to tak nieistotne, jak myślisz. Generalnie nie loguję się co 48 godzin, ale prawie zawsze dostaję 2 akcje za każdym razem, gdy się loguję.
Rick,