Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - achekh

Страницы: [1] 2 3 ... 77
1
се нормальные люди на кнопки сохранения добавляют анимации, что б было понятно, когда этот самый таймаут закончился. Без них это полный швах. Куда вы хотите добавить анимацию, и главное какую?)
Спиннер рядом/в поле ввода

2
Зеленая галочка около ответа для 90% юзеров, которые так не заморачиваются, будет означать что ответ проверен и он правильный :)
Можно рядом с измененным и не сохранненным показыть *, а после соханения удалять :)

3
б) ответ не доставлен на сервер вы видите ошибку - ответ не сохранен.

Когда видим-то? Вот я ввёл ответ. Я хочу знать, сохранился ли он, чтоб поехать на следующий КП и про этот уже забыть. Если не появится ошибки через 2 секунды после окончания ввода - значит, ответ сохранён и сервер именно этот ответ точно не потеряет?)) Или сколько мне ждать? (а таймер обратного отсчёта будет, чтоб случайно за полсекунды до не убрать телефон?) А если вводили с двух устройств с перерывом в минуту?)

ну тут как обычный запрос на севрер. ждем пока выполнится + таймаут есть.
если в течении таймаута получили ответ все ок - то все ок.
если нет (например проблемы с сетью) - то ошибка.
т.е. фактически это нажатие save и ожидание ответа - либо ок либо нет.
Для данного случая таймаут в минуту в принципе должно быть достаточно.
Предлагаемый вами пинг тут не поможет, т.к. при нестабильной сети пинг может пройти, а когда пошлем запрос сигнал сети ухудшится и запрос не уйдет.
А в случае, если запрос не уходит, то как правило таймаут ожидается секунд 10-20. плюс опять же часто пробуют повторить запрос в этом случае.
Т.е. если есть проблема, то ждать секунд 30, а то и 60 это норм.
Можно в это время крутилку оказывать.

Если ввели с двух устройств - то см другое описание:
- первы дошедший ответ сохранен
- второй ответ не сохраняется елси интервал менее (например, минуты) и пользователю показано сообщение (при этом собщение может возникнуть и через час, когда появится сеть)
- второй ответ не сохраняется если интервал более минуты - то смотри опцию про измнение ответа. по умолчанию сохраняем. Но можно отключить возможность и тогда опять же будет предупреждение.

4
Опять же для вас (если вы не хотите доверять системе) вы просто нажмете не синхронизировать и будете пробовать либо с другого устройства, либо потом.
Другие люди, которые вводят все с одонго устройства - доверятся синхронизации (как сейчас) и не будут мучиться.
Если у них вдруг сядет телефон, так и не получив доступ - то тут как бы без вариантов, на новом надо будет ввести текст.

Если вы хотите около ответа видеть статус "сохранен" ли он - это тоже можно сделать, хорошая идея (чтобы через час можно было понять сохранен ли ответ).
Но это опять же никак не связано с кнопкой "залочить" ввод ответа.

5
Malamut
Если ответ НЕ сохранен, то ошибка будет показана 
б) ответ не доставлен на сервер вы видите ошибку - ответ не сохранен.

А далее вы сами решаете - отменить ввод (и пробовать еще раз или на другом устройстве) или же пробовать еще раз (когда появится сеть)
Если пробовать - тогда фактически переходите в текущий режим автоматической синхронизации.
Но при этом, если разница между двумя ответами менее минуты, то автоматичсеки сохранен будет только первый. второй потребует подтверждения.
Собствено это ваши кейсы 1 и 2.

6
Ирина Федорова так а чего легенду-то в каждый мобильник? :)
Бумажная же одна на команду.:))

А если серьезно, а что произойдет в момент когда первый и единственный телефон, в который вбиваем ответы, сдохнет?


Тут можно сделать добавить кнопку "включть режим редактирования". и только одна сессия может редактировать. если телефон сдох - то на втором просто включаешь этот режим (первая сессия автоматически запрещает редактирование)

7
Батарейка села до тех пор, пока не появился интернет. Ответ вы потеряли. Продолжать?) Кнопка не решает кейсы. Кнопка записывает ответ. Кейсы нужно решать вам, но все вы их всё равно не в состоянии решить, потому что это невозможно.
Если вы выбрали "синхронизировать" и у вас села батарейка до появления сети то тут ничего не поможет.

Ответьте на крайне простой вопрос: как мне в вашей системе сохранить конкретный ответ на конкретный КП на сервер? То есть какой мой порядок действий у КП, чтобы точно знать что именно этот ответ сохранён и больше не будет изменён без моего явного желания?

Вы даже тут два разных и нехависимых кейса объединяете в один.

1. "чтобы точно знать что именно этот ответ сохранён ".  при вводе и отправке ответа вы видите ОК или не ОК.
Если не ОК, то два варианта:
а) ответ доставлен на севрер, но не приянят по причине того, что ответ отличается от сохраненного и введенного 10-30-60 секундами ранее.
Вы видите предупреждение и решате сохранить или нет
б) ответ не доставлен на сервер вы видите ошибку - ответ не сохранен.
Далее вы решаете что делать - пытаться отправлять дальше (пока не появится сеть) или же отменить.

2. "больше не будет изменён без моего явного желания" если ответ был изменен (именно изменен/введен, а не доставлен) через час после сохранения текущего, то это абсолютно другая задача.
Тут возможны два варианта:
- перезаписать всегда. т.е. считать, что любые изменеия, которые были сильно позже текущего ответа это дейтсивтельно обдуманные изменения, которые нужно принимать
- спросить пользователя типа "Ваш ответ отличается от введенного ранее. Перезаписать?".

При этом эти два варианта я бы делал не замочком у каждого КП а одной глобальной опцией на команду.

8
Ирина Федорова
Вот я тоже полностью согласен. Смотреть задания - ОК. Тут же можно и ответы в ридонли смотреть.
Никто же не заполняет маршрутник бумажный паралельно.

9
Более того: чтобы отловить ошибки сети, надо перед запросом на сохранение слать пинг. В этом случае вы почти никогда не получите собственно ситуацию, что вам не пришёл ответ от сервера на запрос сохранения.
Если  сеть нестабильная пинг может пройти а через 5 секунд запрос уже нет.
Суть в том что вы хотите в частности знать сохранился ли ваш ответ. Если нет - увидеть ошибку и решить что делать.
Так вот я хотел сказать, что если вы увидите ошибку это не значит, что ответ НЕ сохранился.
Ответ может сохраниться, но для клиента это будет выгляеть как будто нет.

10
У кармана пользователя, видимо. У вас же всё асинхронное сейчас. Никакие вопросы по сути нереализуемы адекватным способом.
Да у кого угодно.
Один ответ (первый, который дойдет когда угодно, хоть через час) будет сохранен.
Второй ответ потребует подтверждения.
Если вы проверили что первый ответ сохранен и правильный, но вы можете просто игнорировать это подтверждение, не открывать телефон. Проблем нет.
Это ровно тоже самое что с кнопкой в варианте 2:
Через 2 часа второй телефон очнулся. Отправил запрос. Серевер увидет, что поле заблокировано. И кидает ошибку. Пользователь может эту ошибку увидеть, может игнорить. Если уидит, и считает, что его ответ был верный - пойдет разблочит.
В моем случае - просто подтвердит свой ответ.
Если он не будет открывать телефон - значит первый ответ и останется, как вы и писали.

Еще раз - можете привести кейс, когда ваша кнопка помогает решить хоть какой-то кейс, а мой вариант нет (не считая изменнеия через час)?

11
И кстати еще один важный момент который вы мне кажется не понимаете.
Запрос это понятие двустороннее. (есть запрос, есть ответ, есть реквест таймаут, есть респонс таймаут)
Т.е. запрос может уйти на сервер и начать обрабатываться.
Но при этом соединение с клиентом может потеряться (тупо связь пропадет окончательно).
В этом случае для клиента это будет выглядеть как ошиька сети.
Но на  самом деле ответ нормально дошел до сервера и даже сохранился.
В этом случае вся ваша теория с ошибками, блоками, повторными вводами после ошиок тоже рушится

12
Откройте для себя блокировки) Безусловно всё можно лочить, да. Какая вам разница, в каком порядке приходят запросы, если вы в любом случае не сможете случайно сохранить неправильный ответ? (посылая два ответа - правильный и неправильный, одновременно). Плюс эта ситуация дикая. Накой ляд одновременно пытаться сохранить одно и то же, стоя рядом?

Ваш пример 1 или 2. Интернет плохой. Но н есть. Вы решили 2 раза вбить ответы. Один раз неверный.
Неправильный пришел ранее, значит сохранился и поле (в вашем случае) заблочилось.

Кому? Телефон в кармане.

Вы сами пишите, что будете проверять через час (т.к. неуверены дошло ли вообще что-то до сервера и что именно).
Если вы проверили как в случае 2 все ок и забыли, то когда второй синхронизируется ответ НЕ сохранится (как вы и хотите).
Но будет предупреждение клиенту что раш ответ отличается от введенного 10 секундами ранее.
Если второй пользователь ничего не сделает - то и проблем не будет.
Если он откроет и увидит - он сможет принять решение что делать, например, просто отменить свои изменения.

Опять же никакой кнопки лок для этого не нужно.

Приведите пример где ваша кнопка лока поможет, а мой алгоритм нет (не считая отличия, что можно ответ через час после сохранения явно поменять специально/случайно, как я писал это совсем другая задача)

13
И еще раз - я хочу донести, что кнопка с синхронизацией (и текущими проблемами) не связаны вообще никак!
Простейшее доказательство:
Счтайте кнопку добавили.
И вы (а также все участники вашей команды) просто жмут эту кнопку всегда (после ввода ответа).
И вы получаете все те же проблемы синхронизации.
Кнопка может помочь ТОЛЬКО если один запрос обработан, второй клиент получит обновление. Но как же он получит обновление если нет интенета?
А если и есть.
Получит.
Ок, вы предлагаете заблочить поле и не давать возможность вводить.
Я предлагаю не блочить. Вместо этого если между ответами прошло 10-20-30-60 секунд то спросить у пользователя подтверждения мол "ваш ответ отличатся от введенного 20 секунд назад. Сохранить?".
При этом если в вашем случае поле заблочилось (т.е. синхронизация клиента произошла), то в моем случае клиент также синхронизируется и получит текущий ответ и время его ввода.

14
См. вариант II. Он абсолютно корректен - явный запрос данных с сервера (обновление страницы) всегда должен возвращать текущие данные и после этого они, конечно же, не могут неявно измениться. А вы именно это предлагаете. З

Мн кажется, вы очень невнимательно читаете, что я предлагаю.
1. Если сети нет после 2-3 попыток, то дать возможность увидеть ошибку сети и указать что делать: синхронизировать ли ответ позже или нет.
Если выбрано синхронизировать, то см. пункт 2
2. Если между двумя введенными ответами (время конечно же ввода клиентского) время меньше 10-20-30-60 секунд, то НЕ сохранять ответ и показать окно предупреждения и подтвержения (в приложении это было бы сделать очень легко, в браузере думаю, тоже).
При этом абсолютно если ответ пришел через час (см. пункт 1) то действовать точно так же.

Видимо, вы всёй таки не знаете, что такое синхронные запросы. Печально)
Синхронным может быть только один запрос одного клиента.
Если клиента два то запросы будут в любом случае паралельными.
И никто не гарантирует когда и в каком порядке они придут.
Безусловно на сервере можно все залочить пока обрабатывается один запрос (аля сделать сервер синхронным), но это все равно не гарантирует порядок прихода запросов.

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

Ответ введенные позже онозначно должен считаться главным.
Т.е. если вы через час после сохранения ввели что-то новое то вы хотели это ввести и это однозначно надо сохранить.
Если вы поменяли по приколу или случайно - сами себе злобные буратины.

Проблема с синхронзацией двух ответов примерно в один момент - тут да, потециальная проблема может быть.
Но она будет даже в случае с замочком и явным сохранением.
Т.е. если два пользователя ввели ответ примерно в одно время - то вы хотите увидеть что-то и принять.
Если рассмотреть этот кейс то можно показать варнинг, если разница между введенными ответами скажем 10-20 секунд, то выдать предупреждение для потдверждения.
Это решит кейс с неточной синхронизацией времени.
 
Если у вас нет интрернета, то в этом случае можно так же автоматически попробовать 2-3 раза.
Если нет спросить - то показать ошибку и спросить у пользователя нужно ли сохранить ответ локально для синхронизиции дальнейшенй, когда появится интернет. При этом по умолчанию все должно синхронизироваться без ненужных диалогов, а эту доп опцию вы лично сможете отключить.

Если выбрано синхронизировать, и интернет появился через час - то действуют все те же правила, как будто интренет был и ответ отправлен сразу.
Т.е. если разница между ответами 10-20-30 секунд, то сообщить об этом пользователю (а может и всем). В приложениях (не браузере) можно было бы сообщение выкидывать что синхронизация прошла. Как в мобильном браузере это делать я точно не знаю, но думаю тоже можно.

Т.е. при сохранении на КП вы узнаете что либо все ок, либо не ок и тогда решите что делать.

Вот это UX. и вполне как видите можно обойтись без всяких ненужных доп кнопок, которых в настоящее время становится все меньше и меньше.
 

16
Ок, те если интернета нет то вы получите ошибку.
Если интернет есть?
Вы отправили два запроса с разных устройств.
Никто в мире не сможет гарантировать какой из них придет первый.
Как быть?
Те в вашем случае скажем второй ответ (неверный) может дойти раньше. И заблокирует ввод.

17
Malamut
Замечательно рассписываете
Но вы так и не ответили на мой вопрос:
Что делать если в ваших случаях, пользователи оба нажали сейв и замочек.
В этом случае вы получаете все тебе проблемы.
Ели интернета нет то выходит кто первый появится тот с сохранит.
А если интернет есть то чей первый запрос придет на сервер тот и сохранится.
Поэтому вашим замочком проблемы в сложном кейсе не решить. А вот усугубить легко. А в простом кейсе проблем нет вообще

18
вы проверяли, как работает гугль док без интернета при конфликтах правок?)

Нет, не проверял. Но подтверждаю, проблемы есть.
НО!
Если редактируются одно поле в одном, второе в другом - то проблем нет никаких!!!
Т.е. если вы редактировали ячейку A, а другой юзер - ячейку Б, то после синхронизации (появления интеренета) изменнеия не пересутся и проблем не будет никаких!

Если вы добавите кнопку подверждения ответа (сохранения) то:
Если нет сети - что дальше: просто сказать "не могу сохранить", отменить изменения и не пытаться отправить изменения потом?
Или все же пытаться синхронизировать позже (когда появится интренет)?

Если первое - то будут все теже вопросы и проблемы - что делать если поле кто-то другой изменил, пока не было сети.
Если второе - то вы обидете 70-80% юзеров, которые и думают менять друг за другом ответы, либо даже вообще пользуются одним устройством для ввода ответов.

Поэтому синхронизацию оставить необходимо!!!
Просто насколько я понимаю, сейчас она синхронизирует все данные и возможно в процессе ввода (остюда сохранение части ответа).
Если это исправить, а именно:
А) Сохранять только после нажатия enter или потери фокуса
Б) Сохранять только если значение изменилось
То проблем поидее не должно быть ни у кого.

19
Malamut
Да что ж вы других то не слышите.
https://docs.google.com/spreadsheets/d/1td-ssyxuZXZqo24Ltkpi5ChShX389uEMlXEcZbavVYk/edit?usp=sharing
Вот сылка на гугд док.
Вбейте текст и нажмите ентер - все сохраниться. и не нато жать никаких ctrs+s доп кнопок и т.п.
не надо показывать что сохранено что нет
не надо показывать какая версия сохранена и т.д.
Ровно 1 к 1 как на сайте БГ.
Единственное отличие может заключаться в том, что возможно на сайте БГ ответ сохранится даже в процессе редактирования (т.е. побуквенно).
Это как я написал выше не считаю корректным, и лучше было бы делать как у гугле - сохранять (автоматически, без кнопок и т.д.) по окончанию ввода т.е. на нажатию Enter или потере фокуса (перехода в дугую ячейку).
Т.е. крубо говоря у поля есть два варианта: режим просмотра и режим редактирования. как долько фокус получен - меняем режим на редактирование.
и все!
Не надо никаких сложных доп кнопок которые 50% команд будут просто забывать нажимать.     

20
Друзья, правильно ли я понимаю, что проблема с не сохранением ответа (полностью или частично) строго связана с качеством инета?

Кажется, на симуляции плохого соединения удалось воспроизвести таки.

В нашем случае не могу сказать, т.к. не мониторил. Просто вводил, переводил фокус и часто вообще просто отключал телефон (экран).
Но с учетом того, что на играх из дома такого вроде как не наблюдалось, впоне возможно.

21
> Да, случаются. Мы играли с одного зарегистрированного устройства (Huawei Nova 3, Android 9.1, Yandex.browser), не менее двух раз ловили этот эффект.

Наконец-то ценный фидбек, спасибо! :)

мы форму открывали на двух устройствах (даже с одного логина), но при этом пользовались только одним, второй был в фоне. Возможно он конечно тоже обновлялся, но есть сомнения.
Были ли проблемы утверждать не могу, но кажется, что были.

22
Пока что у нас даже нет однозначного ответа на вопрос, случается ли порча при игре с нескольких устройств, или даже когда играют с одного, такое может случиться. Предлагать решения куда проще, чем анализировать причины багов.
Собственно именно поэтому я и писал про некое логирование истории (В том числе инфомации о юзере, который вызывает апддейт) :) хотя бы просто в файл

23
> только на ентер/потерю фокуса

Так можно, да. Но прежде, чем утверждать, что это решило бы 99% проблем, надо научиться эти проблемы воспроизводить :) А то строить на умозрительных допущениях изменения логики как-то странно.


Наблюдается много советов "как сделать так, чтоб ответы не портились". Желания участвовать в тестировании для воспроизведения точных условий, при которых ответы портятся, почему-то не наблюдается :)

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

Я готов потсестить, поискать проблемы.
Можно ли сделать какую-нибудь тестовую игру-страницу с 2-3 КП чтобы можно было с этим поиграться?

24
unxed
Как программист программисту: а почему бы просто не сделать сохраните только на ентер/потерю фокуса для изменённого поля? Мне кажется это бы решило бы 99% проблем (не считая потери связи и других ошибок которые конечно надо решать с помощью проверки времени на сервере). Ну либо оставить при синхронизации но опять же сохранять только данные которые юзер явно менял.

25
Malamut я прошу прощения, но у вас абсолютно те же допущения с вашей кнопкой.

Два юзера вводят текст пока кнопка не нажата. Какой из них будет сохранен?
Пользователь а ввел текст АБС и нажал заблокировать. Пользователь б ввел текс ХХХ чуть позже, но запрос до сервера дошел чуть раньше (т.е. поле ещё не заблокировано). Вопрос что должно быть?

Поэтому у вас ровно такие же проблемы с кнопкой как во всех других решениях.

Если вы говорите что у вас проблема в том чтобы сохранить то что ввел пользователь (явно как бы) я и предложит сохранять по ентеру или потере фокуса только (плюс изменения)
Это тоже тест практис.
Если вы ничего не делали с полем оно и не будет сохраняться. И вы легко получите 200% гарантии то что ввели то и сохранено.
Если же два юзера и разница между изменениями небольшая то в любом решении (и вашем и моем) будут допущения.

Страницы: [1] 2 3 ... 77