Comments 329
А вот если пользователи сообщают, что программа у них глючит, а особенно включают это в бизнес-требования, то тут же время находится.
Это всего лишь исполнители, реализующие требования
В этом и винят. В этом же и винят тех, кто блокировщики телеграма пишет. Не забываем, что самое полное и качественное ТЗ — это исходный код, поэтому при ТЗ любого качества программист все равно принимает решения. И он может как задумываться о том, как потом пользоваться результами его труда, либо забить.
В итоге написание ТЗ по мнению программиста должно занимать на порядок больше времени, чем реализация
Для хорошего ТЗ на сложную задачу так и есть.
Он даже блин не предполагает, что в оповещении о событии надо проставить время события?
В ТЗ написано, что надо проставить. Наверное же человек, который писал ТЗ, подумал?
Любой адекватный человек предполагает, что в оповещении о событии есть дата и время этого события.
Нет. Это вы так предполагаете, и думаете, что ваше предположение верно для всех вокруг. А в задаче в посте даже не сказано про оповещения о событии, там сказано "уведомления о посадке". И знаете, что? Когда я сижу в аэропорту, уведомления о посадке на борт таки звучит в виде "началась посадка на борт, пройдите к гейту", а не "во столько-то началась посадка на борт".
Вы мне пытаетесь доказать, что такое поведение — норма.
Нет, я пытаюсь доказать, что выполнение задачи строго по ТЗ не означает, что человек не блещет умом. В описанной ситуации вообще никто не знает, какие диалоги были между исполнителем и заказчиком.
Вон у меня в соседнем окне открыт график доставки покупки с Амазона. Эта покупка уже пересекла три часовых пояса, а я на нее смотрю из четвертого. Так вот, там в заголоке написано "arriving tomorrow at 8 PM". И пока вы не нажмете see all updates, и не прочитаете там мелкий шрифт в самом конце страницы, вы так и не узнаете, что это местное время (причем все уведомления указаны в местном времени, угадывайте сами, какой это часовой пояс).
Наверное потому, что вы сидите в аэропорту?
Не "я сижу в аэропорту", а "предполагается, что я сижу в аэропорту".
А теперь сравните с оповещениями на вокзале, что больше подходит под ситуацию с автобусом.
Это вы считаете, что больше похоже. А я не считаю. И да, вы хотите сказать, что приведенные вами выше пункты не применимы к вокзалу? Да нет, они точно такие же.
Я считаю, что при общении двух адекватных людей можно не писать ТЗ «для идиотов».
Опыт показывает, что у двух адекватных людей понимание одной и той же задачи может отличаться практически полностью. Поэтому если мы хотим, чтобы было сделано конкретное, а не то, что кажется правильным одному из двух адекватных людей, надо описывать конкретное.
типичному программисту НАДО объяснить как делать оповещения о событии.
Нет, ему надо объяснить, какие конкретно оповещения нужны в конкретном случае.
Примеров из реальной жизни ему не достаточно
Я вам привел пример из реальной жизни, который совпадает с посланным сообщением.
Сделать как в других сферах и провести аналогии типичный программист не способен.
Способен. Но снова, почему вы думаете, что ваши и его аналогии совпадают?
Вы в каком часовом поясе будете посылку принимать?
Я вообще не буду ее принимать, ее принимает отель.
Я еще раз пишу — на сайте и билетах на транспорт всегда указывается отправление по местному времени. Единственный недостаток — можно было бы указать часовой пояс.
Вы противоречите сам себе. Если всегда указывается отправление по местному времени, то указывать часовой пояс не надо, потому что это лишняя информация.
А вот оповещение за час — садитесь в автобус. Это муть.
Это, несомненно, муть. Вопрос в том, что должно было быть — и вы, в отличие от постановщика задачи, не знаете правильного ответа на этот вопрос.
Вы про голосовое оповещение диктором?
Именно про него.
Вы реально сравниваете полет на самолете и поездку на автобусе или поезде? Ничего, что это два абсолютно разных сценария?
Для целей оповещения — одинаковые.
Как минимум тем, что на вокзал можно прийти за 3 минуты до отправления и сесть в поезд за минуту до отправки,
Ну вот попробуйте это провернуть с крупным скоростным поездом типа Ave, и узнаете, что нет, нельзя.
Вы сейчас серьезно? Вы на поезде ездили хоть раз?
Да, я совершенно серьезно. Да, ездил.
Если вы считаете, что полет на самолете = поездке на поезде
Нет, я считаю, что в рамках перечисленных пунктов отличия несущественны.
приезжайте в аэропорт за 15 минут до вылета и улетайте.
В аэропорте типа Соньдаля это прекрасно сработает.
Как раз опыт показывает, что 90+% программистов не хотят думать головой.
90% людей не хотят думать головой.
И особенно они не хотят читать правила работы компании, что бы по этим самым правилам продумать оповещения.
Какие такие правила работы компании?
Они искренне считают, что поездка на автобусе это тоже самое, что полет на самолете и пытаются свой опыт полетов на самолете переложить на совершенно другой транспорт.
Ну так вы комментом раньше предлагали "cделать как в других сферах и провести аналогии". Теперь, когда сделали именно так, это вам тоже не нравится.
Ну то есть надо:
1) Написать ТЗ на оповещения
2) Написать тексты оповещений в соответствии с правилами компании
3) Написать время оповещений
4) Передать все программисту, что бы он собственно сделал тупо шаблоны — я правильно понял?
Да, вы все правильно поняли. Еще вы забыли тестирование, архитектуру и несколько других маленьких вещей. За пункты 1 и 3 отвечает аналитик, за пункт 2 — технический писатель. За тестирование — QA. Удивительно, правда?
Да, кстати, а полную грамотность на всех языках, на которых работает компания, вы тоже от программиста ожидаете?
Может тогда из зарплаты программиста вычесть зарплату человека, который пишет ТЗ, тексты, время и тд?
Нет, почему же. Ровно наоборот. Просто представьте, что все люди на почасовке. Если все это должен делать программист — вы заплатите все деньги ему. Если работа делится на много людей — каждый получит деньги за потраченное им время.
И собственно проблема в том, что программист не хочет разбираться в правилах,
Да, не хочет, это нормально. Он хочет разбираться в языках программирования, архитектуре ПО, принципах разработки и еще сотне других вещей, в которых разбирается только он (а заказчик разбираться не хочет). Это называется "специализация". А разбираться в, скажем, требованиях PCI DSS — это отдельная работа на полный оклад.
Например, провести аналогию автобус=поезд через объединение «наземный транспорт».
Почему вы считаете, что именно эта аналогия — самая правильная? Такси — тоже наземный транспорт, скажем.
Какая разница? Вы отель предупреждать по Австралийскому времени будете?
Отель я вообще предупреждать не буду. А мне зато есть разница, потому что я хочу знать как давно ушла моя посылка.
Обычно, во всех адекватных компаниях, эту информацию указывают под сноской.
В СМС сносок не бывает.
Время отправления и прибытия указано московское
Только что было местное. Правда, круто?
Оповещение клиенту, что его автобус из Вены выезжает в час ночи по времени города Вена? Это сверх-сложно?
Сложно аргументированно доказать, что у постановщика задачи из поста была именно такая задача. То, что вы хотите решить такую задачу, я уже понял. Но какое отношение это имеет к исходной задаче?
А вот оповещение за час — садитесь в автобус. Это муть
Это, несомненно, муть.
Напоминалки в календаре — тоже муть?
Поздно написали, есть Бали где никто не знает русского, поэтому их пока отвезли туда, пока не выучат индонезийский и не сделают версию для индонезийцев к вашей задаче не приступят, и к остальным задачам тоже.
Используй UTC время для всего и вся, а конвертировать из UTC не проблема.
Вы забыли уточнить "UTC-время и смещение на момент события", правда же?
Ваш автобус отправляется в 1524884400. Счастливого пути.
Чем от этого легче пользователю, получаещему SMS 'ваш автобус отправляется в 01:00 УгадайСамКакогоВремени'?
Ошибка не в обработке времени в программном коде, а в пользовательском интерфейсе.
Сначала пользователю не сообщают, что 'времена отправления и прибытия указаны местные', затем в смс-ке напоминалке вместо времени вообще пишут 'welcome aboard', что создает легкую панику.
Нужно просто при формировании СМС указывать часовой пояс.
Очень часто агрегаторы, заказывающие билеты в разных городах получают от продавца билета только время отправления без конкретизации часового пояса. К тому же гипотетическая «Баба Маня» при появлении в билете GMT+5 будет обрывать телефон службы поддержки чтобы выяснить что это и к скольки же ей действительно нужно на автобусную станцию.
До августа сего года часы на вокзалах по всей стране показывали московское.
Просто. Укажите. Пояс. В СМС. Хоть как GMT / UTC +5, хоть «МСК», хоть «местного времени», как-нибудь.
Ну так а я как должен об этом узнать?) вот я турист из Исландии, заказал через онлайн-сервис билеты РЖД (в том числе) до августа этого года. И как я, исландский турист, должен понять, что вот это время, которое мне прислали – Московское, а не местное? Бабки об этом знают, потому что они русские, и так было десятилетиями. А я? И сколько таких РЖД по миру? Наверное, логичнее со всем этим безобразием разобраться один раз сервису, для которого это профессиональная обязанность, чем каждому клиенту на всякий случай перед каждой поездкой лазать по гуглам и выяснять особенности каждого конкретного поставщика услуг.
Насчёт того, что проблема на пустом месте – так вон же пост наверху, человек на этом обжёгся. Хорошо, что раньше приехал, а не опоздал. А если вы считаете, что всё равно сильно опоздать / долго ждать не получится, а все приезжают заранее, то напомню, что РЖД использовали московское время и во Владивостоке ;)
да и на клиенте получить из него поясное время это как 2 пальца по клавиатуре.
Клиент — прошитое приложение СМС на Нокии 3310. Оно тупее школьника :)
Вас минусуют вот за что: если клиент — обычный телефон (не смартфон), на котором нет ни магазина приложений, ни мобильного интернета, ни GPS, то такой клиент не сможет передать серверу свой часовой пояс, никак.
Но, на самом деле, клиенту и не нужно этого делать. Сервер должен выдавать время в смс по местному часовому поясу. Для автобуса из Москвы — по московскому, для автобуса из Киева — по Киевскому. Просто нужно не забыть на сайте (и, возможно, в смске) написать, что время указано по местному часовому поясу.
Вот реально где находится покупатель перевозчику, и тем более агрегатору без разницы. Перевозчик работает по своим правилам, агрегатор по своим. Каждый что-то умалчивает и возлагать на агрегатора обязанности ментального медиума глупо, бессмысленно. Агрегатор передаёт в точности то, что ему дал перевозчик. Остальное от лукавого.
Отправление в 18-00 по МСК.
брать мск или какой нибудь украинский часовой пояс по адресу места, откуда человек отправляется. Причем именно так грубо — по МСК, по киевскому времени, по времени хабаровска…
Все.
Именно так. А если не охота привязываться к какому-то городу — можно указать по GMT+00, только обязательно на этом обратить внимание. Тогда у юзера будет меньше головной боли.
Честно, тема выглядит как перфекционист опоздал на самолёт, а остальные, купившие такие же билеты, улетели вовремя, без проблем и возмущений.
Смещение как раз таки у каждого своё
Как раз поэтому и надо хранить время в UTC.
Но только времени в UTC недостаточно. Точнее его недостаточно для отдалённых дат в будущем. Вот для таких дат и надо хранить «смещение на момент события».
Ещё добавлю, что в некоторых БД можно вообще хранить время с временной зоной и работать будет нормально, насколько я знаю. Я имею ввиду, прям встроенный формат.
На каком-таком клиенте?
Вот стоит у вас задача: пользователь записывается на посещение некоего события, ему нужно перед событием послать уведомление (по емейлу, если что). Правило простое: если событие во второй половине дня, шлем уведомление в девять утра того же дня, если событие в первой половине дня, шлем уведомление в девять вечера предыдущего дня.
Или вот еще веселее: есть у вас запись в БД про момент Очень Важного события: "31.12.2017 23:50:05". В UTC, как вы просили, или даже в unix timestamp, пожалуйста. Внимание, вопрос: в каком году произошло Очень Важное событие?
Использовать UTC для времени в будущем — тоже так себе идея
Здравствуйте, в г. Кемерово часовой пояс UTC+7, а ваша система считает, что он — UTC+6, из-за чего возникает комичная ситуация в билете в виде 5-часового перелета Москва-Кемерово и 3-часового в другую сторону — Кемерово-Москва. Пожалуйста, обновите tzdata.
Добрый день.
Благодарим за обращение в Службу заботы о клиентах Kupibilet.ru.
Часовые пояса загружаются из международной системы бронирования.
На данный момент Кемерово стоит в часовом поясе UTC +6:
Возможно, изменением часового пояса произошло недавно, и данные еще не успели обновиться в системе бронирования.
В данном случае изменить часовой пояс вручную не будет корректно.
Мы учтем ваше сообщение и будем стараться решить эту проблему.
Всего доброго!
Часовой пояс UTC+7 в г. Кемерово используется с конца октября 2014 года.
Добрый день.
Возможно, и так, но данные в международной системе бронирования обновить с нашей стороны невозможно.
Мы уточняем, что можно сделать с этой проблемой.
Ответ Сбера: Пусть владелец карты явится с паспортом и картой в то отделение банка, где получал карту.
Здравствуйте. Я не клиент банка.
Сбербанк Онлайн недоступен с моего домашнего IP-адреса x.x.x.x. Нет никакого ответа при попытке захода на online.sberbank.ru (страница пытается загрузиться бесконечно), также с этого адреса не приходят ICMP Echo Reply (ответы ping).
Предполагаю, это из-за того, что на этом IP-адресе поднята Relay-нода сети Tor. Relay-ноды не позволяют другим пользователям сети Tor пользоваться моим IP-адресом для выхода в интернет (такое возможно только с Tor Exit Node).
Если вы хотели заблокировать возможность входа в Сбербанк Онлайн через Tor, то вы сделали это неправильно.
Уважаемый клиент, ваше обращение рассмотрено. Предложение передано в ответственное подразделение и будет реализовано в случае соблюдения экономической рентабельности.
Поэтому для «всего и вся» лучше использовать монотонное время, например TAI или GPS Time, а в UTC — пересчитывать только для вывода
Кроме того, конвертируя из UTC вы становитесь заложником аккуратности и своевременности обновления tz database.
См. пост чуть выше — про актуальность tzdata/
Знаете, я вот был таким Славиком, который получив такую задачу немедленно спросил "а что с часовыми поясами". И знаете, какой ответ я получил? Гробовое молчание и "ну делайте как-нибудь".
А толку-то от того, что она включилась? Ни ответа на вопрос, как надо, ни времени сделать правильно все равно не дадут.
Обратите внимание, что в вашем примере начальство одобрило. Почему вы думаете, что Славик будет знать, как надо, лучше начальства?
Если бы вместо даты и «Добро пожаловать на борт», Славик написал часовой пояс, время и «Автобус отправляется во столько-то», то времени он бы больше не потратил.
Здесь просто разница в том, поставил ли он себя на место клиента-получателя смс, или нет.
Обратите внимание, что в вашем примере начальство одобрило. Почему вы думаете, что Славик будет знать, как надо, лучше начальства?
Нипочему. Зависит от подхода. Начальству пофиг, Славик тоже не вник, никто не вник. А люди в итоге испытывают проблемы.
Эта СМС-ка — настоящая, от настоящего перевозчика. Кто там накосячил — Славик или его тимлид — не важно. Важно, что эта смс-ка вышла в продакшн именно такой. Из-за того, что на место клиента никто из всей цепочки себя не поставил.
Здесь просто разница в том, поставил ли он себя на место клиента-получателя смс, или нет.
Поставил. Его, как получателя, проблема часового пояса никогда не волновала, он всегда считал, что везде всегда указывается местное время. Так и сделал. Откуда ему взять часовой пояс, если в БД его нет?
Вам легко писать "времени он бы больше не потратил", но вы на самом деле не знаете, потратил бы он больше времени или нет. Иногда такие мелочи приводят к двухкратному увеличению сроков.
Из-за того, что на место клиента никто из всей цепочки себя не поставил.
Вы не знаете, из-за чего. Вам удобно считать, что люди не подумали о других, вместо того, чтобы предположить, что они подумали, просто им не хватило опыта и знаний (или и вовсе они сделали как лучше для одних людей, а для других вышло как хуже).
Поставил. Его, как получателя, проблема часового пояса никогда не волновала, он всегда считал, что везде всегда указывается местное время. Так и сделал. Откуда ему взять часовой пояс, если в БД его нет?
Вам легко писать «времени он бы больше не потратил», но вы на самом деле не знаете, потратил бы он больше времени или нет. Иногда такие мелочи приводят к двухкратному увеличению сроков.
Просто написать «Прибытие в 01:00 по местному времени». Всё, времени потратится ровно столько, сколько нужно на написание шести слов. Всегда можно найти оправдание, вместо того, чтобы сделать хорошо. Правда может не хватить опыта и знаний на несколько слов с заботой?
Просто написать «Прибытие в 01:00 по местному времени».
Это же очевидно. Зачем писать очевидные вещи?
Всё, времени потратится ровно столько, сколько нужно на написание шести слов.
Нет, времени потратится столько, сколько нужно, чтобы найти того человека, который знает, в каком времени хранятся рейсы в БД. А перед этим — столько, сколько нужно, чтобы понять, что время вообще бывает не-местное.
Знаете, я тут как-то делал маленький GPS-трекер и с удивлением выяснил, что никто из постановщиков задачи ничего не знает про системы координат. Им просто не приходило в голову, что это нужная информация, хотя они занимаются задачей полгода.
Правда может не хватить опыта и знаний на несколько слов с заботой?
Да.
Это же очевидно. Зачем писать очевидные вещи?
Можно не писать очевидные вещи, тогда нужно хотя бы не писать дезинформацию. «Добро пожаловать на борт» — не очевидный показатель прибытия автобуса?
Да.
Грустно.
«Добро пожаловать на борт» — не очевидный показатель прибытия автобуса?
Нет, форма вежливости.
У того, кто писал, и не вызывала.
Слушайте, у вас вообще там такая постановка задачи и такое количество допущений (например, в задаче не указано, когда должно отправляться сообщение), что вообще неизвестно, что реализовано правильно, а что — нет. И тут дело не в том, что не подумали о людях, а в том, что не умеют работать с требованиями. Я не удивлюсь, если в БД хранится местное время, но рассылка думает, что это время сервера, и рассылает по нему (это, кстати, прекрасно объясняет ситуацию "автобус в час, смс-ка в полночь" — разница во времени между Москвой и Вроцлавом ровно такая). И отсюда начинается такое змеиное гнездо вопросов "как правильно", что формулировка смс-ки будет там наименьшей проблемой.
Типичный результат "люди не умеют думать". Вот только вы его приписываете "не подумали о людях", а я считаю банальной некомпетентностью, которая думами о людях не лечится (и это тоже реальная история).
Это не очевидно. Прежде чем такое написать, надо проверить, что остальная система действительно выдаёт числа во времени автовокзала, а не времени места покупки билета, времени датацентра, времени места рождения водителя автобуса или даже внезапно по времени Гринвича…
Это не очевидно.
Кому и что не очевидно?
Прежде чем такое написать, надо проверить, что остальная система действительно выдаёт числа во времени автовокзала, а не времени места покупки билета, времени датацентра, времени места рождения водителя автобуса или даже внезапно по времени Гринвича…
Я ровно про это и написал.
Это же очевидно.
Каким образом из этой смс очевидно, что отправление в 1:00? Из билета — да. А в смс это не написано.
Каким образом из этой смс очевидно, что отправление в 1:00?
А должно быть? В исходной задаче про время отправления нет ни слова.
Вы написали — "Это же очевидно. Зачем писать очевидные вещи?".
Зачем вы пишете "это же очевидно", если на самом деле это не очевидно?
"Очевидно", что сообщения в СМС достаточно. В смысле, разработчику очевидно, что оно удовлетворяет поставленной задаче.
Но не очевидно, что в смс указано местное время. Пользователи тупее, чем мы о них думаем. Для них нужно писать и то, что кажется нам очевидным.
Но не очевидно, что в смс указано местное время.
Кому не очевидно? Во-первых, там вообще не указано время. А во-вторых, разработчику вполне очевидно, что если указано, то местное.
Пользователи тупее, чем мы о них думаем.
Главное, не забывать, что с точки зрения пользователей разработчики намного тупее, чем они думают, и постоянно пишут ненужную фигню.
Кто там накосячил — Славик или его тимлид — не важно.
Тогда пишите историю про маркетолога Петю, который решил, что в смс обязательно должно быть "Добро пожаловать на борт". И потом в послесловии напишите, что неважно, кто накосячил — маркетолог Петя, или студент Володя, важно, что смска вышла в продакшн именно такой.
И они не забыли подумать про экономию символов при отправки смс, чтобы счет был поменьше.
Ну да, именно поэтому нельзя было одновременно написать дату приезда и "Добро пожаловать на борт". И маркетолог проявил лидерские качества волевым решением отбросив лишнее.
Позиция автора мне понятна. Миру мир, дружба и жвачка.
Но давайте не будем полагаться на универсальных людей. Давайте сами научимся головой думать, и не ожидать от других, что они будут додумывать за вас, пока у вас тут более важные дела, чем у них. Пожалуйста.
У них клиенты именно из этого пояса. Правда ничего не мешает клиенту в поездке по России быть и то что из-за этого мобильное устройство покажет не совсем верные данные/не даст сделать операцию хотя должно — не учитывается.
считать, что у пользователя стоит правильный часовой пояс на мобильном устройстве и что от сервера время в нем же прилетает.
А есть какой-то другой вариант? Если у пользователя стоит неправильный часовой пояс — узнать правильный, в общем, нельзя.
Можно писать часовой пояс в сообщениях. Если пользователь в Мурманске, а у него в смске «Грузите апельсины бочками в 7:00 Asia/Yekaterinburg» (или «7:00 MSK-2»)
Пользователь, конечно, должен знать, в каком поясе время выводится, и в данном случае, с-но, неважно в каком поясе он по факту находится, т.к. время с указанным поясом фиксирует конкретный момент. Но проблема бывает еще и обратная — когда пользователь вводит данные. И если у него таймзона стоит не та, то возникнут проблемы.
Не то чтобы я очень сильно хотел в этом разобраться, правда, — на всех виденных мной мобильных устройствах за этот период я не видел «Europe/Samara» в списке доступных зон, а обновить на них (на андроиде) tzdatabase — поленился.
Так что, может, сам виноват. Но анекдот такой присутствует.
Если у пользователя стоит неправильный часовой пояс — узнать правильный, в общем, нельзя.Если в телефоне стоит "[+] брать часовой пояс у сотового оператора", то он может иметь никакое отношение к реальности.
Мне 2ГИС отказывался показывать транспорт, потому что думал, что тот уже сегодня не ходит.
Пример 1 — если текущее время в интервале от 10 до 19 то приложение должно показывать часть данных одним способом, иначе другим. Если пользователь в другом часовом поясе — используется его локальное время для определения способа. Ладно, эти данные все равно фактически справочные для тех кто НЕ в этом поясе потому что жесткая привязка к местности.
Пример 2 — есть данные, валидные до (или после) определенной временной метки (тут уже и дата и время важны). Если они уже/еще не валидны — это надо отражать в интерфейсе. При этом использование этого набора данных — возможно и имеет смысл из любого часового пояса. Пользователь в принципе может принять решение на базе не совсем правильных данных.
Да, если пользователю не понравится — жалоба в поддержку (скажем так) и пользователю возможно компенсируют потери из-за неправильных данных. Может быть. После подачи заявления в письменном виде.
А нам потом прилетит запрос оценить сколько будет стоить сделать учет поясов.
А насчет того что нельзя узнать правильный пояс (хотя тут это не особо важно, с учетом что мы вообще не учитываем его). С чего это вдруг? GPS приложению в одном из режимов нужен, можно его же и использовать для определения локации (либо попробовать по IP и если подозрение что по IP не родной пояс — запускать GPS/просить пользователя дать разрешение если он еще не дал).
Речь про подход из поста mail.ru habr.com/company/mailru/blog/242645 (варианты №4(для которого пояс вообще не нужен — его определять надо в этом случае) и №3(где координаты страхуют от проблем с тем что у пользователя — сменился пояс, причем возможно — не очевидным образом).
Ну да — нужна база для определения поясов по координатам, хоть какая то.
Ну вот я постоянно получаю такое молчание, поэтому делаю как считаю нужным. Люди вообще плохо понимают время, причем все — начиная с бизнес-аналистов и кончая финальными пользователями.
И история не выдуманная: был проект онлайн системы продажи билетов в кинотеатры, в которой люди с островов не могли купить билет за час до сеанса, потому что там внезапно на час меньше, чем на континенте. Еще эпичнее выглядел фикс: вместо введения таймзоны во всем коде понатыкали что-то вроде: if (Canarias) hour = hour — 1;
Ну вот я постоянно получаю такое молчание, поэтому делаю как считаю нужным.
Угу. Особенно это хорошо работает, когда "как считаю нужным" требует приблизительно в пять раз больше ресурсов, чем забюджетировано.
Люди вообще плохо понимают время, причем все — начиная с бизнес-аналистов и кончая финальными пользователями.
Дадада, люди плохо понимают время, но вот конкретно вы-то его понимаете хорошо, парвда же?
Еще эпичнее выглядел фикс: вместо введения таймзоны во всем коде понатыкали что-то вроде: if (Canarias) hour = hour — 1;
Возможно, придётся перетыкивать обратно. Испания думает отказаться от переходов на летнее/зимнее время и заодно вернуть Канары в тот же пояс, где остальная страна. Фраза «una hora menos en Canarias» может кануть в Лету.
Ну да, есть такое. И впринципе поддерживаю. Астрономически постоянный GMT+1 будет для Испании оптимальным. Другое дело, после такого перехода как всегда начнется всеобщий месячник хаоса. Кое-что сломается сразу (как с Канарскими), кое-что будет глючить втечение месяца (ОС апдейтнула tzdata, а БД еще в старой зоне), а что-то затаится, выжидая следующего перехода на летнее/зимнее время.
А где можно почитать про планы Испании? Я думал, что выгода от летнего времени все еще ощутима, даже там где и так солнечно и тепло.
Ну, в Испании, солнечно далеко не всегда и не везде, да и тепло тоже :)
Почитать можно ну, например, тут. GMT+2 в свое время ввел еще Франко, чтобы быть в одном часовом поясе с Германией времен Гитлера. В итоге дневная жизнь сильно сместилась: испанцы в отличие от европейцев поздно начинают работать, поздно обедают и поздно ужинают. Сейчас в правительстве обсуждают вернуться в зону GMT+1 без перевода на летнее время. Кстати, уже вроде бы доказано, что ущерб от перевода на летнее/зимнее время превышает выгоду.
Вы серъёзно думаете, что программисты просто переписывают из текста в код?
А зачем тогда программистам вообще думать?
pewpew не прав, использовав слово "Думать". Вместо нее лучше взять фразу "Нести ответственность". Потому что думать на самом деле должны все. На каждом этапе разработки: На анализе, на разработке, на тестировании. Если они видят какой-то упущенный ньюанс, то должны сообщать о нем вверх по цепочке. Вот только принятие решения о том, как именно реализовывать — лежит не на разработке и не на тестировании. Эта ответственность на постановщике задач.
Делать крайним разработчика в этом случае неправильно.
Вообще говоря, нормальная практика — уточнять постановку задач.
Другое дело, что требовать это в 100% случаях нельзя, т.к. читать мысли никто не умеет.
Суть в том, что думать о постановке задачи должен постановщик.
Нет. Постановщик не знает о технических деталях. Например, про смс-гейт в задаче тоже ничего не написано, но Славик нашел гейт протестировал на номерах телефонов из нескольких стран. То есть видно, что он не 60 тыс получает. Часовой пояс может быть очень объемной задачей, но как минимум обратить на это внимание Славик может.
Например, про смс-гейт в задаче тоже ничего не написано
Кстати, хорошее замечание. Выбор смс-гейта (да и вообще по факту любого стороннего сервиса) "просто программистом" без общего обсуждения вариантов командой и одобрения на уровне менеджмента — это вообще странная штука, уж гораздо более странная, чем то, что за формулировку сообщения не поговорили.
Область ответственности Славика — техническая реализация (найти гейт, проверить, настроить, уметь слать)
А оплачивать гейт будет тоже Славик? Вы не считаете, что все-таки распоряжаться напрямую финансами компании — несколько выходит за область ответственности Славика?
Выбрать гейт — полностью техническая? За него платить надо. Если он справился сказать начальнику — "надо заплатить за смс-гейт" (фактически, подумал над этим), протестировал этот гейт (а не поручил тестировщику, мол это его сфера ответственности), то наверняка он мог спросить "а у нас время в базе по Москве или местное?".
Программист, когда отвлекается, работает менее эффективно и допускает больше ошибок.
Он добавил в смс дату (видимо по своему самостоятельному решению), но не добавил время. Это ошибка. Про дату в ТЗ ничего не было, зачем он её добавил? Если решил, что так лучше, то значит мог подумать и про время. Я уж не говорю про время отправки смс. За час её отправлять? За два? За 15 минут? Все эти, фактически, не технические решения он принял. Между строк он прочитал или нет, я не знаю.
Лично я работаю программистом 10 лет и ни разу не было негативных последствий от того, что я лишний раз подумал. Сваливать на постановщика тоже разрешалось, но это затрудняло повышение ЗП, например. Но тут кому как. По моему опыту, за максимально четкие задачи намного реже хорошо платят (потому что платят за ответственность и за превращение нечёткого в четкое)
А вот кому — об этом и спор.
Моё мнение совпадает с мнением классика:
Беда, коль пироги начнет печи сапожник,
А сапоги тачать пирожник,
И дело не пойдет на лад.
Да и примечено стократ,
Что кто за ремесло чужое браться любит.
Тот завсегда других упрямей и вздорней:
Он лучше дело все погубит,
И рад скорей
Посмешищем стать света,
Чем у честных и знающих людей
Спросить иль выслушать совета.
Ну про часовые пояса постановщик уж должен бы знать. Итоговая проблема же в них, а не в выбранном смс-гейте.
Не знаю, почему всем не понравился именно Славик, посыл-то совсем другой.
Потому что когда вы писали "Думайте о людях. Всегда" вы не подумали о тех людях, которые будут читать ваш пост и не поставили себя на их место.
Вот это было хорошо. Этот пост теперь — рекурсивный пример про "Славика". :)
Славик из вашего примера может быть в жизни на международном автобусе не ездил (это ещё надо поискать тех, кто ездил), или не знает, где и как работает компания, ему запросто могло даже в голову не придти, что часовой пояс важен.
не знает, где и как работает компания, ему запросто могло даже в голову не придти, что часовой пояс важен.
В этом я сомневаюсь. У них тут это в теге title написано, на самом-то деле. А в смс — нет
А бывает наоборот — делает твоя большая контора большой сайт, тебе говорят — Славик, нарисуй кнопочку "ОК" во всплывающем окне.
Ты берешься, и попутно понимаешь, что сайт сделан хреново, даже это всплывающее окно пишет в консоль 5 ошибок, а в половине броузеров просто не закроется. Но ты мало того, что дизайнер, а не программист, не тестировщик, не менеджер проекта, так ещё и просто Славик.
Поэтому ты просто кнопку и стараешься выкинуть все это из головы, вместе с возможными проблемами Владимира и любым последствиями.
По "местному времени" всегда означает время в точке, где находится транспорт. Только абсолютный псих будет писать "по местному времени", подразумевая время в смс-центре.
Предлагаете человеку, который выезжает из Владивостока самому пересчитывать "время по Москве" во время Владивостока? Ненависть — это первое и единственное, что вы получите от такого пользователя. :)
И да, в транспортных услугах принято время указывать всегда по местному времени (по времени того города где происходит событие): выезд автобуса по времени в городе выезда, прибытие автобуса — по времени в городе прибытия.
Ну а если взрослый человек, который собрался проехаться на междугороднем автобусе (пересекая часовые пояса), не понимает что такое "местное время", то для него очень плохие новости. Может такому придется еще дополнительно объяснить значение слова "автобус"?
1) Человек, который живёт не в московском поясе, скорее всего имеет этакий встроенный навык перевода времени из местного в московское. Это связано с тем, что большинство написанных гиками (здесь это слово имеет негативную коннотацию) сервисов никак не учитывают временные пояса, либо делают это неправильно (что каждый раз мне подтверждают смски из банка).
2) В транспортных услугах принято время указывать когда как. Железная дорога, например, указывает всегда и везде московское время.
3) Речь не о взрослом человеке, который собрался проехаться, а о гике (том самом из п.1), создающем на коленке онлайн-сервис, и вполне возможно не имеющим никакого понятия ни о том, где находится место отправления, ни о том, где находится место прибытия, а о часовых поясах он просто читал как о модной фиче, не поддерживаемой во фреймворке (шутка, но с долей правды).
Знаете, да, что у каждой задачи есть простое, понятное и неправильное решение? Откуда вы возьмете время по Москве (и какая, кстати, от него польза получателю СМС)?
И кстати, практически все уверены, что москвичи даже не в курсе понятия «часовой пояс».
И кстати, практически все уверены, что москвичи даже не в курсе понятия «часовой пояс».
Наверное эти практически все часто сталкиваются с москвичами, которые указывают время созвона, выхода в чат и т.п. без указания часового пояса. Да и шутка про «default city» не на пустом месте появилась. Моя практика, к сожалению, этот опыт подтверждает, и вопрос «это по московскому времени?» приходится задавать с завидной регулярностью.
Это косяк тестирования. Даже если не было требования, нормальный тестировщик должен был об этом подумать. Если в конторе нет qa, значит контора — говно, экономящая на том, на чем экономить нельзя и место ей на свалке истории.
Славик — хороший программист
Действительно — «программист» (в какой-то анекдотичной ретро интерпретации), а не разработчик — очень узкий специалист не имеющий представления ни о типах и представлении данных, ни о предметной области.
Такие люди были востребованы во времена становления ИТ, когда умные люди разрабатывали алгоритмы на бумаге, а специально обученные люди переводили это в понятный компьютеру код.
Поменяем разработчика на продажника. Продажник должен уметь продавать. Зачем ему тратить время на изучение предметной области (а продаёт он, скажем, фиолетовых слонов), если лучше потратить время на изучение очередной техники эффективных продаж, например? Только вот что вы о нём подумаете, когда купите у него партию этих слонов, а потом выясните, что в вашем климате слоны быстро дохнут, и вам бы лучше подошли зеленые верблюды? Вряд ли посчитаете его профессионалом. Хотя он свою функцию выполнил на отлично — продал аж целую партию. А нюансы эти все — ну их нафиг, вдруг он решит сменить место работы и пойдёт торговать ежами. Зачем ему лишняя информация про всех этих слонов и верблюдов? И вообще, это вы плохо поставили задачу, и надо было сперва проконсультироваться с другим специалистом, который разбирается в слонах и верблюдах. Но не продаёт их. А если такого специалиста нет — контора говно.
Грустно это, я в своё время нескольких поставщиков сменил, пока не нашёл ребят, у которых менеджеры-продажники могут не только продать оборудование, но и дать техническую консультацию (в рамках разумного — за деталями конечно в техподдержку). Иначе это превращалось в пинг-понг: ищешь железку, подбор по параметрам — тех.специалист. Потом с артикулом к менеджеру. Менеджер говорит — нет в наличии. Обратно к технарю, находишь аналог. Менеджер озвучивает цену — не проходит по бюджету. Снова к технарю. Количество итераций порой выбешивало. Пока не нашлась фирма, где менеджеры знали, что они продают. Все заказы ушли к ним, даже если цена была выше чем у других. Люди не стали искать отмазы, а потратили время чтобы изучить второстепенную, казалось бы, область. Получили уважение, лояльность и профит.
С программистами вариант «хороший программист, но плохой спец. в предметной области» в одном лице не прокатит
вот и я о том же. если видишь какие-то потенциально проблемные места, или информации не хватает, подними этот вопрос, а не спеши быстрее задачу закрыть, утешая себя тем, что ты-то всё согласно описанию сделал
причем в большинстве случаев, это и тебе на пользу пойдет — руководитель(заказчик) увидят, что ты не просто обезьянка, которая может код написать согласно ТЗ (пусть даже хороший, читаемый, оптимизированный и т.п. код), но и понимаешь, чем ты вообще занимаешься. а с этого уже премии/повышения/уважение в конце концов будет
причем в большинстве случаев, это и тебе на пользу пойдет — руководитель(заказчик) увидят, что ты не просто обезьянка, которая может код написать согласно ТЗ (пусть даже хороший, читаемый, оптимизированный и т.п. код), но и понимаешь, чем ты вообще занимаешься. а с этого уже премии/повышения/уважение в конце концов будет
Или, наоборот, сочтут тебя непонятливой обезьяной, которая не способна прочитать ТЗ и сделать, как там написано, а вместо этого докапываешься до них с глупыми вопросами.
Люди — они такие бесконечно разные...
если видишь какие-то потенциально проблемные места, или информации не хватает, подними этот вопрос
а если проще сделать по ТЗ, не вникая, боясь показаться глупым, то это, на мой взгляд, проблема.
в идеале, конечно, ТЗ должно всё учитывать, но реальность может отличаться
это, на мой взгляд, проблема.
И это проблема тех, кто воспринимает вопросы к ТЗ как признак глупости, а совсем не программиста.
Кстати, умение увидеть недостаток информации — это отдельный не так-то просто воспитываемый навык.
кто воспринимает вопросы к ТЗ как признак глупости
работа с такими начальниками/заказчиками — это сама по себе проблема :)
Давайте же с ними не работать, и пусть у компании из поста не будет никакого сайта, да.
на практике более реальный вариант — это уметь разговаривать с людьми и объяснять им свою позицию(в данном случае — откуда взялись вопросы, что они обоснованы)
на самом деле, людей, клинически не способных понять собеседника, очень мало
вообще моя лично позиция — «стараться избегать работать с м**аками», но не для всех подходит, у кого-то вариантов нет. но это не повод видеть проблемы и молча делать как есть. наверное. я так не могу точно
это уметь разговаривать с людьми и объяснять им свою позицию
Угу, добавили еще один навык к списку того, что обязан уметь программист.
но это не повод видеть проблемы и молча делать как есть.
Чтобы видеть проблему — нужен опыт. Не у всех он есть.
добавили еще один навык к списку того, что обязан уметь программист
это не только для программистов актуально :)
а то вырисовывается картина — на автобусах не езжу, с людьми не общаюсь, сижу
Много что много для кого "актуально". Но не все это умеют, и не у всех есть возможность этому научиться. Понятно, что лучше быть умным, образованным, богатым, здоровым и желательно молодым, но вы понимаете же, да?
на автобусах не езжу, с людьми не общаюсь, сижуу меня был именно такой коллега: велосипедист, не женат, девушки нет, хобби — оптимизирует компиляторы.починяю примуспишу код, отстаньте от меня. какой-то стереотипный айтишник-интроверт-социофоб
Текст подобных СМС для него вообще побоку — скопипастил из ТЗ и все. Зато код будет работать без выделения лишней памяти и умещаться в линейку кеша.
он сам за свою жизнь ни разу не ездил на автобусах между разными часовыми поясами, поэтому ему просто в голову не пришло, что такая проблема возможна
настраивал я один «программно-аппаратный комплекс». и сперва удивлялся, почему в инструкции от разработчиков ПО написано выставлять контроллер в очень неудобный с точки зрения остальных соединений режим. но инструкция есть, делаю. когда понимаю, что не выходит каменный цветок, звоню главному разрабу, объясняю ситуацию, прошу воспроизвести и сказать, как у них контроллер себя поведет. на что слышу ответ — какой контроллер? мы на эмуляторе тестировали.
7000р стоимость 1 железки. коммерческий софт, приносящий деньги. они не стали покупать железку. не стали разбираться, как выбрать оптимальный режим работы железки (из-за этого предлагали ставить 2 железки в случае, где прекрасно работает 1). забыли, что производитель порой вносит изменения в прошивку. они писали софт. ок, здесь проблема менеджмента, что задачу продумали криво, не рассмотрели возможные варианты. но ведь и софт еще падал просто от некорректного ввода данных — «так в инструкции же написано для чего это поле». черт, я не учился на разработчика, но разве валидация пользовательского ввода это то, что нужно отдельным пунктом указывать в ТЗ?
вобщем, там от руководства до рядовых разработчиков — всем много чего «в голову не пришло». до сих пор не могу этих ребят цензурными словами вспоминать
Известный баян, ищется любым поисковиком среди картинок по фразе «наши вашим машут»…
УВАЖАЕМЫЕ ПАССАЖИРЫ!
ЕСЛИ ВЫ ПРИОБРЕЛИ БИЛЕТ НА САЙТЕ ДО 21.06.2018 И ЕЩЕ НЕ СОВЕРШИЛИ ПОЕЗДКУ, ПРОСЬБА ЗАЙТИ В ЛИЧНЫЙ КАБИНЕТ И СКАЧАТЬ БЛАНКИ БИЛЕТОВ ПОВТОРНО.
ДЛЯ ПОЕЗДОВ ДАЛЬНЕГО СЛЕДОВАНИЯ ОТПРАВЛЕНИЕМ С 1 АВГУСТА 2018 Г. В БИЛЕТАХ УКАЗЫВАЕТСЯ МЕСТНОЕ ВРЕМЯ ОТПРАВЛЕНИЯ И ПРИБЫТИЯ, БУДЬТЕ ВНИМАТЕЛЬНЫ!
В РЖД, емнип, раньше было явно написано на билетах "Время отправления местное, время прибытия — по Москве". Может быть, не совсем удобно, но однозначно.
Для работы с географическими реалиями в разных часовых поясах очевидная хорошая практика — хранить дату/время в базе данных в UTC как единой точке отсчёта с указанием необходимого смещения в каждом конкретном случае.
Зачем переводить в UTC, если можно в БД хранить время с указанием пояса?
Того, в каком дата пришла. Не важно, в каком. Может быть, они все в разных поясах будут.
Важно, что дата/время вместе с указанием пояса фиксирует конкретный момент времени.
А это не важно, мы зафиксировали пояс на момент записи (причем, если умные, то мы зафиксировали и сам пояс, как идентификатор, и его смещение, как временной интервал).
А это не важно — на случай их переезда у нас смещение есть, оно нам даст точное астрономическое время события в прошлом.
Как вы определите в базисе UTC датувремя отправления автобуса в будущем?
Никак. Напишу 12:00 Nsk Time Zone (+X:YY)
А если до этого будущего часовой пояс Энска будет изменен?
Если часовой пояс Энска будет изменен, то необходимо проверить, по какому часовому поясу теперь ходят автобусы.
Как вы определите в базисе UTC датувремя отправления автобуса в будущем? А если до этого будущего часовой пояс Энска будет изменен?
Если это так важно, то я зафиксирую текущий момент времени и укажу, что автобус отправляется через N часов от этого момента.
Другого варианта, собственно, нет, т.к. пока никто не научился заглядывать в будущее, чтобы определить, как там кто таймзоны поменяет.
Если это так важно, то я зафиксирую текущий момент времени и укажу, что автобус отправляется через N часов от этого момента.по сути это ничем не отличается от UTC.
Другого варианта, собственно, нетпочему же? Можно, например, хранить местное время, географическую привязку и базу соответствия географии и часовых поясов.
Это возможно оверкилл для расписания автобусов, но на какие-нибудь ГИС (где географическая привязка и так есть) ложится весьма неплохо.
ps:
Ни в коем случае не призываю так делать всегда и везде.
Использование связки UTC+TZ решает подавляющее большинство вопросов с обработкой времени.
Но нужно понимать, что это все же не серебряная пуля.
Если это так важно, то я зафиксирую текущий момент времени и укажу, что автобус отправляется через N часов от этого момента.
Как вы определите, чему равно N? В случае перевода времени число часов в сутках не кратно 24.
Так если есть сам пояс, его смещение и время в этом поясе — почему бы сразу его не перевести в UTC?
в томске пояс меняли раз пять местные
сначала экспериментально пару раз туда/обратно, это в начале 2000-ых
а затем дима шизанулся на всю страну, и пояс съехал аж на 2 часа
и в итоге потом сместили на час, а потом еще на час, и стало как было изначально и всегда
но сетка вещания осталась смещенной на час например)
майкрософт как врет на час так и врёт
и кучи сервисов типа определяют время на томск с разницей в час до сих пор
и этот бардак похоже будет вечным
я тут пожил, и я понял одно — в жёпу часовые пояса, они меняются и отследить это невозможно, и более того — никто этим даже и не занимается никогда, потому что всем похрен
ушел на гмт и забыл проблемы навсегда
даж на компе обычном у меня стоит время гмт, и даже на часах стоит время гмт)))
а вы думали так просто все?))
и да, человек в томске поставит томское время в винде, НО ОНО БУДЕТ С ДРУГОГО ЧАСОВОГО ПОЯСА)
потому что сами томичи уже теряются в каком часовом поясе они живут
ставят какой-то примерно и хрен затаращщивают абсолютно
довели людей до ручьки, понимаете?
при этом томич локально время выставит верное, но верить выставленному смещению в часах во всем томске целиком никак нельзя, все ставят часовые пояса какие захотят, потому что уже не знают какие ставить правильно
и что вы будете делать в таком случае?)
вы поймите простую вещь, если есть стандарт — это хорошо, и можно работать по стандарту
но когда есть стандарт, а он не выполняется, то даже и не пытайтесь прикрутить что-то по стандарту, ибо вы сами отстрелите себе ногу
гонг, вопрос: и сколько таких регионов по планете, где полный бардак со временем? хотите героически решать этот вопрос — решайте)
только депутаты все равно вас переплюнут, и у вас все равно ничего работать не будет в итоге, причем внезапно
и оно вам надо вообще тогда?
Совсем параноики хранят два времени — чтобы знать, что по этому поводу думал клиент, но не доверять ему.
Вообще, если уж совсем надежно рассуждать, то, действительно, надо хранить два времени — это сама дата/время с поясом + дата/время с поясом создания этой даты (т.к. вчера указанная дата/время могла значить один момент, а сегодня — уже другой).
Что самое забавное — кажется, здесь можно построить парадокс, при котором не будет способа определить, стоит ли делать поправку в самой контрольной дате, и тогда задача определения корректного времени становится вовсе неразрешимой :)
Ну как-то так, да. Мы в свое время просто как раз обдумывали проблему с записью тревел-логов всяких, и там пользователь может перепрыгнуть в другой часовой пояс, перевести время на телефоне, но не поменять часовой пояс (есть такие люди, да), и мы будем получать время, которое местное в Австралии, но с указанием московской таймзоны — и вокруг этого, понятное дело, начинают строиться обходные варианты.
Вот не факт. Пользователь из другого города может вообще не знать о разнице по времени с его городом, причём быть точно уверенным, что разницы нет, потому что её 100% не было 1,5 года назад. Но за 1,5 года или границы поясов сменили, или зимнее время отменили, или ещё что. А он как раз ищет куда бы купить билет в разрыв между поездами или самолётами.
Просто используйте библиотеку, где все эти тонкости учтены.
Все учесть невозможно. Какие-то решения принимать всё равно придётся. И это хороший случай, когда видишь неопределённость и сознательно принимаешь решение, а не не видишь и считаешь что-то очевидным.
Вот интересный кейс с одного из проектов: путешествие во времени в прошлое. Пользователь совершает операцию, она фиксируется по местному времени точки продажи, он летит с Дальнего Востока в Москву быстрее "солнца" и пытается совершить ещё одну операцию по местному времени другой точки продажи.
А так что будет… некоторые авторы уже продумали данную проблему -:)
– Посуди сама, чем я могу помочь? – Врач развела руками. – Удостоверение спеца сделать несложно. Ты боец-спец, в этом я уверена. Но я обязана вначале удостоверить твою личность, милая. А у тебя нет удостоверения личности.
Ким молчала.
– Джанет, один выход есть, – осторожно сказал Алекс. Его голос дрогнул. Он вступил на неверную почву подтасовок, чего никогда не любил.
– И какой же, капитан?
– Вы делаете Ким сертификат бойца-спец. Потом…
Джанет нахмурилась, покачала головой, но Алекс уже продолжал:
– Потом мы с Ким идем в ближайший регистрационный центр. И заключаем временный брак – по сертификатам спецов. Их для этого достаточно.
– Понимаю, что достаточно. Но я не стану делать фальшивый сертификат.
– Подождите, Джанет! После заключения брака Ким получает новые документы, уже на имя Ким Романовой… примешь мою фамилию, Ким?
Ким смотрела на него широко раскрытыми глазами, еще ничего не понимая.
– Никаких запросов в банк данных. Туда отправится новая информация, ну и что? Мало ли в галактике девочек по имени Ким?
– Но я не могу нарушать закон! – Даже невозмутимости Джанет имелись границы.
– А вы его не нарушите. Мы немедленно возвращаемся на корабль, и вы вписываете в документы данные ее нового удостоверения личности. Допустим, я попросил вас провести срочную сертификацию, пообещав предоставить удостоверения позже. Вы ведь могли пойти на крошечное нарушение порядка?
– Ни один компьютер не пропустит такого нарушения. Как можно писать, что сертификат спеца выдан на основании документа, который еще не получен? Или вы умеете путешествовать в прошлое, капитан?
– Умею.
Джанет замолчала.
– Время, по которому живет корабль, устанавливает капитан. Я могу поставить часы по Гринвичу. По Великому Пекину. По времени космопорта приписки. По времени планеты пребывания. Понимаете? Какое время указывается в ваших документах?
– Время корабля…
– Вот видите? Со стороны любого проверяющего все будет выглядеть так, словно… – Алекс перевел дыхание. – Капитан корабля оформил брачный союз с членом своего экипажа, после чего ей была проведена генетическая экспертиза, статус бойца-спец подтвержден…
– Подождите! – Джанет взмахнула рукой. – Вы серьезно, капитан? Это теоретические построения, или…
– Или. Все капитаны пользуются этим трюком. В общем-то о нем прекрасно знают в профсоюзе, но закрывают глаза.
– Пользуются? Чтобы протащить в экипаж девчонок без документов? – с иронией спросила Джанет.
– Нет. Чтобы выгадать для экипажа лишние премиальные, провести левый контракт, прикрыть самовольные отлучки… для множества правонарушений. Это невозможно проконтролировать, Джанет. Планеты живут по своему времени. Корабли – по своему.
По лицу Джанет прошла тень.
– Капитан, я давно смирилась с тем, что Империя – безумный и анархичный мир. Но подобного безумия не ожидала.
– Вы поможете нам, Джанет?
– Я ведь буду знать, что закон нарушен, – тоскливо сказала женщина.
– Да, будете. Но я верю Ким. Иного пути легализоваться в обществе у нее нет. Если вы откажете, то фактически убьете девочку. А вы – врач.
Джанет вздохнула. Посмотрела на Ким – напрягшуюся, застывшую в ожидании ее ответа.
Знаю пользователей, которые, увидев строку "6 сентября 2018, 18:00 MSK" способны возмутиться "А что это за буковки? А нам это зачем, мы же в одном поясе живём? Вы же для нас софт пишете, а не для себя!"
В билете указан город отправления и время, логично что время отправления привязано к времени города отправления, а не к месту покупки билета (Украина).
Логично, что СМС которая пришла в 00:03 должна заранее предупреждать об автобусе, а не о том, что автобус уже уехал 3 минуты назад иначе нет никакого смысла в таком уведомлении. В смс отсутствует время отправки (это минус), зато указан номер билета, что позволяет пользователю проверить всю информацию о рейсе на случай если он всё забыл/перепутал/волнуется.
Небольшое детективное расследование:
Ещё на скриншоте чека рядом с временем указана "*", но автор замазал, что написано в сноске.
Я решил проверить, что там нет надписи: "* Время отбытия и прибытия — локальное" и погуглив «билеты на автобус рига-москва» сразу нашёл подходящий сайт ecolines.net. Я не очень хотел покупать билет, чтобы посмотреть замазанный текст рядом с "*". Поэтому сразу написал в «онлайн-саппорт» и попросил пример как выглядит их билет. Как и автор я не получил ответа онлайн, но через 5 минут я получил сообщение, где могу посмотреть пример шаблона. Я думаю если автор написал бы заранее в саппорт (а не через 3 минуты после предполагаемого отъезда автобуса) и спросил про время отправления, то получил бы ответ.

На самом сайте при выборе рейса я получил уведомление, что между выбранными пунктами есть разница во времени в 1 час, так что можно считать, что они умеют работать с таймзонами и учли их.
Итак, по факту имеем 1 смс-сообщение без конкретики (которое можно трактовать по разному) и как автор раскрутил себя от 0 до 100 за 1 секунду.
PS: все мы люди и некоторые из нас склонны чаще накручивать себя на совершенно ровном месте — лично я предпочитаю приехать на вокзал на час раньше и играться в телефоне, а не думать, что я могу опоздать из-за пробок.
На самом сайте при выборе рейса я получил уведомление, что между выбранными пунктами есть разница во времени в 1 час, так что можно считать, что они умеют работать с таймзонами и учли их.
Мне такого не показывали, к сожалению.
"* Время прибытия указано ориентировочно".
К сожалению, у перевозчика на сайте в Часто задаваемые вопросы нет информации о том что время в билете — локальное, зато (как уже ниже писал Slavik7) это есть в соседнем пункте Образец билета:
Дата и время отправления первой поездки (местное!).
Я вам больше того скажу, на сайте есть [страница], где черным по белому написано "Дата и время отправления первой поездки (местное!)."
Володя решил, что нужно обязательно убедиться, что указали именно местное время. Перекликал весь сайт — нету.
А Володя смотрел правила на сайте? Я вот зашел на Nлайнз сайт и сразу же нашел там следующее:
Время отправления – местное время, указанное в билете как самое раннее возможное время отправления автобуса, которое может изменяться на более позднее по независящим от перевозчика причинам.
Просто я, как и Володя, когда-то хотел уточнить местное ли время и смог это сделать в пару телодвижений (про время прибытия там тоже есть).
Во всех этих холиварах в комментариях я на стороне автора касательно Славика — он [Славик] несет такую же ответственность за свой код, как и тот, кто ему сказал или не сказал указывать часовой пояс в тексте. Но вот с позицией Володи я не согласен, даже в билете есть указание, где можно ознакомиться с правилами. Информацию от него никто не скрывал, она просто находится не там, где ему хотелось бы, но место вполне себе корректное.
Ключевая ошибка в смс, а не эти ваши таймзоны.
Вот только автобус-то, по мнению программиста, уже прибыл — просто СМС отправлена не в то время. Из-за таймзон, ага.
Вот только автобус-то, по мнению программиста, уже прибыл
Это обычное смс-напоминание о скором отправлении автобуса, рассылается заблаговременно, примерно за 1-2 часа до отправления.
… или нет. Там такая задача, что никто не в курсе, что именно рассылается. А как я уже писал, в конкретном случае (отправление в час по Вроцлаву, смс-ка пришла в полночь по Вроцлаву, то есть в час по Москве) очень похоже на то, что хотели отправлять именно в момент посадки. Но это все додумки, конечно.
Т.е. пример с Славиком (славиком), т.е. человеком, работающим до довольства(ия) славой, примеряющим к себе, как теплей, и всегда одевающий носок тем местом, которое больше греет (наизнанку), это не абстракция, а реальная модель, использующаяся для построения неконфликтных обществ (у девушек «голова не болит», «готовит вкусно», «ест мало» — точно так же). АКТИВНАЯ позиция. Т.е. девушка «голова не болит», это Ваш заочный психиатр (если Вы заметили некоторые поправки в вашей психике,). Не от оскорбительного, не заботящегося, а от возможной конструктивной жизненной позиции, как девушка милой тебе, с «голова не болит» (время уделит ВСЁ).
НЕ НЕ у них не очень всё получается. Поэтому помогаем им мы.
Ваше не ФСБ. Ваш не офицер. Ваш Славик.
А где бы их научили думать-то?
Ну то есть вы сначала не даете людям возможности научиться думать, а потом видите проблему в том, что они не умеют думать. Прекрасная методика, да.
"Славик" хочет анализировать ситуацию. Он даже анализирует ее — как умеет. Просто его умения оказалось недостаточно. Где он должен был научиться лучше, чтобы вы не записывали его в "молодых программистов, не думающих о"?
По моему скромному мнению, если вы хотите, чтобы люди учились на своих ошибках, наказывать их за эти ошибки можно только тогда, когда им указали на ошибку заранее. Иначе учиться они не будут, а просто пошлют вас к черту.
Он должен был научится там, где учился на программиста.
То есть, есть такое магическое место, где этому учат. Прекрасно. Зачем вы тогда вообще имеете дело с теми программистами, которые этому не научились?
Если этих знаний недостаточно, то он должен их развивать.
Каким же образом, если вы не даете ему возможности?
если разрабатывает человек что то, то он должен продумать все ситуации
Это немножко невозможно. Именно поэтому сложное ПО разрабатывают команды.
Славик то ни к кому не обратился за помощью или консультацией — верно ведь?
Нет, неверно. Есть фраза "начальство одобрило", означающая приемку.
То есть, есть такое магическое место, где этому учат. Прекрасно. Зачем вы тогда вообще имеете дело с теми программистами, которые этому не научились?
Я таких программистов воспитываю, именно под свои цели и задачи. Да, свои методы, но поверьте, они работают.
Каким же образом, если вы не даете ему возможности?
Даю, возможности. Понимаю, что человеку свойственно ошибаться. И показываю, что цена их ошибки иногда может быть очень высока.
Это немножко невозможно. Именно поэтому сложное ПО разрабатывают команды.
В большинстве — да, сложное ПО разрабатывают команды. Но, везде есть исключения.
Нет, неверно. Есть фраза «начальство одобрило», означающая приемку.
Мы имеем в виду разные ситуации.
Почему вы упорно не видите, что провтык в этой истории произошел на этапе бизнес-анализа и постановки задачи? То есть на тех этапах, на которых разработчика еще могут вообще не задействовать. Информировать пользователя о часовых поясах — это определенно бизнес-задача, а не техническая. И ее должны были решить до того, как давать такой функционал в разработку.
Это конечно хорошо, когда разработчики смотрят "вширь" а не только "вглубь" своих задач. Но не все разработчики так делают. И те кто так не делает — не являются плохими разработчиками. Это свойство — типа как бонус, к основным навыкам. :)
ловить юзера и его часовой пояс — идея совсем не очень…
тут уж пусть сам пересчитывает время, пока ничего с этим поделать нельзя
и да, если сервис глобален регионально — то используйте например московское время
все остальное в общем-то приведет к ошибкам так или иначе
Ну тут нужно получить время от пользователя (чтоб понять, какой часовой пояс у него в системе). Раз это онлайн-календарь — значит это вполне себе можно сделать. А дальше часть ответственности за правильную логику работы с "ночным временем" уже ложится на самого юзера. Если поставил себе на компе/смартфоне некорректное время, то и уведомления будут некорректно показываться. Но при этом все равно будут за 3 часа до события.
господа, если сервис глобальный — юзайте гмт [...] все остальное в общем-то приведет к ошибкам так или иначе
Расскажите это глобальному TripIt, который прекрасно справляется с местным временем.
Ну и я уже выше приводил пару примеров, которые "юзайте гмт" вообще никак не решаются.
глобальному TripIt, который прекрасно справляется с местным временем.вы этот tripit тестили что ли? % покрытия тестами какой, не подскажите?
и каковы результаты?
а тогда может лучше жевать?
вы этот tripit тестили что ли?
Лучше. Я им много лет пользуюсь. Вот только что пришла очередная смс-ка с предупреждением о чекине, вовремя и с правильным временем.
Почему именно московское? Что в нем такого особенного для глобального сервиса?
А вот узнать какой часовой пояс в пункте отправления или назначения — не так уж и сложно, и от самого пользователя (его местоположения, наличия "автокоррекции" времени на его телефоне по GPS и вообще времени, которое у него выставлено на телефоне) не зависит. Вполне себе можно такое время сформировать и отправить пользователю. Не забыв дописать "по местному времени". :)
вроде то что время всегда указывают местно — это уже аксиома для тревел сайтов. или есть дятлы которые так не делают?
… обычный ПХП-программист. Не джуниор и не сеньор, а парень из тех, кого раньше называли «веб-мастерами».
и которые теперь сами себя называют «full stack»
Славик и GMT+3 или польза для людей