Pull to refresh

Comments 329

А еще иногда есть желание заслать некоторых программистов (ну и не только их) привыкших к теплому офису и отсутствию злых юзеров и постоянному интернету, в какую-нибудь глухомань, где до ближайшего стабильного 3G «три дня на оленях» — чтобы, во-первых начали оптимизировать свои неуёмные амбиции по размерам софта или оберток, а во-вторых поняли что такое падающий софт на медленном канале и без возможности быстро загуглить, или пересобрать и получить от него новую версию с исправлением.офт
Когда программист говорит начальнику «могут быть проблемы на медленном соединении, надо потестировать дня 2-3, и недельку на исправление», начальник шлет его лесом (дескать, напишем тикет, а когда будет время...)

А вот если пользователи сообщают, что программа у них глючит, а особенно включают это в бизнес-требования, то тут же время находится.
Если пользователей миллион, а пожалуется всего 1000 пользователей из глухих деревень, вполне возможно что и на них тоже забьют. Если только компания не занята в данный момент оптимизацией каждой доли процента прибыли.
Даже если 600К из глухих деревень, но дают 0.1% прибыли, то тоже могут забить. Или если нет конкурента.
blablacar — яркий пример: чуть хреновый интернет — сразу вываливается с неизвестной ошибкой, в группе в вк их уже забомбили, а толку ноль.
А ещё есть иногда желание сделать кому-нибудь что-нибудь плохо. А, вдруг, в этот раз, от того, что кому сделал плохо, себе лучше станет?
В этом случае больше показать, что надо заботиться о пользователях, и вытащить из уютного мирка где комфортно и всё есть буквально сразу (пицца, пиво, софт, сервисы любые, услуги любые, скоростной интернет и т.д.), а то сильно искажается восприятие мира. А ведь есть деревни, к примеру, где электричества нет и не будет, причем не так далеко от Петербурга всего лишь (ну пара сотен км то всего), и живут люди там.
UFO just landed and posted this here
Это всего лишь исполнители, реализующие требования

В этом и винят. В этом же и винят тех, кто блокировщики телеграма пишет. Не забываем, что самое полное и качественное ТЗ — это исходный код, поэтому при ТЗ любого качества программист все равно принимает решения. И он может как задумываться о том, как потом пользоваться результами его труда, либо забить.
UFO just landed and posted this here
В итоге написание ТЗ по мнению программиста должно занимать на порядок больше времени, чем реализация

Для хорошего ТЗ на сложную задачу так и есть.


Он даже блин не предполагает, что в оповещении о событии надо проставить время события?

В ТЗ написано, что надо проставить. Наверное же человек, который писал ТЗ, подумал?

UFO just landed and posted this here
Любой адекватный человек предполагает, что в оповещении о событии есть дата и время этого события.

Нет. Это вы так предполагаете, и думаете, что ваше предположение верно для всех вокруг. А в задаче в посте даже не сказано про оповещения о событии, там сказано "уведомления о посадке". И знаете, что? Когда я сижу в аэропорту, уведомления о посадке на борт таки звучит в виде "началась посадка на борт, пройдите к гейту", а не "во столько-то началась посадка на борт".


Вы мне пытаетесь доказать, что такое поведение — норма.

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


Вон у меня в соседнем окне открыт график доставки покупки с Амазона. Эта покупка уже пересекла три часовых пояса, а я на нее смотрю из четвертого. Так вот, там в заголоке написано "arriving tomorrow at 8 PM". И пока вы не нажмете see all updates, и не прочитаете там мелкий шрифт в самом конце страницы, вы так и не узнаете, что это местное время (причем все уведомления указаны в местном времени, угадывайте сами, какой это часовой пояс).

UFO just landed and posted this here
Наверное потому, что вы сидите в аэропорту?

Не "я сижу в аэропорту", а "предполагается, что я сижу в аэропорту".


А теперь сравните с оповещениями на вокзале, что больше подходит под ситуацию с автобусом.

Это вы считаете, что больше похоже. А я не считаю. И да, вы хотите сказать, что приведенные вами выше пункты не применимы к вокзалу? Да нет, они точно такие же.


Я считаю, что при общении двух адекватных людей можно не писать ТЗ «для идиотов».

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


типичному программисту НАДО объяснить как делать оповещения о событии.

Нет, ему надо объяснить, какие конкретно оповещения нужны в конкретном случае.


Примеров из реальной жизни ему не достаточно

Я вам привел пример из реальной жизни, который совпадает с посланным сообщением.


Сделать как в других сферах и провести аналогии типичный программист не способен.

Способен. Но снова, почему вы думаете, что ваши и его аналогии совпадают?


Вы в каком часовом поясе будете посылку принимать?

Я вообще не буду ее принимать, ее принимает отель.


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

Вы противоречите сам себе. Если всегда указывается отправление по местному времени, то указывать часовой пояс не надо, потому что это лишняя информация.


А вот оповещение за час — садитесь в автобус. Это муть.

Это, несомненно, муть. Вопрос в том, что должно было быть — и вы, в отличие от постановщика задачи, не знаете правильного ответа на этот вопрос.

UFO just landed and posted this here
Вы про голосовое оповещение диктором?

Именно про него.


Вы реально сравниваете полет на самолете и поездку на автобусе или поезде? Ничего, что это два абсолютно разных сценария?

Для целей оповещения — одинаковые.


Как минимум тем, что на вокзал можно прийти за 3 минуты до отправления и сесть в поезд за минуту до отправки,

Ну вот попробуйте это провернуть с крупным скоростным поездом типа Ave, и узнаете, что нет, нельзя.


Вы сейчас серьезно? Вы на поезде ездили хоть раз?

Да, я совершенно серьезно. Да, ездил.


Если вы считаете, что полет на самолете = поездке на поезде

Нет, я считаю, что в рамках перечисленных пунктов отличия несущественны.


приезжайте в аэропорт за 15 минут до вылета и улетайте.

В аэропорте типа Соньдаля это прекрасно сработает.


Как раз опыт показывает, что 90+% программистов не хотят думать головой.

90% людей не хотят думать головой.


И особенно они не хотят читать правила работы компании, что бы по этим самым правилам продумать оповещения.

Какие такие правила работы компании?


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

Ну так вы комментом раньше предлагали "cделать как в других сферах и провести аналогии". Теперь, когда сделали именно так, это вам тоже не нравится.


Ну то есть надо:
1) Написать ТЗ на оповещения
2) Написать тексты оповещений в соответствии с правилами компании
3) Написать время оповещений
4) Передать все программисту, что бы он собственно сделал тупо шаблоны — я правильно понял?

Да, вы все правильно поняли. Еще вы забыли тестирование, архитектуру и несколько других маленьких вещей. За пункты 1 и 3 отвечает аналитик, за пункт 2 — технический писатель. За тестирование — QA. Удивительно, правда?


Да, кстати, а полную грамотность на всех языках, на которых работает компания, вы тоже от программиста ожидаете?


Может тогда из зарплаты программиста вычесть зарплату человека, который пишет ТЗ, тексты, время и тд?

Нет, почему же. Ровно наоборот. Просто представьте, что все люди на почасовке. Если все это должен делать программист — вы заплатите все деньги ему. Если работа делится на много людей — каждый получит деньги за потраченное им время.


И собственно проблема в том, что программист не хочет разбираться в правилах,

Да, не хочет, это нормально. Он хочет разбираться в языках программирования, архитектуре ПО, принципах разработки и еще сотне других вещей, в которых разбирается только он (а заказчик разбираться не хочет). Это называется "специализация". А разбираться в, скажем, требованиях PCI DSS — это отдельная работа на полный оклад.


Например, провести аналогию автобус=поезд через объединение «наземный транспорт».

Почему вы считаете, что именно эта аналогия — самая правильная? Такси — тоже наземный транспорт, скажем.


Какая разница? Вы отель предупреждать по Австралийскому времени будете?

Отель я вообще предупреждать не буду. А мне зато есть разница, потому что я хочу знать как давно ушла моя посылка.


Обычно, во всех адекватных компаниях, эту информацию указывают под сноской.

В СМС сносок не бывает.


Время отправления и прибытия указано московское

Только что было местное. Правда, круто?


Оповещение клиенту, что его автобус из Вены выезжает в час ночи по времени города Вена? Это сверх-сложно?

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

А вот оповещение за час — садитесь в автобус. Это муть

Это, несомненно, муть.

Напоминалки в календаре — тоже муть?

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

Воот. Муть не сама смс, а идиотский текст, вместо 'не пролюби автобус через час'

Мы не знаем, каково было назначение СМС, поэтому мы не можем сказать, муть в тексте или во времени прихода.

А у вас никогда такого не было, что СМС приходит через пару дней после отправки?
UFO just landed and posted this here
UFO just landed and posted this here
UFO just landed and posted this here
На практике практически всегда шаблоны текстов таких сообщений составляют не программисты, они указываются в задаче, а часто при попытке поменять что-то по своей инициативе, даже явную ошибку, задача режется QA.

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

Используй UTC время для всего и вся, а конвертировать из UTC не проблема.

Вы забыли уточнить "UTC-время и смещение на момент события", правда же?

Смещение как раз таки у каждого своё, и его нужно на клиенте проверять. А вообще самый лучший вариант это UNIX формат, он всегда идёт в UTC, да и на клиенте получить из него поясное время это как 2 пальца по клавиатуре.
Живо представил себе СМС:
Ваш автобус отправляется в 1524884400. Счастливого пути.
Зачем представлять если всё спокойно переводится в нужный формат.
Кем? пользователем на калькуляторе?
Программистом при формировании сообщения, этот же формат задумывался для удобства хранения, и с ним в дальнейшем можно делать всё что угодно и отображать в каком угодно формате. Просто как показывает практика время ни сколько не постоянная величина, выводимый формат во всех странах отличается, часовые пояса и т.д. Unix прекрасно решает эти проблемы. p.s. поясное время в данном случае спокойно получается если клиент передаст свою тайм зону вместе с запросом на заказ автобуса.
ну так datetime (или как его там в php) и хранит внутри себя дату в чем-то аналогичном unix timestamp со свистелками и перделками.
Чем от этого легче пользователю, получаещему SMS 'ваш автобус отправляется в 01:00 УгадайСамКакогоВремени'?
Нет, суть в том что у нас 2 источника времени, сервер и клиент, они находятся в разных полушариях. Сервер ни чего не знает о времени клиента пока тот ему этого не сообщит и хранит даты в unix формате(а оно всегда utc, и всегда в едином числовом формате). Клиент соответственно заказывает автобус и со своими данными отправляет свой часовой пояс, сервер же когда формируем смс конвертируем unix формат в человекопонятный например 06.09.2018 13:00 и подгоняет дату под часовой пояс который отправил нам клиент. Клиент доволен и не опоздает на свой автобус
Ничего страшного, что в данном конкретном случае 'клиент' это телефон, умеющий принимать СМС?
А как это влияет на цены на масло?
Приблизительно так же, как ваше (гениальное в своей очевидности) предложение на решение затронутой в посте проблемы.
Не понимаю с чего такая язвительность, я вроде бы вас лично не оскорблял и не задевал, это лестно конечно, но данная концепция не моя. Если вы видите проблему в том что клиентская часть это телефон умеющий принимать СМС то я с радостью её выслушаю и если она действительна такова, то пересмотрю её или исправлю недочёты
Ну так вы поймите для начала проблему, а потом решения предлагайте.
Ошибка не в обработке времени в программном коде, а в пользовательском интерфейсе.
Сначала пользователю не сообщают, что 'времена отправления и прибытия указаны местные', затем в смс-ке напоминалке вместо времени вообще пишут 'welcome aboard', что создает легкую панику.
Данный диалог возник из комментария пользователя касательно формата даты, я хоть слово сказал про пользовательский интерфейс?
Вы, к примеру, сказали, что время сообщит клиент. Как телефон, который может работать только с СМС, сообщит вам время? А если мы берём время клиента, то скажите, в случае ситуации из поста, мы должны взять российское время, украинское или местное на момент совершения заказа? А если на клиенте таймзона была неправильная? А вот теперь мы выбрали какой-то вариант и придерживаемся его, как пользователь об этом узнает?
Нужно просто при формировании СМС указывать часовой пояс.
Билеты же тоже не по смс заказаны были
Как с вами тяжело) Ну вот я же говорю, возьмите ситуацию из поста. Билеты заказывали с компьютера с кривой геозоной (добавление от меня), находящегося в Украине через версию сайта для России. Какого времени в СМС я, по-вашему, как пользователь должен ждать?) Российского? Украинского? Того непонятного времени в кривой геозоне, которую я даже не запомнил? А почему именно этого, а не какого-то из оставшихся? А если я забыл, откуда я делал заказ, т.к. бронировал за полгода, находясь в кругосветке? Столько вопросов и никаких ответов) Вместо того, чтобы просто написать часовой пояс в СМС)
В сложившейся практике заказов билетов время всегда указывается местное для пункта отправления, не надо никаких часовых зон и прочего. Человек должен быть на вокзале к моменту, когда часы на вокзале покажут время отправления.
Очень часто агрегаторы, заказывающие билеты в разных городах получают от продавца билета только время отправления без конкретизации часового пояса. К тому же гипотетическая «Баба Маня» при появлении в билете GMT+5 будет обрывать телефон службы поддержки чтобы выяснить что это и к скольки же ей действительно нужно на автобусную станцию.
РЖД совсем недавно перешла на местное время.
До августа сего года часы на вокзалах по всей стране показывали московское.
Ну так в этом случае можно написать «местного времени». Или просто указать это самое местное время. А «сложившаяся практика» может отличаться. Вот откуда я должен знать, что РЖД дату отправления пишет (точнее, писала, но об этом позже) по МСК? Мы для РЖД как будем указывать? В местном? А если я знаю об особенностях РЖД, и подумаю, что это МСК? По Москве? Но я же привык, что этот сервис везде по местному времени посылает. Т.е. я уже потерялся, а тут ещё бац! РЖД внезапно начала указывать время не по Москве, а местное. Я это как должен был предугадать? А сервис-то у нас международный. Мне как клиенту перечень таких РЖД по всему миру с такими особенностями вести и отслеживать? Нет ведь.
Просто. Укажите. Пояс. В СМС. Хоть как GMT / UTC +5, хоть «МСК», хоть «местного времени», как-нибудь.
Вы всё здорово говорите! Однако агрегатор знать не знает в каком часовом поясе указано время на билете продавца. Тот же РЖД ведь этого не указывал. Да и все как-то мирно спокойно ездили на поездах. Даже несчастные бабульки из глубинки, которые ведать не ведали о разных часовых поясах. Массового опоздания ни разу не наблюдалось. Вот реально тема проблемы выдумана на пустом месте.

Ну так а я как должен об этом узнать?) вот я турист из Исландии, заказал через онлайн-сервис билеты РЖД (в том числе) до августа этого года. И как я, исландский турист, должен понять, что вот это время, которое мне прислали – Московское, а не местное? Бабки об этом знают, потому что они русские, и так было десятилетиями. А я? И сколько таких РЖД по миру? Наверное, логичнее со всем этим безобразием разобраться один раз сервису, для которого это профессиональная обязанность, чем каждому клиенту на всякий случай перед каждой поездкой лазать по гуглам и выяснять особенности каждого конкретного поставщика услуг.
Насчёт того, что проблема на пустом месте – так вон же пост наверху, человек на этом обжёгся. Хорошо, что раньше приехал, а не опоздал. А если вы считаете, что всё равно сильно опоздать / долго ждать не получится, а все приезжают заранее, то напомню, что РЖД использовали московское время и во Владивостоке ;)

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

Клиент — прошитое приложение СМС на Нокии 3310. Оно тупее школьника :)

СМС генерируется на сервере, я выше описал по какому принципу, в данном случае клиент получает готовый текст с нужной датой и тут ничего даже высчитывать не надо
Так не может клиент — смс приложение — отправить на сервер свой часовой пояс.
Конечно может, это же смс приложение
Вы сообщения читаете? Телефон Нокия 3310. Он ничего не отправляет. И нет там смс приложения. Езжайте лучше в поля и поработайте в службах эксплуатации. Засиделись в офисе… Пользователь в данном случае никакого приложения не будет ставить и не может.
Это был сарказм, надо было всё таки указать для тех кто не понял, и вызван он как раз из ходя из «СМС приложение». Концепции тут совсем разные, тут обычный XMLHttpRequest а в СМС передача данных по GPS. Я конечно понимаю, что для неосведомлённого человека это одинаковые вещи, но это далеко не так.
А по глонасс не передают?
Я очень далёк от протоколов по которым передаются СМС, у меня сфера другая, но даже я знаю, что это разные вещи и их сравнивать нельзя. Что и доказывает ru.wikipedia.org/wiki/SMPP
SMPP — больше для партнёров оператора и самого оператора для подключения внутренних сервисов к смс центру по IP. Абонентские устройства с сетью общаются по сигнальным протоколам.
UFO just landed and posted this here
Часовой пояс точки отправления?
UFO just landed and posted this here

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

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


Но, на самом деле, клиенту и не нужно этого делать. Сервер должен выдавать время в смс по местному часовому поясу. Для автобуса из Москвы — по московскому, для автобуса из Киева — по Киевскому. Просто нужно не забыть на сайте (и, возможно, в смске) написать, что время указано по местному часовому поясу.

Вот непонятно для чего нагружать лишней информацией «местное время» если это и так понятно. Вообще выглядит странно — подходишь к прохожему, спрашиваешь сколько времени и он вместо простого сообщения о часах и минутах сначала проговаривает «местное время ...(такое-то)». Всякий билет подразумевает именно местное время, а не время в Уругвае или Зимбабве, при отправлении из Урюпинска.
На момент получения СМС получатель может находиться в другом часовом поясе и «местное время» для него неоднозначно как минимум.
На момент покупки билета в билетной кассе у покупателя могут быть часы настроены на другой часовой пояс и время отправления для него тоже становится не однозначным.

Вот реально где находится покупатель перевозчику, и тем более агрегатору без разницы. Перевозчик работает по своим правилам, агрегатор по своим. Каждый что-то умалчивает и возлагать на агрегатора обязанности ментального медиума глупо, бессмысленно. Агрегатор передаёт в точности то, что ему дал перевозчик. Остальное от лукавого.
Ну а заморочка-то в том, что откуда программист при отправлении сообщения будет знать, в каком часовом поясе находится клиент? Ладно если речь про автобус — можно взять часовой пояс места отправления автобуса. А если о веб-конференции?
Допилить одну строчку:
Отправление в 18-00 по МСК.
брать мск или какой нибудь украинский часовой пояс по адресу места, откуда человек отправляется. Причем именно так грубо — по МСК, по киевскому времени, по времени хабаровска…
Все.

Именно так. А если не охота привязываться к какому-то городу — можно указать по GMT+00, только обязательно на этом обратить внимание. Тогда у юзера будет меньше головной боли.

И потом всякой бабульке объяснять что это такое GMT+00. Ездят не только программисты и инженера, но и люди из глубинки, которым глубоко фиолетово на все часовые пояса, их жизнь и без этой информации очень насыщенная.
Честно, тема выглядит как перфекционист опоздал на самолёт, а остальные, купившие такие же билеты, улетели вовремя, без проблем и возмущений.
Смещение как раз таки у каждого своё

Как раз поэтому и надо хранить время в UTC.
Но только времени в UTC недостаточно. Точнее его недостаточно для отдалённых дат в будущем. Вот для таких дат и надо хранить «смещение на момент события».

Ещё добавлю, что в некоторых БД можно вообще хранить время с временной зоной и работать будет нормально, насколько я знаю. Я имею ввиду, прям встроенный формат.
Для будущих дат да, смещение необходимо. На счёт формата в БД трудно сказать, мне лично гораздо проще работать с числовым форматом, да и тот формат про который вы говорите подходит только для личной информации 1 пользователя (Заказ пиццы и т.д.)
Да, с форматом в БД согласен.
Где-то читал про создание календаря с напоминаниями (чуть ниже andreymal дал ссылку). Если даты достаточно далеко в будущем, очень полезно ещё и хранить приблизительное местоположение события (город, область, район и т.п.): правила часовых поясов могут успеть смениться до того, как наступит событие. За примером теперь далеко ходить не надо.
UFO just landed and posted this here
Вспоминаю древний пост на хабре, кажется, от Яндекса, где они писали, что хранят вместе с датой и временем город.
Почему не часовой пояс?
Потому, что был прецедент, когда город сменил временную зону.

На каком-таком клиенте?


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


Или вот еще веселее: есть у вас запись в БД про момент Очень Важного события: "31.12.2017 23:50:05". В UTC, как вы просили, или даже в unix timestamp, пожалуйста. Внимание, вопрос: в каком году произошло Очень Важное событие?

А что нам мешает отправить в данном случае время в unix и свой часовой пояс? Этого вполне достаточно что бы высчитать дату отправки смс для конкретного пользователя
А что нам мешает отправить в данном случае время в unix и свой часовой пояс?

Кому "нам"? Отправить куда?


Ну и да, перечитайте, что ли, тот коммент, на который вы отвечали, и в котором написано "UTC и смещение", и объясните мне, чем это отличается от того, что вы сейчас предлагаете.

На сервер. Ни чем кроме формата unix, про это речь и шла и только. Я как бы и не спорил, а дополнил.

Отправить мало, надо сохранить. А в этот момент это превратится ровно в описанную мной схему.

Здравствуйте, в г. Кемерово часовой пояс UTC+7, а ваша система считает, что он — UTC+6, из-за чего возникает комичная ситуация в билете в виде 5-часового перелета Москва-Кемерово и 3-часового в другую сторону — Кемерово-Москва. Пожалуйста, обновите tzdata.
Добрый день.
Благодарим за обращение в Службу заботы о клиентах Kupibilet.ru.
Часовые пояса загружаются из международной системы бронирования.
На данный момент Кемерово стоит в часовом поясе UTC +6:
Возможно, изменением часового пояса произошло недавно, и данные еще не успели обновиться в системе бронирования.
В данном случае изменить часовой пояс вручную не будет корректно.
Мы учтем ваше сообщение и будем стараться решить эту проблему.
Всего доброго!
Часовой пояс UTC+7 в г. Кемерово используется с конца октября 2014 года.
Добрый день.
Возможно, и так, но данные в международной системе бронирования обновить с нашей стороны невозможно.
Мы уточняем, что можно сделать с этой проблемой.
UFO just landed and posted this here
Я в Сбер как-то написал, что в их смс о поступлении денег, неправильно указывается время. Скорее всего из-за неправильной зоны.
Ответ Сбера: Пусть владелец карты явится с паспортом и картой в то отделение банка, где получал карту.
Здравствуйте. Я не клиент банка.
Сбербанк Онлайн недоступен с моего домашнего IP-адреса x.x.x.x. Нет никакого ответа при попытке захода на online.sberbank.ru (страница пытается загрузиться бесконечно), также с этого адреса не приходят ICMP Echo Reply (ответы ping).
Предполагаю, это из-за того, что на этом IP-адресе поднята Relay-нода сети Tor. Relay-ноды не позволяют другим пользователям сети Tor пользоваться моим IP-адресом для выхода в интернет (такое возможно только с Tor Exit Node).
Если вы хотели заблокировать возможность входа в Сбербанк Онлайн через Tor, то вы сделали это неправильно.
Уважаемый клиент, ваше обращение рассмотрено. Предложение передано в ответственное подразделение и будет реализовано в случае соблюдения экономической рентабельности.
Только не надо забывать, что в UTCшной минуте не всегда 60 секунд. Бывает и 61 секунда, а теоретически — может быть и 59.

Поэтому для «всего и вся» лучше использовать монотонное время, например TAI или GPS Time, а в UTC — пересчитывать только для вывода

Кроме того, конвертируя из UTC вы становитесь заложником аккуратности и своевременности обновления tz database.

См. пост чуть выше — про актуальность tzdata/
UFO just landed and posted this here
Обе истории — и Славика и Володи — реальные события из моей жизни, объединённые в одно. Не всегда есть product owner и business analyst :)
UFO just landed and posted this here
Вопрос не к шапке, а к голове, которая придумала текст сообщения. Это мог быть Славик, мог быть штатный редактор, или дизайнер. Тут так сложилось, что Славик.
UFO just landed and posted this here
UFO just landed and posted this here
Это значит одно — на продукте экономят. Я ещё не видел, чтобы экономия на чём-то когда-либо привела к чему-то хорошему здесь и сейчас, особенно в разработке.

Знаете, я вот был таким Славиком, который получив такую задачу немедленно спросил "а что с часовыми поясами". И знаете, какой ответ я получил? Гробовое молчание и "ну делайте как-нибудь".

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

А толку-то от того, что она включилась? Ни ответа на вопрос, как надо, ни времени сделать правильно все равно не дадут.


Обратите внимание, что в вашем примере начальство одобрило. Почему вы думаете, что Славик будет знать, как надо, лучше начальства?

Если бы вместо даты и «Добро пожаловать на борт», Славик написал часовой пояс, время и «Автобус отправляется во столько-то», то времени он бы больше не потратил.

Здесь просто разница в том, поставил ли он себя на место клиента-получателя смс, или нет.
Обратите внимание, что в вашем примере начальство одобрило. Почему вы думаете, что Славик будет знать, как надо, лучше начальства?

Нипочему. Зависит от подхода. Начальству пофиг, Славик тоже не вник, никто не вник. А люди в итоге испытывают проблемы.

Эта СМС-ка — настоящая, от настоящего перевозчика. Кто там накосячил — Славик или его тимлид — не важно. Важно, что эта смс-ка вышла в продакшн именно такой. Из-за того, что на место клиента никто из всей цепочки себя не поставил.
Здесь просто разница в том, поставил ли он себя на место клиента-получателя смс, или нет.

Поставил. Его, как получателя, проблема часового пояса никогда не волновала, он всегда считал, что везде всегда указывается местное время. Так и сделал. Откуда ему взять часовой пояс, если в БД его нет?


Вам легко писать "времени он бы больше не потратил", но вы на самом деле не знаете, потратил бы он больше времени или нет. Иногда такие мелочи приводят к двухкратному увеличению сроков.


Из-за того, что на место клиента никто из всей цепочки себя не поставил.

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

Поставил. Его, как получателя, проблема часового пояса никогда не волновала, он всегда считал, что везде всегда указывается местное время. Так и сделал. Откуда ему взять часовой пояс, если в БД его нет?

Вам легко писать «времени он бы больше не потратил», но вы на самом деле не знаете, потратил бы он больше времени или нет. Иногда такие мелочи приводят к двухкратному увеличению сроков.

Просто написать «Прибытие в 01:00 по местному времени». Всё, времени потратится ровно столько, сколько нужно на написание шести слов. Всегда можно найти оправдание, вместо того, чтобы сделать хорошо. Правда может не хватить опыта и знаний на несколько слов с заботой?
Просто написать «Прибытие в 01:00 по местному времени».

Это же очевидно. Зачем писать очевидные вещи?


Всё, времени потратится ровно столько, сколько нужно на написание шести слов.

Нет, времени потратится столько, сколько нужно, чтобы найти того человека, который знает, в каком времени хранятся рейсы в БД. А перед этим — столько, сколько нужно, чтобы понять, что время вообще бывает не-местное.


Знаете, я тут как-то делал маленький GPS-трекер и с удивлением выяснил, что никто из постановщиков задачи ничего не знает про системы координат. Им просто не приходило в голову, что это нужная информация, хотя они занимаются задачей полгода.


Правда может не хватить опыта и знаний на несколько слов с заботой?

Да.

Это же очевидно. Зачем писать очевидные вещи?

Можно не писать очевидные вещи, тогда нужно хотя бы не писать дезинформацию. «Добро пожаловать на борт» — не очевидный показатель прибытия автобуса?
Да.

Грустно.
«Добро пожаловать на борт» — не очевидный показатель прибытия автобуса?

Нет, форма вежливости.

Форма вежливости не должна вызывать таких сомнений

У того, кто писал, и не вызывала.


Слушайте, у вас вообще там такая постановка задачи и такое количество допущений (например, в задаче не указано, когда должно отправляться сообщение), что вообще неизвестно, что реализовано правильно, а что — нет. И тут дело не в том, что не подумали о людях, а в том, что не умеют работать с требованиями. Я не удивлюсь, если в БД хранится местное время, но рассылка думает, что это время сервера, и рассылает по нему (это, кстати, прекрасно объясняет ситуацию "автобус в час, смс-ка в полночь" — разница во времени между Москвой и Вроцлавом ровно такая). И отсюда начинается такое змеиное гнездо вопросов "как правильно", что формулировка смс-ки будет там наименьшей проблемой.

Если углубляться в технические детали, вы правы. Допущений о причинах много, а результат реальный. И я хотел сделать ударение на результате используя абстрактный пример, в общем-то.

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

Можно сделать логичный вывод, что когда «думать не умеют», то «подумать о людях» тем более не получится

Э нет. "Подумать" — не означает "хорошо подумать".


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

UFO just landed and posted this here
Из этой же оперы: «пишите код сразу без багов».
>Это же очевидно. Зачем писать очевидные вещи?
Это не очевидно. Прежде чем такое написать, надо проверить, что остальная система действительно выдаёт числа во времени автовокзала, а не времени места покупки билета, времени датацентра, времени места рождения водителя автобуса или даже внезапно по времени Гринвича…
Это не очевидно.

Кому и что не очевидно?


Прежде чем такое написать, надо проверить, что остальная система действительно выдаёт числа во времени автовокзала, а не времени места покупки билета, времени датацентра, времени места рождения водителя автобуса или даже внезапно по времени Гринвича…

Я ровно про это и написал.

Это же очевидно.

Каким образом из этой смс очевидно, что отправление в 1:00? Из билета — да. А в смс это не написано.

Каким образом из этой смс очевидно, что отправление в 1:00?

А должно быть? В исходной задаче про время отправления нет ни слова.

Вы написали — "Это же очевидно. Зачем писать очевидные вещи?".


Зачем вы пишете "это же очевидно", если на самом деле это не очевидно?

"Очевидно", что сообщения в СМС достаточно. В смысле, разработчику очевидно, что оно удовлетворяет поставленной задаче.

Но не очевидно, что в смс указано местное время. Пользователи тупее, чем мы о них думаем. Для них нужно писать и то, что кажется нам очевидным.

Но не очевидно, что в смс указано местное время.

Кому не очевидно? Во-первых, там вообще не указано время. А во-вторых, разработчику вполне очевидно, что если указано, то местное.


Пользователи тупее, чем мы о них думаем.

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

По-хорошему — этот текст должны писать люди, далёкие от кода. Это текст. UX, если хотите. В вашем примере, от Славика требуется уметь абсолютно всё помимо программирования, и желательно сразу качественно. Но тот кто ставил задачу мог подумать о бренном, и ему вовсе не обязательно уметь для этого в PHP.
Безусловно. Но по итогу имеем только кривую смс-ку и не знаем, кто виноват.
если не знаем кто виноват — то значит виноваты архитектор (или тот кто его заменял, когда проектировал) данного бизнес-решения, и тот кто его туда назначил.
Поэтому на всякий случай обвиним программиста, а PS к статье напишем «ну может и не программист виноват, не важно».
Конкретно по текстам смс или писем — бывает, что разработчик не вправе изменить даже одну букву в тексте, который утвердил какой-нибудь совет директоров, на который разработчика, естественно не приглашали.
Кто там накосячил — Славик или его тимлид — не важно.

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

Думаю, за кадром были не только маркетологи, но экономисты. И они не забыли подумать про экономию символов при отправки смс, чтобы счет был поменьше. И Славику вообще было не разгуляться.
И они не забыли подумать про экономию символов при отправки смс, чтобы счет был поменьше.

Ну да, именно поэтому нельзя было одновременно написать дату приезда и "Добро пожаловать на борт". И маркетолог проявил лидерские качества волевым решением отбросив лишнее.

На дату, что забавно, символов хватило. А на время — нет. Хвала маркетологу за правильно расставленные приоритеты.

Кажется, на Славика хотят повесить не только реализацию задумки, но и обдумывание деталей и тонкостей реализации. Вот тут не ясно, зачем тогда таск оформили без участия Славика. Можно было всем вместе подумать. И у Славика поинтересоваться, как хранятся днные в БД, насколько усложнится задача при учёте часового пояса, и трудно ли выдавать это всё в коротком сообщении. Ах, да, кто в команде ездил межгородом?
Позиция автора мне понятна. Миру мир, дружба и жвачка.
Но давайте не будем полагаться на универсальных людей. Давайте сами научимся головой думать, и не ожидать от других, что они будут додумывать за вас, пока у вас тут более важные дела, чем у них. Пожалуйста.
Вообще это важная часть работы программиста — сообщать о тонкостях, выясненных в процессе разработки. Потому что из нее состоит около 50% работы.
У меня так и написано. Но постановщику в этом примере так не кажется.
А вот делаю сейчас проект один — там часть вещей завязана на дату/время. Так заказчик прямо говорит — часовыми поясами — не заморачиваться совсем, считать, что у пользователя стоит правильный часовой пояс на мобильном устройстве и что от сервера время в нем же прилетает.
У них клиенты именно из этого пояса. Правда ничего не мешает клиенту в поездке по России быть и то что из-за этого мобильное устройство покажет не совсем верные данные/не даст сделать операцию хотя должно — не учитывается.
считать, что у пользователя стоит правильный часовой пояс на мобильном устройстве и что от сервера время в нем же прилетает.

А есть какой-то другой вариант? Если у пользователя стоит неправильный часовой пояс — узнать правильный, в общем, нельзя.

Можно писать часовой пояс в сообщениях. Если пользователь в Мурманске, а у него в смске «Грузите апельсины бочками в 7:00 Asia/Yekaterinburg» (или «7:00 MSK-2») то он может что-то заподозрить.
Можно писать часовой пояс в сообщениях. Если пользователь в Мурманске, а у него в смске «Грузите апельсины бочками в 7:00 Asia/Yekaterinburg» (или «7:00 MSK-2»)

Пользователь, конечно, должен знать, в каком поясе время выводится, и в данном случае, с-но, неважно в каком поясе он по факту находится, т.к. время с указанным поясом фиксирует конкретный момент. Но проблема бывает еще и обратная — когда пользователь вводит данные. И если у него таймзона стоит не та, то возникнут проблемы.

Показать ему часовой пояс, в котором он вводит время, каким временем воспримет его программа.
UFO just landed and posted this here
Тут я даже больше скажу — у оператора «Мегафон — Поволжье» уже лет десять часовой пояс сети приходит как «Europe/Moscow». То есть, GMT+3.

Не то чтобы я очень сильно хотел в этом разобраться, правда, — на всех виденных мной мобильных устройствах за этот период я не видел «Europe/Samara» в списке доступных зон, а обновить на них (на андроиде) tzdatabase — поленился.

Так что, может, сам виноват. Но анекдот такой присутствует.
Если у пользователя стоит неправильный часовой пояс — узнать правильный, в общем, нельзя.
Если в телефоне стоит "[+] брать часовой пояс у сотового оператора", то он может иметь никакое отношение к реальности.
Мне 2ГИС отказывался показывать транспорт, потому что думал, что тот уже сегодня не ходит.
Речь немного про другое — все временные отметки что используются — по умолчанию считаются локальными. Таймзона/UTC/MSK-время вообще нигде не передается.
Пример 1 — если текущее время в интервале от 10 до 19 то приложение должно показывать часть данных одним способом, иначе другим. Если пользователь в другом часовом поясе — используется его локальное время для определения способа. Ладно, эти данные все равно фактически справочные для тех кто НЕ в этом поясе потому что жесткая привязка к местности.
Пример 2 — есть данные, валидные до (или после) определенной временной метки (тут уже и дата и время важны). Если они уже/еще не валидны — это надо отражать в интерфейсе. При этом использование этого набора данных — возможно и имеет смысл из любого часового пояса. Пользователь в принципе может принять решение на базе не совсем правильных данных.

Да, если пользователю не понравится — жалоба в поддержку (скажем так) и пользователю возможно компенсируют потери из-за неправильных данных. Может быть. После подачи заявления в письменном виде.
А нам потом прилетит запрос оценить сколько будет стоить сделать учет поясов.

А насчет того что нельзя узнать правильный пояс (хотя тут это не особо важно, с учетом что мы вообще не учитываем его). С чего это вдруг? GPS приложению в одном из режимов нужен, можно его же и использовать для определения локации (либо попробовать по IP и если подозрение что по IP не родной пояс — запускать GPS/просить пользователя дать разрешение если он еще не дал).

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 без перевода на летнее время. Кстати, уже вроде бы доказано, что ущерб от перевода на летнее/зимнее время превышает выгоду.

Непонятно, почему ответственный сервис придумывает и запускает в одиночку программист, без никакого тестирования. Программист — он пишет программы, он не может по умолчанию знать специфику всех на свете задач, и он человек, то есть делает ошибки. Про важность часовых поясов ему должны были напомнить на этапе постановки задачи, либо было у кого спросить в процессе. Ошибку/недоделку должно было выявить тестирование кем-то помимо него, до выхода обновления в люди. А тут получается просто история, как Славик стал крайним.
ответственный сервис
Ответственность данного сервиса — это стабильные и рабочие автобусы, в которых всё работает. Очевидно, ИТ-часть там только-только появилась.
UFO just landed and posted this here
Вот смотрю я в таск, перечитываю и не вижу упоминаний про часовые пояса, точного формата сообщения, или хотя бы критериев, которые не учёл наш «Славик». Может постановщика для разнообразия потыкать палкой? «Славик» свою задачу выполнил. И вообще, он — программист, а программисты исполняют, а не думают. Думают постановщики. Тестеры тестят. И вообще, вы там команда или каждый сам за себя? Если хочется хорошего продукта, надо всем его делать, а не на «Славиков» всё вешать и потом собак спускать. Из таких компаний уйдут все «Славики». А руководству отдуваться за три короба обещанного перед заказчиками.
«Исполняют, а не думают» — действительно, зачем кому-то думать. Менеджеры должны управлять а не думать, программисты — программировать а не думать, QA — проверять что написано в соответствии с требованиями а не думать, редакторы — писать тексты а не думать, дизайнеры — приду… эээ… рисовать картинки а не думать. А думать зачем, за это деньги не плотят, правда? А потом берешь условную смску или условный скайп и думаешь почему никто в большой компании не утруднил себя подумать секунд десять.
Выдираете слова из контекста. Суть в том, что думать о постановке задачи должен постановщик. В постановке описаны инструкции к исполнению, думать о которых программисту за других не должно быть профессиональной необходимости. Программист думает о коде. Тестер думает о возможных проблемных местах, сочиняет синтетические тесты. И да, каждый думает о своей части. Деньги платят за работу по профилю, верно? А не «ты же умный, догадаешься».
Т.е. программист это тот, кто берет инструкции к исполнению и печатает эти инструкции к исполнению, но уже на языке программирования? А зачем тогда программистам вообще думать?
Действительно. Зачем продумывать архитектуру и структуру баз данных, думать о поддержке и красоте кода, отлавливать баги, найденные тестерами. Зачем улучшать производительность? Зачем знать паттерны программирования, уметь командно разрабатывать и поддерживать продукт?
Вы серъёзно думаете, что программисты просто переписывают из текста в код?
А зачем тогда программистам вообще думать?

pewpew не прав, использовав слово "Думать". Вместо нее лучше взять фразу "Нести ответственность". Потому что думать на самом деле должны все. На каждом этапе разработки: На анализе, на разработке, на тестировании. Если они видят какой-то упущенный ньюанс, то должны сообщать о нем вверх по цепочке. Вот только принятие решения о том, как именно реализовывать — лежит не на разработке и не на тестировании. Эта ответственность на постановщике задач.


Делать крайним разработчика в этом случае неправильно.

Вообще говоря, нормальная практика — уточнять постановку задач.
Другое дело, что требовать это в 100% случаях нельзя, т.к. читать мысли никто не умеет.

Суть в том, что думать о постановке задачи должен постановщик.

Нет. Постановщик не знает о технических деталях. Например, про смс-гейт в задаче тоже ничего не написано, но Славик нашел гейт протестировал на номерах телефонов из нескольких стран. То есть видно, что он не 60 тыс получает. Часовой пояс может быть очень объемной задачей, но как минимум обратить на это внимание Славик может.

Например, про смс-гейт в задаче тоже ничего не написано

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

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

А оплачивать гейт будет тоже Славик? Вы не считаете, что все-таки распоряжаться напрямую финансами компании — несколько выходит за область ответственности Славика?

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


Программист, когда отвлекается, работает менее эффективно и допускает больше ошибок.

Он добавил в смс дату (видимо по своему самостоятельному решению), но не добавил время. Это ошибка. Про дату в ТЗ ничего не было, зачем он её добавил? Если решил, что так лучше, то значит мог подумать и про время. Я уж не говорю про время отправки смс. За час её отправлять? За два? За 15 минут? Все эти, фактически, не технические решения он принял. Между строк он прочитал или нет, я не знаю.


Лично я работаю программистом 10 лет и ни разу не было негативных последствий от того, что я лишний раз подумал. Сваливать на постановщика тоже разрешалось, но это затрудняло повышение ЗП, например. Но тут кому как. По моему опыту, за максимально четкие задачи намного реже хорошо платят (потому что платят за ответственность и за превращение нечёткого в четкое)

По вашим словам, постановщику надо урезать зарплату за нечёткость, а Славику добавить за многозадачность и инициативность (тот же подбор гейта). Опять же пост о том, что думать о деталях нужно.
А вот кому — об этом и спор.
Моё мнение совпадает с мнением классика:
Беда, коль пироги начнет печи сапожник,
А сапоги тачать пирожник,
И дело не пойдет на лад.
Да и примечено стократ,
Что кто за ремесло чужое браться любит.
Тот завсегда других упрямей и вздорней:
Он лучше дело все погубит,
И рад скорей
Посмешищем стать света,
Чем у честных и знающих людей
Спросить иль выслушать совета.

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

UFO just landed and posted this here
Не знаю, почему всем не понравился именно Славик, посыл-то совсем другой. Добавил пост скриптум с объяснением.
Не знаю, почему всем не понравился именно Славик, посыл-то совсем другой.

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

Вы неплохо язвите, но ошибаетесь. Это развлекательно-информационный пост для аудитории крупнейшего русскоязычного ИТ-ресурса. Нормально, что кому-то что-то не нравится. Не сравнивайте мягкое с тёплым.

Вы сначала пишете "не знаю", а потом пишете "нормально, что". Плохо, плохо сочетается.

Отлично сочетается. Гомосексуализм — это тоже нормально, но я не знаю, почему становятся гомосексуалистами.

Вот это было хорошо. Этот пост теперь — рекурсивный пример про "Славика". :)

Ну как же так — 'неважно, кто накосячил'? Есть ключевые должности, зона ответственности у каждого своя. Важно, что именно тимлид и тестеры ничего не заметили, или их даже не было вовсе.

Славик из вашего примера может быть в жизни на международном автобусе не ездил (это ещё надо поискать тех, кто ездил), или не знает, где и как работает компания, ему запросто могло даже в голову не придти, что часовой пояс важен.
эти участки могли быть написаны тремя разными Славиками: тот Славик, который в тег тайтл шлет — делал медленно, его таску перекинули на Славика-мидла, который ездит межгородом. А смс — сделал качественно и в срок третий Славик, и потом даже QA ничего не смог возразить — надпись согласно ТЗ.
UFO just landed and posted this here
Есть такое понятие как «размытие ответственности» чтобы его не было, каждый должен думать шире своей области ответственности

Обычно фразу «Ну да, я не сказал, но и ты не спросил, в итоге оба виноваты» можно слышать от самого виновного, пытающегося эту ответственность размазать.

А бывает наоборот — делает твоя большая контора большой сайт, тебе говорят — Славик, нарисуй кнопочку "ОК" во всплывающем окне.


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


Поэтому ты просто кнопку и стараешься выкинуть все это из головы, вместе с возможными проблемами Владимира и любым последствиями.

Самое простое решение проблемы: добавляем в СМС время и слова «по Москве».
Вот это решение одно из самых правильных с точки зрения юзабилити. Во-первых, из сообщения понятно, что программист подумал о часовых поясах, и учёл их. Во-вторых, сообщение «по местному времени» (как предлагает автор статьи) — абсолютно неинформативное, потому что сразу возникают вопросы, что за местное время имеется в виду. Время у меня на телефоне? В смс-центре? В точке отправления автобуса? А вдруг Славик посчитал местным время на сервере? Совсем хорошо было бы указать действительно местное время (для точки отправления), и тут же назвать часовой пояс.

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

Предлагаете человеку, который выезжает из Владивостока самому пересчитывать "время по Москве" во время Владивостока? Ненависть — это первое и единственное, что вы получите от такого пользователя. :)


И да, в транспортных услугах принято время указывать всегда по местному времени (по времени того города где происходит событие): выезд автобуса по времени в городе выезда, прибытие автобуса — по времени в городе прибытия.


Ну а если взрослый человек, который собрался проехаться на междугороднем автобусе (пересекая часовые пояса), не понимает что такое "местное время", то для него очень плохие новости. Может такому придется еще дополнительно объяснить значение слова "автобус"?

Возражу вам прямо по пунктам:
1) Человек, который живёт не в московском поясе, скорее всего имеет этакий встроенный навык перевода времени из местного в московское. Это связано с тем, что большинство написанных гиками (здесь это слово имеет негативную коннотацию) сервисов никак не учитывают временные пояса, либо делают это неправильно (что каждый раз мне подтверждают смски из банка).
2) В транспортных услугах принято время указывать когда как. Железная дорога, например, указывает всегда и везде московское время.
3) Речь не о взрослом человеке, который собрался проехаться, а о гике (том самом из п.1), создающем на коленке онлайн-сервис, и вполне возможно не имеющим никакого понятия ни о том, где находится место отправления, ни о том, где находится место прибытия, а о часовых поясах он просто читал как о модной фиче, не поддерживаемой во фреймворке (шутка, но с долей правды).
UFO just landed and posted this here

Знаете, да, что у каждой задачи есть простое, понятное и неправильное решение? Откуда вы возьмете время по Москве (и какая, кстати, от него польза получателю СМС)?

О, помню как раз делал проект, где нужно было вывести время «ровно через n часов от сейчас» (бронирование). Как раз в эту пору в большой прекрасной стране, где приложение, в основном использовалось, устроили реформу часовых поясов… а немного позже — еще одну.
На Хабре уже вроде все привыкли к несменяемому московскому часовому поясу на сайте.
Надо бы еще добавить, что если бы Славик был из другого региона, он бы обязательно вспомнил о часовом поясе. Почти всю жизнь я пробыл в Москве, практически никогда не возникало мыслей про часовой пояс. Год назад переехал в Пермь, ни разу не возникло ситуации, когда бы я про себя не задавал вопрос (это по местному времени или МСК?)
В регионах про часовые пояса знают практически все, хоть часто и путаются со сдвигами относительно других регионов (кроме Москвы).
И кстати, практически все уверены, что москвичи даже не в курсе понятия «часовой пояс».
И кстати, практически все уверены, что москвичи даже не в курсе понятия «часовой пояс».


Наверное эти практически все часто сталкиваются с москвичами, которые указывают время созвона, выхода в чат и т.п. без указания часового пояса. Да и шутка про «default city» не на пустом месте появилась. Моя практика, к сожалению, этот опыт подтверждает, и вопрос «это по московскому времени?» приходится задавать с завидной регулярностью.
В бытность мою инженером на Почте России, была там хохма про москвичку из головного учреждения, которая жаловалась, что в УФПС Камчатки никогда не берут трубку)))

Это косяк тестирования. Даже если не было требования, нормальный тестировщик должен был об этом подумать. Если в конторе нет qa, значит контора — говно, экономящая на том, на чем экономить нельзя и место ей на свалке истории.

Славик — хороший программист

Действительно — «программист» (в какой-то анекдотичной ретро интерпретации), а не разработчик — очень узкий специалист не имеющий представления ни о типах и представлении данных, ни о предметной области.
Такие люди были востребованы во времена становления ИТ, когда умные люди разрабатывали алгоритмы на бумаге, а специально обученные люди переводили это в понятный компьютеру код.
UFO just landed and posted this here
Да никто не говорит про экспертное знание предметной области. Но если бы он сколько-нибудь последовательно учился на разработчика, то сталкивался бы с разными форматами времени и понимал бы для чего они. А если он не понимает как время представлено в компьютере и для чего это нужно, то он и работу с ним реализовать не сможет.

Поменяем разработчика на продажника. Продажник должен уметь продавать. Зачем ему тратить время на изучение предметной области (а продаёт он, скажем, фиолетовых слонов), если лучше потратить время на изучение очередной техники эффективных продаж, например? Только вот что вы о нём подумаете, когда купите у него партию этих слонов, а потом выясните, что в вашем климате слоны быстро дохнут, и вам бы лучше подошли зеленые верблюды? Вряд ли посчитаете его профессионалом. Хотя он свою функцию выполнил на отлично — продал аж целую партию. А нюансы эти все — ну их нафиг, вдруг он решит сменить место работы и пойдёт торговать ежами. Зачем ему лишняя информация про всех этих слонов и верблюдов? И вообще, это вы плохо поставили задачу, и надо было сперва проконсультироваться с другим специалистом, который разбирается в слонах и верблюдах. Но не продаёт их. А если такого специалиста нет — контора говно.
Грустно это, я в своё время нескольких поставщиков сменил, пока не нашёл ребят, у которых менеджеры-продажники могут не только продать оборудование, но и дать техническую консультацию (в рамках разумного — за деталями конечно в техподдержку). Иначе это превращалось в пинг-понг: ищешь железку, подбор по параметрам — тех.специалист. Потом с артикулом к менеджеру. Менеджер говорит — нет в наличии. Обратно к технарю, находишь аналог. Менеджер озвучивает цену — не проходит по бюджету. Снова к технарю. Количество итераций порой выбешивало. Пока не нашлась фирма, где менеджеры знали, что они продают. Все заказы ушли к ним, даже если цена была выше чем у других. Люди не стали искать отмазы, а потратили время чтобы изучить второстепенную, казалось бы, область. Получили уважение, лояльность и профит.

менеджеров по продажам так называют. они не совсем продавцы (в привычном понимании этого слова), а на мой взгляд, не совсем менеджеры (если вспоминать, что manager это управленец)
а «продажник» довольно распространенный жаргонизм
UFO just landed and posted this here
Там часто получалось, что если я менеджерам ттх желаемые оставлял, еще дольше выходило, потому что редко когда с 1го раза было именно то, что нужно и по подходящей цене, поэтому проще было самому дозвониться, узнать у технарей, что мне может подойти, потом уже с готовым артикулом звонить менеджеру и выяснять цену, сроки, условия поставки.
С программистами вариант «хороший программист, но плохой спец. в предметной области» в одном лице не прокатит

вот и я о том же. если видишь какие-то потенциально проблемные места, или информации не хватает, подними этот вопрос, а не спеши быстрее задачу закрыть, утешая себя тем, что ты-то всё согласно описанию сделал
причем в большинстве случаев, это и тебе на пользу пойдет — руководитель(заказчик) увидят, что ты не просто обезьянка, которая может код написать согласно ТЗ (пусть даже хороший, читаемый, оптимизированный и т.п. код), но и понимаешь, чем ты вообще занимаешься. а с этого уже премии/повышения/уважение в конце концов будет
причем в большинстве случаев, это и тебе на пользу пойдет — руководитель(заказчик) увидят, что ты не просто обезьянка, которая может код написать согласно ТЗ (пусть даже хороший, читаемый, оптимизированный и т.п. код), но и понимаешь, чем ты вообще занимаешься. а с этого уже премии/повышения/уважение в конце концов будет

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


Люди — они такие бесконечно разные...

специально написал же
если видишь какие-то потенциально проблемные места, или информации не хватает, подними этот вопрос

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

И это проблема тех, кто воспринимает вопросы к ТЗ как признак глупости, а совсем не программиста.


Кстати, умение увидеть недостаток информации — это отдельный не так-то просто воспитываемый навык.

кто воспринимает вопросы к ТЗ как признак глупости

работа с такими начальниками/заказчиками — это сама по себе проблема :)

Давайте же с ними не работать, и пусть у компании из поста не будет никакого сайта, да.

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

на практике более реальный вариант — это уметь разговаривать с людьми и объяснять им свою позицию(в данном случае — откуда взялись вопросы, что они обоснованы)
на самом деле, людей, клинически не способных понять собеседника, очень мало

вообще моя лично позиция — «стараться избегать работать с м**аками», но не для всех подходит, у кого-то вариантов нет. но это не повод видеть проблемы и молча делать как есть. наверное. я так не могу точно
это уметь разговаривать с людьми и объяснять им свою позицию

Угу, добавили еще один навык к списку того, что обязан уметь программист.


но это не повод видеть проблемы и молча делать как есть.

Чтобы видеть проблему — нужен опыт. Не у всех он есть.

добавили еще один навык к списку того, что обязан уметь программист

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

Много что много для кого "актуально". Но не все это умеют, и не у всех есть возможность этому научиться. Понятно, что лучше быть умным, образованным, богатым, здоровым и желательно молодым, но вы понимаете же, да?

на автобусах не езжу, с людьми не общаюсь, сижу починяю примус пишу код, отстаньте от меня. какой-то стереотипный айтишник-интроверт-социофоб
у меня был именно такой коллега: велосипедист, не женат, девушки нет, хобби — оптимизирует компиляторы.
Текст подобных СМС для него вообще побоку — скопипастил из ТЗ и все. Зато код будет работать без выделения лишней памяти и умещаться в линейку кеша.
Ну вот в кейсе из поста информация в виде шаблона текста сообщения есть почти наверняка. Никаких решений принимать не нужно, просто скопипастить одну строчку текста. А о проблемности содержания этого шаблона можно подумать только хорошо представляя себе предметную область и кейс. А разработчик может просто технический специалист по отправке СМС и прочих нотификейшенов, у него десятки или сотни проектов из самых разных предметных областей которые постоянно просят отправлять те или иные сообщения по какому-то триггеру. А на автобусах если он и ездил, то исключительно на городских. Разве он должен думать о каких-то нюансах содержания сообщений? Особенно если не раз получал по голове за то что исправил «ашипка» из таска на «ошибка», чем загубил гениальную маркетинговую кампанию или выводил время в UTC с указанием этой зоны.
UFO just landed and posted this here
он сам за свою жизнь ни разу не ездил на автобусах между разными часовыми поясами, поэтому ему просто в голову не пришло, что такая проблема возможна

настраивал я один «программно-аппаратный комплекс». и сперва удивлялся, почему в инструкции от разработчиков ПО написано выставлять контроллер в очень неудобный с точки зрения остальных соединений режим. но инструкция есть, делаю. когда понимаю, что не выходит каменный цветок, звоню главному разрабу, объясняю ситуацию, прошу воспроизвести и сказать, как у них контроллер себя поведет. на что слышу ответ — какой контроллер? мы на эмуляторе тестировали.
7000р стоимость 1 железки. коммерческий софт, приносящий деньги. они не стали покупать железку. не стали разбираться, как выбрать оптимальный режим работы железки (из-за этого предлагали ставить 2 железки в случае, где прекрасно работает 1). забыли, что производитель порой вносит изменения в прошивку. они писали софт. ок, здесь проблема менеджмента, что задачу продумали криво, не рассмотрели возможные варианты. но ведь и софт еще падал просто от некорректного ввода данных — «так в инструкции же написано для чего это поле». черт, я не учился на разработчика, но разве валидация пользовательского ввода это то, что нужно отдельным пунктом указывать в ТЗ?
вобщем, там от руководства до рядовых разработчиков — всем много чего «в голову не пришло». до сих пор не могу этих ребят цензурными словами вспоминать
разве валидация пользовательского ввода это то, что нужно отдельным пунктом указывать в ТЗ

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

там валидации не было, они считали, что если в инструкции напишут «поле для ввода А», то никто не введет «Б». я почти уверен, что до сих пор оно так и осталось.

Ну да. Я вам ровно комментом выше объяснил, как такое может получиться.

Ещё в четырнадцатом году Николай К. поднимал этот вопрос перед ВТБшниками. :)
Известный баян, ищется любым поисковиком среди картинок по фразе «наши вашим машут»…
Припёр сюда эту картинку. Осторожно, маты
image
Вот бы ещё программерам из Тинькофф это прочитать. А то косяк с часовыми поясами уже год как не могут устранить
Передаю привет «спецам» из РЖД, так и не осилившим слово «часовой пояс». И из авиакомпаний, которые не могут на билете и на сайте всего-то подписать «по местному времени аэропорта отправления» или «аэропорта прибытия». Летишь на самолете через пару часовых поясов, потом у тебя пересадка на поезд — и у тебя есть время вылета+прилета самолета (2 часовых пояса), и время отправления поезда (вообще без указанного пояса, но при этом «зона +0» — это не UTC, а, почему-то, Москва).
РЖД освоили, хотя без косяков не обошлось
УВАЖАЕМЫЕ ПАССАЖИРЫ!
ЕСЛИ ВЫ ПРИОБРЕЛИ БИЛЕТ НА САЙТЕ ДО 21.06.2018 И ЕЩЕ НЕ СОВЕРШИЛИ ПОЕЗДКУ, ПРОСЬБА ЗАЙТИ В ЛИЧНЫЙ КАБИНЕТ И СКАЧАТЬ БЛАНКИ БИЛЕТОВ ПОВТОРНО.
ДЛЯ ПОЕЗДОВ ДАЛЬНЕГО СЛЕДОВАНИЯ ОТПРАВЛЕНИЕМ С 1 АВГУСТА 2018 Г. В БИЛЕТАХ УКАЗЫВАЕТСЯ МЕСТНОЕ ВРЕМЯ ОТПРАВЛЕНИЯ И ПРИБЫТИЯ, БУДЬТЕ ВНИМАТЕЛЬНЫ!
«Никогда не было, и вот опять!»

В РЖД, емнип, раньше было явно написано на билетах "Время отправления местное, время прибытия — по Москве". Может быть, не совсем удобно, но однозначно.

Да-да, это было особенно удобно, когда билет на электричку покупаешь в часовом поясе, отличном от +03:00.
UFO just landed and posted this here

Тогда я бы не запомнил. Но это было лет 8 назад.


Поиск картинок в гугле находит по крайней мере 1 билет, в котором время прибытия местное:



Возможно, "время отправления и прибытия московское" пишут для поездок по РФ, или за прошедшее время что-то поменялось.

UFO just landed and posted this here
Для работы с географическими реалиями в разных часовых поясах очевидная хорошая практика — хранить дату/время в базе данных в UTC как единой точке отсчёта с указанием необходимого смещения в каждом конкретном случае.

Зачем переводить в UTC, если можно в БД хранить время с указанием пояса?

Какого пояса? :)

Того, в каком дата пришла. Не важно, в каком. Может быть, они все в разных поясах будут.
Важно, что дата/время вместе с указанием пояса фиксирует конкретный момент времени.

А пояса на планете нарезаны раз и навсегда

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

Да-да, конечно. А часовые пояса (не смещения от GMT) нарезаны (по глобусу) раз и навсегда.

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

Нужно жить не только прошлым, но и о будущем думать: автобус отправляется из Энска ровно в полдень по местному времени. Как вы определите в базисе 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 года или границы поясов сменили, или зимнее время отменили, или ещё что. А он как раз ищет куда бы купить билет в разрыв между поездами или самолётами.
Сколько я путешествовал, всегда и везде время отправления-прибытия указывалось местное, ещё ни разу не видел иного.
Поездами РЖД не пробовали ездить?
Т.е. не прошло и, погодите, лет десяти (!!!), как они мужественно победили гемор, ими же созданный?

Премию-то им дали, хотя бы?
UFO just landed and posted this here
UFO just landed and posted this here

Просто используйте библиотеку, где все эти тонкости учтены.

Все учесть невозможно. Какие-то решения принимать всё равно придётся. И это хороший случай, когда видишь неопределённость и сознательно принимаешь решение, а не не видишь и считаешь что-то очевидным.


Вот интересный кейс с одного из проектов: путешествие во времени в прошлое. Пользователь совершает операцию, она фиксируется по местному времени точки продажи, он летит с Дальнего Востока в Москву быстрее "солнца" и пытается совершить ещё одну операцию по местному времени другой точки продажи.

UFO just landed and posted this here
Привет Google за то что таблица таймзон обновляется только новой прошивкой (так сложно было реализовать обновление через PlayStore? для WebView ж сделали). Ну или рутом + TimeZone Fixer.
Shit happens. То что один из пользователей наткнулся на багу это не проблема. Проблема если компания на это не отреагировала. В мире радужных единорогов, компания могла бы «компенсировать доставленные неудобства». К сожалению от факапов не застрахован никто. Помните, яндекс диск удалял файлы. Или как «облака» выпадали осадками без возможности восстановить данные. Таких примеров полно. Если пострадавший один, и после этого багу пофиксили, то респект такой компании. Если бага висит в трекере пол года и никто не чешется, ну это бизнес по русски, детка.
Представляю, что будет с межпланетными перелетами…
На первых этапах явно по времени ЦУП хотя постойте, возможна ведь ситуация когда у одного КА — ДВА ЦУП (у МКС той же)

А так что будет… некоторые авторы уже продумали данную проблему -:)
– Посуди сама, чем я могу помочь? – Врач развела руками. – Удостоверение спеца сделать несложно. Ты боец-спец, в этом я уверена. Но я обязана вначале удостоверить твою личность, милая. А у тебя нет удостоверения личности.

Ким молчала.

– Джанет, один выход есть, – осторожно сказал Алекс. Его голос дрогнул. Он вступил на неверную почву подтасовок, чего никогда не любил.

– И какой же, капитан?

– Вы делаете Ким сертификат бойца-спец. Потом…

Джанет нахмурилась, покачала головой, но Алекс уже продолжал:

– Потом мы с Ким идем в ближайший регистрационный центр. И заключаем временный брак – по сертификатам спецов. Их для этого достаточно.

– Понимаю, что достаточно. Но я не стану делать фальшивый сертификат.

– Подождите, Джанет! После заключения брака Ким получает новые документы, уже на имя Ким Романовой… примешь мою фамилию, Ким?

Ким смотрела на него широко раскрытыми глазами, еще ничего не понимая.

– Никаких запросов в банк данных. Туда отправится новая информация, ну и что? Мало ли в галактике девочек по имени Ким?

– Но я не могу нарушать закон! – Даже невозмутимости Джанет имелись границы.

– А вы его не нарушите. Мы немедленно возвращаемся на корабль, и вы вписываете в документы данные ее нового удостоверения личности. Допустим, я попросил вас провести срочную сертификацию, пообещав предоставить удостоверения позже. Вы ведь могли пойти на крошечное нарушение порядка?

– Ни один компьютер не пропустит такого нарушения. Как можно писать, что сертификат спеца выдан на основании документа, который еще не получен? Или вы умеете путешествовать в прошлое, капитан?

– Умею.

Джанет замолчала.

– Время, по которому живет корабль, устанавливает капитан. Я могу поставить часы по Гринвичу. По Великому Пекину. По времени космопорта приписки. По времени планеты пребывания. Понимаете? Какое время указывается в ваших документах?

– Время корабля…

– Вот видите? Со стороны любого проверяющего все будет выглядеть так, словно… – Алекс перевел дыхание. – Капитан корабля оформил брачный союз с членом своего экипажа, после чего ей была проведена генетическая экспертиза, статус бойца-спец подтвержден…

– Подождите! – Джанет взмахнула рукой. – Вы серьезно, капитан? Это теоретические построения, или…

– Или. Все капитаны пользуются этим трюком. В общем-то о нем прекрасно знают в профсоюзе, но закрывают глаза.

– Пользуются? Чтобы протащить в экипаж девчонок без документов? – с иронией спросила Джанет.

– Нет. Чтобы выгадать для экипажа лишние премиальные, провести левый контракт, прикрыть самовольные отлучки… для множества правонарушений. Это невозможно проконтролировать, Джанет. Планеты живут по своему времени. Корабли – по своему.

По лицу Джанет прошла тень.

– Капитан, я давно смирилась с тем, что Империя – безумный и анархичный мир. Но подобного безумия не ожидала.

– Вы поможете нам, Джанет?

– Я ведь буду знать, что закон нарушен, – тоскливо сказала женщина.

– Да, будете. Но я верю Ким. Иного пути легализоваться в обществе у нее нет. Если вы откажете, то фактически убьете девочку. А вы – врач.

Джанет вздохнула. Посмотрела на Ким – напрягшуюся, застывшую в ожидании ее ответа.

Знаю пользователей, которые, увидев строку "6 сентября 2018, 18:00 MSK" способны возмутиться "А что это за буковки? А нам это зачем, мы же в одном поясе живём? Вы же для нас софт пишете, а не для себя!"

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

Небольшое детективное расследование:
Ещё на скриншоте чека рядом с временем указана "*", но автор замазал, что написано в сноске.
Я решил проверить, что там нет надписи: "* Время отбытия и прибытия — локальное" и погуглив «билеты на автобус рига-москва» сразу нашёл подходящий сайт ecolines.net. Я не очень хотел покупать билет, чтобы посмотреть замазанный текст рядом с "*". Поэтому сразу написал в «онлайн-саппорт» и попросил пример как выглядит их билет. Как и автор я не получил ответа онлайн, но через 5 минут я получил сообщение, где могу посмотреть пример шаблона. Я думаю если автор написал бы заранее в саппорт (а не через 3 минуты после предполагаемого отъезда автобуса) и спросил про время отправления, то получил бы ответ.
Пример билета ecolines.net, который ну очень похож на билет автора
"* время прибытия указано ориентировочно"
image

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

Итак, по факту имеем 1 смс-сообщение без конкретики (которое можно трактовать по разному) и как автор раскрутил себя от 0 до 100 за 1 секунду.
PS: все мы люди и некоторые из нас склонны чаще накручивать себя на совершенно ровном месте — лично я предпочитаю приехать на вокзал на час раньше и играться в телефоне, а не думать, что я могу опоздать из-за пробок.
Скинул вам оригинал билета в личку.
На самом сайте при выборе рейса я получил уведомление, что между выбранными пунктами есть разница во времени в 1 час, так что можно считать, что они умеют работать с таймзонами и учли их.

Мне такого не показывали, к сожалению.
atamanenko, спасибо. В нём та же информация, что и в моём примере взятом с сайта:
"* Время прибытия указано ориентировочно".
К сожалению, у перевозчика на сайте в Часто задаваемые вопросы нет информации о том что время в билете — локальное, зато (как уже ниже писал Slavik7) это есть в соседнем пункте Образец билета:
Дата и время отправления первой поездки (местное!).
Вот как раз в ЧаВо я и не нашёл, да.

Я вам больше того скажу, на сайте есть [страница], где черным по белому написано "Дата и время отправления первой поездки (местное!)."

lair, да я за полчаса до вас уже оставил комментарий с текстом и ссылкой об этом :)
Я вообще не понял причем тут PHP??? Уберите пожалуйста не портите репутацию языку, ваша проблема с PHP никак не связана так еще и код отправки sms не на php, зачем вы так? Славик с таким же успехом может быть: Обычный JS программист, Обычный JAVA программист, Обычный Python программист, Обычный RUBY программист и так далее… УБЕРИТЕ PHP!!! Пускай он будет так же абстрактный программист, но никак не PHP, хватит проблемы криворуких кодеров и тимлидов сваливать на языки программирования!!!
Так PHP и не при чем, я разве что-то плохое о нем говорил? :)
Да, вы сказали Славик php программист, тут читают много людей включая не программистов которые могут прочитать подобное а потом рассказывать начальникам про Славика и PHP. Тем более если PHP не причем, зачем вообще его упоминать? Сделайте Славика абстрактным программистом, в вашей статье от этого ничего не поменяется. Просто так же как кто то не подумал про часовые пояса и с точки зрения пользователя это доставляет проблемы, так же и упоминание PHP там где он вообще не причем может создать ложное впечатление о нем. Поймите меня правильно, я PHP программист и мне не нравится когда его без дела обвиняют во всех грехах человечества (вы не обвиняете но создаете ложное впечатление ибо идет упоминание о PHP и программисте который накосячил именно на PHP...) ибо проблема описанная в статье применима к любому языку программирования но об этом почему то умалчивается.
PHP тут причём. Как Xperia и безукоризненность дизайна не включает PHP без молчаливого обновления, нет, БЕЗ МОЩНОГО ПРИКРЫТИЯ БРЕНДА, что ЭТОГО, В ОТЛИЧИЕ ОТ PHP, НЕ МОЖЕТ ПРОИЗОЙТИ.
Володя решил, что нужно обязательно убедиться, что указали именно местное время. Перекликал весь сайт — нету.

А Володя смотрел правила на сайте? Я вот зашел на Nлайнз сайт и сразу же нашел там следующее:

Время отправления – местное время, указанное в билете как самое раннее возможное время отправления автобуса, которое может изменяться на более позднее по независящим от перевозчика причинам.

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

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

Достаточно по одному любому маршруту.

Только сейчас заметил ваш логин :)
«Добро пожаловать на борт»… еще не прибывшего автобуса.
Ключевая ошибка в смс, а не эти ваши таймзоны.

Вот только автобус-то, по мнению программиста, уже прибыл — просто СМС отправлена не в то время. Из-за таймзон, ага.

Вот только автобус-то, по мнению программиста, уже прибыл

Это обычное смс-напоминание о скором отправлении автобуса, рассылается заблаговременно, примерно за 1-2 часа до отправления.

… или нет. Там такая задача, что никто не в курсе, что именно рассылается. А как я уже писал, в конкретном случае (отправление в час по Вроцлаву, смс-ка пришла в полночь по Вроцлаву, то есть в час по Москве) очень похоже на то, что хотели отправлять именно в момент посадки. Но это все додумки, конечно.

Спасибо, подзабыл уже.
Актуальная переделка баяна про серийного программиста Джона.)
я НЕ АБСТРАКЦИЯ.

Т.е. пример с Славиком (славиком), т.е. человеком, работающим до довольства(ия) славой, примеряющим к себе, как теплей, и всегда одевающий носок тем местом, которое больше греет (наизнанку), это не абстракция, а реальная модель, использующаяся для построения неконфликтных обществ (у девушек «голова не болит», «готовит вкусно», «ест мало» — точно так же). АКТИВНАЯ позиция. Т.е. девушка «голова не болит», это Ваш заочный психиатр (если Вы заметили некоторые поправки в вашей психике,). Не от оскорбительного, не заботящегося, а от возможной конструктивной жизненной позиции, как девушка милой тебе, с «голова не болит» (время уделит ВСЁ).

НЕ НЕ у них не очень всё получается. Поэтому помогаем им мы.

Ваше не ФСБ. Ваш не офицер. Ваш Славик.
К сожалению, ничего не понял из вашего комментария.
А пыхните в окно плиз, пусть другие люди тоже порадуются. Думаю дом накрыть хватит.
В дверь не проссы. сь. Или не с спроса? Так объясняют ФСБ свою позицию. Про вульгарно могут и не Вы, и тоже грамотно. А вот писать без папирос и вагона в грязи, прошу. Ибо не всё то ложь, что Вы в том дым уже прошедший.
Кто-то нейросеть тестит что ли.
Актуальная проблема, между прочим. Куча молодых программистов, совсем не думающих о всякого рода мелочах, тонкостях и нюансах.

А где бы их научили думать-то?

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

Ну то есть вы сначала не даете людям возможности научиться думать, а потом видите проблему в том, что они не умеют думать. Прекрасная методика, да.

Немного не так. Денежно уже преувеличил. Я склонен, чтоб люди учились на своих ошибках, если как Славик, не хотят анализировать ситуации.

"Славик" хочет анализировать ситуацию. Он даже анализирует ее — как умеет. Просто его умения оказалось недостаточно. Где он должен был научиться лучше, чтобы вы не записывали его в "молодых программистов, не думающих о"?


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

Он должен был научится там, где учился на программиста. Там же учат думать, анализировать. Если этих знаний недостаточно, то он должен их развивать. Просто в данном примере, ситуация достаточно критическая. Могут пострадать люди (в моральном и материальном плане) и ущерб от такой «недодумки» для работодателя может быть очень большим. А теперь давайте представим, что Славик разрабатывает, например систему навигации в авто. Нет, не банально, как в Америке, дама заедет в озеро. А все посложнее. Например, завесим шину CAN. И в критический момент (вероятность меньше 0.001 но НЕНУЛЕВАЯ), ЭУР клинит или АБС срабатывает с задержкой. И все, в лучшем случае машина разбита. В худшем — увы. К чему все это: если разрабатывает человек что то, то он должен продумать все ситуации, даже запуск кота в микроволновку. Если человек не продумал и не посовещался (Славик то ни к кому не обратился за помощью или консультацией — верно ведь?), он понадеялся, что он опытный. И это его ошибка.
Он должен был научится там, где учился на программиста.

То есть, есть такое магическое место, где этому учат. Прекрасно. Зачем вы тогда вообще имеете дело с теми программистами, которые этому не научились?


Если этих знаний недостаточно, то он должен их развивать.

Каким же образом, если вы не даете ему возможности?


если разрабатывает человек что то, то он должен продумать все ситуации

Это немножко невозможно. Именно поэтому сложное ПО разрабатывают команды.


Славик то ни к кому не обратился за помощью или консультацией — верно ведь?

Нет, неверно. Есть фраза "начальство одобрило", означающая приемку.

То есть, есть такое магическое место, где этому учат. Прекрасно. Зачем вы тогда вообще имеете дело с теми программистами, которые этому не научились?

Я таких программистов воспитываю, именно под свои цели и задачи. Да, свои методы, но поверьте, они работают.
Каким же образом, если вы не даете ему возможности?

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

В большинстве — да, сложное ПО разрабатывают команды. Но, везде есть исключения.
Нет, неверно. Есть фраза «начальство одобрило», означающая приемку.

Мы имеем в виду разные ситуации.
Я таких программистов воспитываю, именно под свои цели и задачи.

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

Специально для этого в автомобиле делают две шины CAN — пусть он своей навигацией повесил шину, но все что на ней висит — никак на управление автомобилем повлиять не может.
Полностью с вами согласен. Например, на Iveco Stralis 3 шины CAN, и если завесить основную, то работоспособность узлов сохраняется (можно завести двигатель и в ручном режиме переключать скорости и машина едет на «аварийке»). НО, возьмем машину Subaru Outback 4 поколения 2010 года выпуска. Шина диагностическая CAN. Если не соблюдать протокол передачи, или начать «спамить» на шине — то возникает ошибка, из за которой периодически «клинит» электроусилитель руля.

Почему вы упорно не видите, что провтык в этой истории произошел на этапе бизнес-анализа и постановки задачи? То есть на тех этапах, на которых разработчика еще могут вообще не задействовать. Информировать пользователя о часовых поясах — это определенно бизнес-задача, а не техническая. И ее должны были решить до того, как давать такой функционал в разработку.

Хм. Действительно. Рассмотрел это все с точки зрения внедрения готового продукта(изделия). А не с точки зрения предварительного анализа. Еще раз подтверждение того, что ситуацию нужно рассматривать со всех точек зрения.

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

Согласен. Те, кто так не делает, не являются плохими разработчиками. Но к себе и своим детям отношусь очень критично. Возможно, даже крайне. Каюсь, так же воспитываю своих подчиненных, но в более мягкой форме. И это работает.
господа, если сервис глобальный — юзайте гмт

ловить юзера и его часовой пояс — идея совсем не очень…
тут уж пусть сам пересчитывает время, пока ничего с этим поделать нельзя

и да, если сервис глобален регионально — то используйте например московское время

все остальное в общем-то приведет к ошибкам так или иначе
UFO just landed and posted this here
UFO just landed and posted this here

Ну тут нужно получить время от пользователя (чтоб понять, какой часовой пояс у него в системе). Раз это онлайн-календарь — значит это вполне себе можно сделать. А дальше часть ответственности за правильную логику работы с "ночным временем" уже ложится на самого юзера. Если поставил себе на компе/смартфоне некорректное время, то и уведомления будут некорректно показываться. Но при этом все равно будут за 3 часа до события.

господа, если сервис глобальный — юзайте гмт [...] все остальное в общем-то приведет к ошибкам так или иначе

Расскажите это глобальному TripIt, который прекрасно справляется с местным временем.


Ну и я уже выше приводил пару примеров, которые "юзайте гмт" вообще никак не решаются.

глобальному TripIt, который прекрасно справляется с местным временем.
вы этот tripit тестили что ли? % покрытия тестами какой, не подскажите?
и каковы результаты?

а тогда может лучше жевать?
вы этот tripit тестили что ли?

Лучше. Я им много лет пользуюсь. Вот только что пришла очередная смс-ка с предупреждением о чекине, вовремя и с правильным временем.

ну отлично)
только какое отношение имеют ваши 0.00000...01% смс-ок ко всему сервису целиком?

А мне пофиг на сервис целиком. Мне важно, что я, как пользователь, ни разу не видел у него ошибки часовых поясов.

Почему именно московское? Что в нем такого особенного для глобального сервиса?


А вот узнать какой часовой пояс в пункте отправления или назначения — не так уж и сложно, и от самого пользователя (его местоположения, наличия "автокоррекции" времени на его телефоне по GPS и вообще времени, которое у него выставлено на телефоне) не зависит. Вполне себе можно такое время сформировать и отправить пользователю. Не забыв дописать "по местному времени". :)

> А вот узнать какой часовой пояс в пункте отправления или назначения — не так уж и сложно

Не всегда. Границы часовых поясов меняются, смещения в них меняются, названия тоже меняются. А все участники того же процесса автобусной перевозки не факт, что своевременно учтут изменения.
UFO just landed and posted this here
UFO just landed and posted this here
хм… странно даже в коде есть «ticket->loc». то что Славик дятел и не стал дальше разворачивать эту тему — наверно проблемы его начальника.

вроде то что время всегда указывают местно — это уже аксиома для тревел сайтов. или есть дятлы которые так не делают?
… обычный ПХП-программист. Не джуниор и не сеньор, а парень из тех, кого раньше называли «веб-мастерами».

и которые теперь сами себя называют «full stack»
UFO just landed and posted this here

Articles

Change theme settings