Операція користувача один раз на день: Скидання 24 годин проти Поночі Скидання [закрито]


24

Коли користувач може виконати дію лише раз на день, наприклад отримати безкоштовний квиток на змагання, я зі свого досвіду зіткнувся з двома можливостями.

1) Скидання 24 годин

Якщо він виконує дію 1-го дня до 23:45, він може повторити дію лише 2-го дня, або після 11:45. Він не зможе це зробити 11:44 другого дня.

2) Поночі Скидання (або будь-який встановлений час)

Незалежно від того, в який час користувач виконує дію в перший день, як тільки настає півночі і починається 2 день, він зможе зробити це знову.


Обидва обмежують користувача у виконанні лише однієї дії на день, але я найчастіше натрапляю на метод 1, який я вважаю досить незручним з двох причин:

  • Спершу треба почекати часу
  • по-друге, протягом тривалого періоду часова мітка мене, яка виконує дію, стане пізніше і пізніше, оскільки я не зможу виконувати дію саме в ту часову позначку, лише через пару секунд або хвилин.

Чи є якась технічна причина, що ви віддаєте перевагу методу 1, хоча, на мою думку, важливим недоліком для користувача, заявленого заздалегідь?


Редагуйте, щоб уточнити: я особливо говорю про приклад, коли фактичний часовий проміжок 24 години очевидно не потрібен, як, наприклад, у поточному події безкоштовного віджимання Theory11 , де ви отримуєте 1 безкоштовне віджимання кожні 24 години, щоб отримати шанс. при виграші призів.


5
Можливо, є причина обмежити фактичний час між діями, через що вони вирішать цілодобове відключення. Наприклад, з варіантом 2 ви можете виконати дію о 23:59 та о 00:00 знову.
Іво Куманс

21
Відповідь була б цілком специфічною, і не важко придумати і такі проблеми. Програмне забезпечення розроблене для реалізації правил бізнесу, а не навпаки.
Blrfl

4
Зауважте, що опівночі - це довільний час. Це так само легко може бути в будь-який час, коли вам захочеться.
Девід Старкі

2
Вигляд сторони, опівночі може бути проблематичним для нічних сов. Наприклад, WoW, наприклад, обробляє "щоденні" речі о 3 чи 4 ранку.
Кевін

6
Примітка. Існують різноманітні ігри та такі, що дозволяють проводити дії лише кожні 21 години. Теоретично можна зловживати цим, щоб отримати> 1 на день, але це означає пробудження серед сну, що досить рідко, як правило, не так вже й велика угода для серверів. Потім він дозволяє користувачам входити "щоранку", не втрачаючи часу, щоб повільно просуватися протягом дня.
Mooing Duck

Відповіді:


21

Я здивований, як зазвичай я очікував перезавантаження півночі.

Однак це має головний недолік у тому, що є щонайменше півночі кожні 24 години. Вам потрібно вибрати свій часовий пояс.

Можливо, саме тому вибирається універсальний раз на 24 години, ви можете уявити, що компанія може не захотіти визнати, що половина користувачів у різних країнах може мати не останню півночі, а точніше, ніж вони можуть вважати, що вислів "за день" мається на увазі опівночі і, таким чином, вони змінюють маркетинг на "за 24 години" та специфікацію програмного забезпечення

Хоча я думаю, що це досить поширене явище, коли "закінчується о 14:00 GMT" або подібне в ці дні.

Я б подумав, що завдання зберігання дати останньої дії для кожного користувача буде складніше, ніж завдання призначення часового поясу користувачам або типам дій.

Правка Я думаю, що варто відзначити відмінності між двома методами

Правило 24 години

  • Я отримаю постійний потік подій, швидкість обмежена менше ніж 1 на 24 години.
  • Коли я закінчу справу, деякі користувачі отримають менше подій.
  • Мені потрібно зберігати останню подію кожного користувача
  • Коли економія денного світла викликає довгий або короткий день, я не маю 1 події на день
  • Люди не зможуть вдарити рівно за 24 години на крапку, тому я, звичайно, отримуватимуть менше 1 в день в середньому

1 за правило календарного дня

  • Я отримую сумнівні події протягом 50-годинного (? UTC + 14 до -12?) Періоду, призначеного на календарний день
  • реально мені все одно доводиться зберігати останню подію кожного користувача як "дні" на колінах
  • У мене є певний кінець дня, коли я можу сказати, що всі події після цього не в день.
  • Мені потрібно знати місцезнаходження користувача, щоб знати, на який день стосується їх події
  • Деякі люди прокидаються набагато раніше в день, ніж інші

1 на календарний день у правилі UTC

  • Я отримую гарну форму 24 години довгих днів
  • Я можу вести свої події
  • Я знаю, коли початок і кінець дня
  • Економія літнього дня збирається збентежити людей.
  • У людини може бути 1 подія на день
  • Люди, які не живуть поблизу Грінвіч, матимуть смішні часи початку та закінчення
  • Можливо, я можу зробити розумну оптимізацію та просто зберегти список користувачів, які ввійшли? (ймовірно, я закінчу зберігати кожну подію та час кожного користувача)

* Робоча група подій стане дуже корисною для різних цілей звітності. напр. скажіть, у мене є 10 призів, які потрібно виграти кожні 24 години, і вони різняться у часі. Скільки студентів вступило на 10 день? тощо


Ви чітко зачіпаєте мій потяг думок, коли я однаково переживаю. Я думаю, що було б досить ледачо продовжувати перезавантаження на 24 години, але як зазначається у відповіді @Richard Ward, може бути складніше дотримуватися всіх часових поясів і навіть може викликати проблеми спілкування на момент початку та закінчення події.
РУЛ

хм, я думаю, ти збентежив свої відповіді. Але розмірковуючи, я думаю, що це, швидше за все, питання комунікації бізнес / розробник. Я просто можу уявити зустріч планування ... Продажі: "Отже, користувачам можна приймати пропозицію лише один раз на день." " Продажі: "..... ні ... дозвольмо сказати 1 на 24 години" Dev: "Гаразд, хм, гона потрібно більше таблиць, щоб зберігати всі ці дані!" Продажі: "whateves"
Еван

Я бачу, ви вважаєте, що цілодобовий підхід є менш складним? Тому що я не думаю, що крім того, щоб мати додаткову таблицю, набагато простіше просто сказати 24 години, ніж перевірка та обчислення в різних часових поясах. Але у вас є хороший момент: вийшовши з часового поясу, ви насправді могли отримати більше, ніж один оберт.
РУЛ

4
Я думаю, що пояснювати
Еван

10
Це. Залежні від часових поясів речі відкривають цілу банку глистів, яку ви можете просто залишити закритою, користуючись правилом 24-годинного очікування. І зберігати, коли трапилася дія, не складніше, ніж зберігати те, що це відбулося в конкретний день.
cmaster

14

Вгорі голови:

  • Можливо, буде легше реалізувати версію "24 години з моменту останньої дії"
  • Якщо користувач не виконує дію точно через 24 години після останнього часу, то з часом він може пропустити цілий 24-годинний період, оскільки скидання має відбутися під час сну або роботи. Можливо, вони роблять це о 7 годині ранку, перш ніж виїхати на роботу, а вийти на роботу о 8 вечора. Наступного дня вони роблять це о 7:15, потім 7:30, потім 7:45, а в останній день залишаються до 8:00, щоб виконати дію безпосередньо перед від'їздом. Наступного дня вони не бажають залишатися до 8:15, тому просто пропустіть цей ранок і зробіть це після повернення додому о 18 вечора, розрив 34 години. Якщо результат акції дорогий для компанії, економія може бути важливішою, ніж незручність.

3
Добре вказуйте на підступну маркетингову причину, щоб змусити користувачів пропустити один день.
РУЛ

1
@RUL Або, мабуть, до речі, користувач швидше придбає "додаткову оплату" (або що завгодно), якщо пропустить безкоштовний. Вартість віддачі закруток може бути банальною, але випадкові додаткові розпродажі можуть того вартий.
TripeHound

Я грав у гру, засновану на зулуський час, коли я був у США. Не тривіально триматись прямо, коли я міг або не міг займатися діяльністю.
Корт Аммон - Відновіть Моніку

2
Точка 2 тому Blizzard (тощо) уникає 24-годинного таймеру скидання в WoW та інших MMORPG і замість цього проводить щоденний скидання.
Адоналізію

8
Можливо, варто відзначити, що деякі компанії просто використовують менш суворий "щоденний" - League of Legends використовує 21-годинний фіксатор для "першої виграші дня". Досить тримати бонуси приблизно щодня, при цьому зручно для гравців. Можливо, частково через ідею, що ви не завжди будете вигравати свою першу гру, а ігри займуть ~ 30-50 хвилин, тож суворий годинник буде дуже роздратований (оскільки ви, швидше за все, відсунете час на 30 хвилин або близько того день, і в цей момент це не заманливо, оскільки у вас є лише час гри, щоб отримати першу виграшу кожні 3 дні за напруженим графіком).
Delioth

8

Як згадували інші відповіді, 24-годинний метод є більш сприятливим для декількох часових поясів і його так само просто кодувати, як ви просто зберігаєте останню вдалу мітку для кожного користувача.

Він також має додаткову перевагу - фактично вимагати від користувача щодня взаємодії з додатком, щоб отримувати всі щоденні дії. Якщо є скажіння скидання опівночі, користувач може зробити дію о 23:59, а потім знову о 12:00. Вони могли це робити через день і все-таки отримувати всі дії. Для деяких додатків мета щоденних дій полягає в тому, щоб користувач щодня спілкувався з додатком, тому це менш ідеально.

Є третя альтернатива, яка дозволяє уникнути підводних каменів обох інтерфейсів, але їх трохи важче кодувати.

3) Немає смуг більш ніж n дій за (n-0,75) * 24 години

Для зберігання потрібні дві змінні, але це дозволяє тим, хто не намагається зловживати системою, використовувати їх одну дію в будь-який час протягом дня, не турбуючись про часові пояси та скидання.

Це також заважає комусь використовувати більше 1 «зайвої» дії.

Тож реально реалізуйте алгоритм, який вам потрібно буде зберігати час початку смуги, час останнього відтворення та кількість дій у вашій смузі.

Відстеження часу останньої дії дозволяє відхилити дві дії, які знаходяться занадто близько один до одного. Цей обмеження можна зробити менше ніж на 24 години, оскільки смуга запобігає повзанню раніше дня.

Смуга триває до тих пір, поки ви щодня приймаєте свої дії. Якщо вжити заходів означатиме, що у вас буде більше дій, ніж днів, то її відхилять. Це запобігає повільному повзанню вперед, упаковці в "зайві" дії, оскільки час початку вашої смуги не змінюється.

деякий псевдо-код для здійснення перевірки та відстеження часу:

//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;
}

Як додатковий бонус, ви отримуєте лічильник смуг, якщо ви хочете його.


Я думаю, що це, мабуть, найкраща відповідь, оскільки це "просто працює" для користувача. Єдиним недоліком є ​​те, що це може бути важко зрозуміти, але це повинно впливати лише на людей, які намагаються грати в систему. 18 грацій-годин можна пояснити в тексті, оскільки я думаю, що це важливо зробити цю роботу (я думаю, вона повинна бути нижчою)
rtpax

Цікавий підхід, хоча, ви могли б детальніше пояснити, як це працює?
РУЛ

@RUL Основна ідея полягає в тому, що час скидання для користувача блокується після того, як вони вперше вступлять у дію. Це не заблоковано в той час, коли вони вживають своїх дій, але трохи раніше (в цьому випадку за 18 годин до цього), щоб забезпечити кращу роботу користувачів. Це дає змогу користувачеві трохи попереду (вони можуть виконати свої перші дві дії всього за 6 годин), але накопичувальної помилки немає, оскільки старт все ще заблокований - якщо вони заповнили пільговий період, їм доведеться чекати на не менше 24 годин для наступної дії.
Яків Райхле

5

Щодо вашої проблеми з тривалістю 24 години між діями, деякі компанії замість цього використовують 22-годинну тривалість. Таким чином, користувачі отримують трохи свободи в точний момент дня, коли необхідна дія, і все ж отримують спонукання користувачів до дійсної дії раз на день -не 23:59 - 00:00 лазівку.

Не відповідь, але у мене недостатньо балів для коментарів.


Я думаю, що цей веб-сайт робить це за допомогою витратних речей, таких як голоси. Вони не скидаються кожні 24 години, але кожні 16 або близько того (не впевнений у точній кількості). Я думаю, це має сенс - скажімо, ви починаєте свій день о 8 ранку і починаєте голосувати вгору / вниз - у вас закінчується голос за 6 годин о 14:00. При суворому скиді на 24 години після дії, якщо ви виберете час скидання під час останнього голосування, вам доведеться зачекати, поки знову вийдете до 14:00, щоб почати голосування замість звичного часу, і тоді ви, можливо, не встигнете. Якщо ви обираєте перший голос, то у вас виникнуть проблеми, якщо одного дня ви почнете голосувати о 10 ранку, а наступного о 8 ранку.
ВЛАЗ

Хоча зараз, коли я замислююся над цим, я не впевнений, чи дійсно 16 годин перезавантаження відключили дії. Це може бути 24 години, і я, здається, потрапив через 8 годин після щоденного скидання. Але я здогадуюсь, що логіка дотримується - якщо у вас є 24 індивідуальних таймера, це може бути не зручно для користувача.
ВЛАЗ

У цьому є протилежна проблема 34-годинного скидання: користувачі зможуть пакувати додаткові дії, якщо вони завжди діятимуть, як тільки можуть (звичайно, що вимагатиме жахливого режиму сну ...)
Рік

3
tl/dr: 24 hour resets are the lazy man's way of minimizing load spikes

На додаток до вищезазначених відповідей, опівночі скидання заохочує спливи руху. Якщо акція стане доступною для всіх учасників у певний час, тоді багато людей будуть стимулом одночасно робити спробу. Це та сама причина, чому в більшості штатів термін дії посвідчення водіїв закінчується в день народження, а не на встановлену дату (США): DMV не зможе продовжувати роботу, якщо термін дії посвідчення водія закінчується 1 січня.

Невелика сторона : якщо комп'ютерній системі потрібно вживати заходів один раз на день для великої кількості користувачів, ви можете задати одне і те ж питання, і я, як правило, проектую це поєднання обох. Ви можете уявити собі два завдання:

  1. Біжіть опівночі, знайдіть усі записи, прийміть дії
  2. Запускайте кожну хвилину (або якусь регулярну частоту), знайдіть усі записи, які не були вжиті з 00:00 вчора, вживайте заходів, записуйте, що дія було зроблено

На практиці я виявив колишнього крихким. Якщо під час запуску завдання cron зламається, деяка кількість може не застосовувати дії, і може знадобитися додаткова робота, щоб запам'ятати, де вона була, і забрати, де вона зупинилася. Це також може спричинити проблеми, якщо ви отримаєте достатньо записів про те, що ваше завдання Cron не може обробити їх усі в розумний термін, і він закінчується перед закінченням.

Останній піклується про обидва ці проблеми. Це не спрямоване на те, щоб все оброблялося рівно за 24 години, але поки ваша робота із кроном може легко виконувати всі дії кожного дня, вони будуть досить близькими, і ви гарантуєте, що кожен буде запущений кожного фактичного дня (тобто у вас не буде, що речі повільно розходяться більше ніж на 24 години). Найголовніше, що він легко підбере там, де він зупинився, якщо щось зірветься з якихось причин.

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


0

Щоденні квитки на автобус / поїзд у TfL (Транспорт для Лондона) діють з 4:30 до 4:30 ранку. Робіть перемикач, коли люди сплять. Дуже багато людей захочуть скористатися послугою, сказати з 8:30 до години ночі


4
Це добре для місцевого використання, але якщо ви очікуєте взаємодії з Інтернету, ви не можете вибрати час скидання, який підходить усім. Навіть місцеві люди мають різний час сну - робітники в зміну тощо. Незначні заперечення, недостатньо для -1.
Корі

@Corey Steam дійсно прив'язує більшість своїх таймерів до 10 ранку в тихоокеанський час. Більш конкретно, це змінюється в порівнянні з будь-якими акціями - щодня (10 ранку щодня), середній тиждень (10 ранку у вівторок - 10 ранку в п'ятницю) або вихідні дні (10:00 п’ятниці - 10:00 понеділка). Як міжнародний магазин, який застосовується для всіх - це буде 19:00 за центральноєвропейським часом або 13:00 у Нью-Йорку. Можливо, це не зручно для кожного часового поясу, але це послідовно. І, чесно кажучи, навіть коли я використовував PT, то 10 ранку було б не дуже зручно - я в Європі, тому вечір для мене краще.
ВЛАЗ

0

Повторне скидання має конкретний стан, який може бути бажаним або згубним, залежно від того, яку проблему ви намагаєтеся вирішити, а це: я можу виконати дію одного дня о 11:59:58 і знову о 00:00:01. Якщо проблемний простір є якоюсь конкуренцією, це може надати несправедливій перевазі людям, які вирішили виконувати свої дії близько півночі. Правило скидання 24 години - це єдиний спосіб забезпечити справедливий розподіл доступних дій незалежно від того, в який час доби хтось їм доступний.

Наслідком 24-годинного скидання, що стає пізніше і пізніше, можна пом'якшити, передбачивши допуск, наприклад, прийнявши запит на дію протягом 15 хвилин після скидання, який відбувся до тих пір, поки дія фактично не записано (або не відбудеться ефект), поки не відбудеться скидання. Це вводить трохи більше складності в рішення, але я не можу придумати жодної стратегії пом'якшення наслідків для того, щоб мати можливість робити дві щоденні дії за секунди, як у випадку скидання опівночі.


0

Я не бачив жодного згадування того факту, що правило 24 години заохочує звичайні регулярні відвідування. У багатьох іграх є нагорода за вхід / перемогу один раз на день, яка скидається через 24 години, тому що вони швидше заїжджатимуть на короткий час кожні 24 години, а не вдвічі кожні 48 годин. Я думаю, це схоже на веб-сайти, що розміщують роздачу квитків.


1
Обидва способи змушують переглядати цілодобово, за винятком кількох людей, які чекають 48 годин та виконують дію 23:59:59 та 00:00:01, але я вважаю, що це неактуально.
РУЛ

@RUL Я використовую метод реєстрації двічі поспіль для багатьох ігор, які скидали час у зручному для мене часовому поясі. Тому я не думаю, що це не так важливо, як ви думаєте. Я, як правило, не входжу кожні 48 годин, але я завжди отримую 2 дії щоразу, коли входжу в систему.
Рік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.