Как стать автором
Обновить

Комментарии 49

Все правильно. На момент открытия страницы флаг был в правильном состоянии. Если хочешь точное сходство, то это уже AJAX :-)
Поясните как? Точнее вопрос как на второй странице поддержать актуальное состояние, кроме как через каждые Н секунд опрашивать сервер на показатель этого флага?
После второго клика пользователь должен получить сообщение, что состояние флага - уже не то, что было показано на странице, ну и, соответственно, какие в связи с этим будут приказания, о повелитель.
В том то и дело, что обновление идет ajax и там просто дёргается УРЛ, который меняет на противоположный значение флага. И как бы нету возможности понять из чего я сейчас меняю.
Когда дёргается урл, то и старое значение (со страницы) должно передаваться. Если оно не совпадает с тем, которое на сервере, то см. выше.

А вообще я как пользователь писал. Через какую новомодную жотехнологию это реализовано, пользователя не должно волновать.
Это понятно, что не должно волновать. Но вот пока старое значение (или наоборот новое) не передается, да и не хочется его передавать ибо это почти лишняя инфа и увеличивает объем кода.
Плюс один поставить не могу (моя репутация ниже плинтуса... шуточки :), но это верный вариант решения. Это к теме о контроле версий объектов (у Фалера грамотно расписан подход).
хм.. А в чем сложность не "менять значение на противоположное", а просто значение присваивать "по факту"?
ну, грубо говоря: галку поставил - 1, снял - 0.
Интересное решение с чекбоксом, но сейчас стоит решение со ссылкой и не хотелось бы вводить дополнительные поля показывающие текущее состояние. То есть скажем просто ссылка, которая "дёргает" ajax'ом УРЛ и который заменяет в базе значение. И если ответ приходит положительный то показывает у ссылки другой текст.
Ну если немного углубиться в клиент-серверную технологию в основе http то можно увидеть, что никакой потенциальной неточности на самом деле не произойдёт. Второй клик будет просто проигнорирован, поскольку первый уже переключил флаг. С другой стороны поддерживать адекватное состояние флагов на всех копиях страниц слишком дорого и потому эти состояния обновляются лишь при любом ручном запросе (включая ajax при отправке комментария).

На мой взгляд это положение вещей максимально разумно в сложившейся ситуации.
В том то и дело - не будет проигнорирован, а сменит на противоположный. То есть в чём загвозда - дёргается всегда один и тот же УРЛ без всяких дополнительный параметров.
1. Вы уверены, что запрос идёт не через POST?
2. Всё, что нужно хранится в базе. Если в базе помечено, что голосование уже выполнено, то повтороное голосование не будет принято. Если вы про голосование по карме, то оно нарочно сделано с возможностью исправления голосования и это не по ошибке.
я не про хабр. я про виртуальный проект.
Ну зачем же так ставить задачи?
Разумеется нужно слать голос вместе со значением, тогда никакие параллельные окна не смогут нарушить логику программы.
уже несколько раз писал в этих комментах, что "лишние" данные не хочется пересылать. Да и вообще если можно обойтись без какой-то данной лучше без её обойтись...
В данной ситуации эти данные совершенно не лишние, кроме того запрос ведь может не выглядеть длиннее. Вам ведь ничто не мешает делать это так:
httр://site.ru/0 — "против" (сокращается до href="/0")
httр://site.ru/1 — "за" (сокращается до href="/1")

Куда уж меньше пересылаемых данных? =)
кароче только httр://site.ru/ для обоих случаев и проще не надо никакие ифы писать = упрощение кода.
"вам шашечеки или ехать?" (с)
Для надёжного определения фазы (1/0) вам нужно либо пересылать его (как я предложил), либо на стороне сервера отслеживать время выдачи всех параллельных страниц (не знаю ситуации когда такое серверное решение дешевле пересылки значения).

Думаю спор о методах можно закрывать — не зная конечной задачи нельзя понять что реально выгоднее, а ваше поведение уже вписывается в игру "ПВНДН" (по терминологии Эрика Бёрна). Я в такие игры не играю.
мне понять очень страшно иметь такую как бы ошибку на сайте или нет. А если бы вы были немножко внимательнее и прочитали бы чуть ниже комменты то узнали бы для чего это всё нужно.

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

Игра "Почему бывам не... да, но..." характерна как способ убить время оппонентов, а не добиться результата. Если реально вы хотели лишь побадаться, а не решить вопрос (как мне показалось), то вы играли в эту игру. Подробнее можно прочесть в книге Эрика Бёрна "Игры, в которые играют люди"
НЛО прилетело и опубликовало эту надпись здесь
ЭЭЭ... флаг сам по себе не критичный, что-то вроде "отображать меня в списке активный пользователей сайта", да и переключаться не часто будет.
НЛО прилетело и опубликовало эту надпись здесь
Ну я так тоже подумал... Просто хотел спросить у людей.
Есть такие штуки - ActiveMQ и Cometd.
Организуют псевдо- сервер->клиент соединение и передачу сообщений.
То есть событие инициируется с сервера. Так работает gmail и google reader.
Ради такой мелочи на такие вещи размениваться... не стоит...
Если только ради нее - конечно не стоит.
Если уже используется - cool.
Выглядит не как "потенциальная неточность на сайте", а как неверная постановка/реализация задачи.
постановка была - дать пользователю на каждой странице возможность изменить этот флаг.
Хорошо, "дать пользователю возможность сменить флаг". Но конкретной схемы реализации данной задачи не стоит.
Так почему бы не лезть в дебри, и сделать по одному из предложенных здесь вариантов.
В каком контексте используется эта задача? Изложите суть более подробно, думаю, люди скажут, как более грамотно реализовать.
ну я даже описал как сделан. А вопрос был - страшно это или нет.
Описание понятно, но для чего флаг-то?
Почему бы не сделать 2 состояния: вкл/выкл?
У флага именно два состояния. Это и описано!
имеется ввиде отображение как у выключателя: вкл/выкл.
Так и отображается, проблема в открытии двух одинаковых страниц и переключении на одной из них выключателя в другое состояние.
На мой взгляд, при клике надо посылать еще и показанное состояние.
Получится, Состояние 1, следовательно вы с запросом передаете 1, а в базе сохранилось тоже 1 - вот и причина вывести предупреждение о нестандартной ситуации.
Думаю, это снимет 50% проблемы, когда пользователь меняет уже измененное. Остается только постоянно на новую менять. Странное решение, но можно эту цифру писать ф ifame, которая открывает скрипт, генерирующий состояние с переодическим refresh-ом. Так при обновлении заодно и не придется всю страницу перегружать.
это решение дорогое и громоздкое. Оно актуализирует изменение состояний, но ajax сам по себе (а вы предложили именно его iframe реализацию) создаёт увеличенную нагрузку на сервер.
На мой взгляд, это немного надуманная проблема. Такова архитектура и пытаться изменить основные принципы функционирования какими-то обходными путями без очень веской на то причины абсолютно незачем.

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

В конкретном примере кликнув по переключателю во втором окне пользователь просто не увидит изменения состояния, кликнет ещё раз и получит желаемое. Если очень хочется, после первого переключения (клика) можно выдавать сообщение, что статус не изменился.
Спасибо за совет не просто менять значение, но и выдавать сообщение об смене!!! То что надо!
На Хабрахабре я сам замечал такую проблему - данные об голосовании и количество оставшихся голосов всегда устаревшие, нужно обновлять страницу для того, чтобы узнать, что всё кончилось.
Вот оказывается - не плохую проблему поднял.
Да не проблема это для Хабра.
Когда пользователей действительно много все эти актуализации состояния голосований влетают в копеечку за счёт лавинообразного увеличения числа запросов. Каждый web2.0 сталкивается с этой дилеммой — больше интерактива или дешевле обслуживание.
я не для хабра поднял, а для обсуждения
Поясните пожалуйста — зачем выносить тривиальную программистскую задачу (да ещё и с оторванными от реальности условиями) на обсуждения НЕтехнического комьюнити? Какой интерес вы расчитывали получить у этих людей?

На конкретный вопрос "допустима ли такая неточность обработки событий?" я вам уже писал своё мнение — не допустима, особенно учитывая дешевизну её избежания.

Уверен по собственному опыту, что ни у кого из практиков такая задача не стоит более трёх минут и не решается более, чем за 10 (и за день таких решается несколько десятков), а вы раздули из мухи слона и сочли, что затронули чуть ли не главный вопрос вселенной. =)

Ей богу — если программисты будут столько времени обсасывать мелочи, то нормальные веб-приложения мир получит не скоро.
Для себя я её решил в первые 5 секунд и даже не 5ть минут. Тем более с такой дешевизной решения. Просто хотелось услышать мнение других людей так сказать для будущего... А то что вы раздули из того что я спросил слона - так это только ваша проблема.
Демонстрирую неадекватность вашей реакции

1. Пост датируется ночью 10го апреля, а ваша фраза "Спасибо за совет не просто менять значение, но и выдавать сообщение об смене!!! То что надо!" — 12го. Итак про какие 5 секунд вы тут говорите?

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

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

Жаль, что вам не видно, как ваши слова расходятся с вашими поступками.

PS. Извините, что задел вас, больше я в этой теме участвовать не буду. Всё, что хотел я сказал, а нужно оно вам или нет — решайте сами.
1 - я просил совет на будущее мне. То что мне надо я сделал за 5 секунд, а совет получил через 2 дня.

2 - Я не знаю чем лично вас задел... Но видать вам нравится быть судьей и судить, что хорошо, а что плохо... Но это личное ваше право.

Мои поступки со словами никогда не расходились.

P.S. Замечательно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории