Это сайт — моя персональная записная книжка. Интересна мне, по большей части, история, своя жизнь и немного программирование.

Часы без JavaScript

Часы без JavaScript

Сделал крошечные аналоговые часы, которые работают без JavaScript. Кто первый догадается как они работают, тот молодец.

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

36 комментариев
dinoel 2011

Хе-хе, косяк в том что часы показывают серверное, а не клиентское время :) Дальше всё понятно =)

dinoel 2011

Точнее, стартуют они с текущего сервернеого времени.

dinoel 2011

А можно узнать, зачем такой изврат нужен? Видимо побочный продукт чего-то полезного?

Евгений Степанищев (bolknote.ru) 2011

Комментарий для dinoel:

Не, ну можно сделать старт и с клиентского. Правда без JS это на порядок сложнее. Вот я и не стал заморачиваться :)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для dinoel:

А можно узнать, зачем такой изврат нужен? Видимо побочный продукт чего-то полезного?

Неа, этот изврат — побочный эффект того, что мне хочется развлечься :)

dinoel 2011

=) а как с клиентского времени без js? Сразу как-то не придумывается. на сервер браузер ни время, ни таймзону не шлёт.

Максим Зотов (maxim-zotov.livejournal.com) 2011

На пути к счастью лежит ограничение на 32 секунды задержки между двумя кадрами, придется делать фиктивные кадры :)

Максим Зотов (maxim-zotov.livejournal.com) 2011

Комментарий для dinoel:

на сервер браузер ни время, ни таймзону не шлёт.

http://www.maxmind.com/app/locate_my_ip
Шлёт IP, знаем город — знаем таймзону.

Максим Зотов (maxim-zotov.livejournal.com) 2011

Комментарий для Евгения Степанищева:

Неа, этот изврат — побочный эффект того, что мне хочется развлечься :)

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

Евгений Степанищев (bolknote.ru) 2011

Комментарий для maxim-zotov.livejournal.com:

На пути к счастью лежит ограничение на 32 секунды задержки между двумя кадрами, придется делать фиктивные кадры :)

А откуда там ограничение в 32? По описанию ( http://www.w3.org/Graphics/GIF/spec-gif89a.txt ) там одна сотая секунды и Delay Time в unsigned int. То есть максимальное значение будет 65535 / 100 = 65,5 секунд, нет?

Хотя, конечно, вопрос в том не забывают ли авторы декодеров указать unsigned в нужном месте…\

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

Максим Зотов (maxim-zotov.livejournal.com) 2011

Комментарий для maxim-zotov.livejournal.com:

знаем город — знаем таймзону.

Еще одну ссылку упустил на список таймзон по городам:
http://www.maxmind.com/timezone.txt

Евгений Степанищев (bolknote.ru) 2011

Комментарий для maxim-zotov.livejournal.com:

Не, это какая-то плохая ссылка. Правильная вот: http://www.twinsun.com/tz/tz-link.htm

agonych (agonych.livejournal.com) 2011

забавно

Максим Зотов (maxim-zotov.livejournal.com) 2011

Комментарий для Евгения Степанищева:

А откуда там ограничение в 32

Да, торможу. Неправильно посчитал, потом еще неправильный эксперимент провел, должно быть 655 секунд (65535/100). А вот Gimp не позволяет ввести больше 65 секунд.

Не, это какая-то плохая ссылка

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

andr24-at-front.ru 2011

Это просто анимированный gif

SiMM (mr-simm.livejournal.com) 2011

Хорошо, что секундной стрелки нет (или в данном случае, скорее, чаосовй) — грузить 12 мегабайт ради часиков — не комильфо :)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для mr-simm.livejournal.com:

Это всего лишь 12 страниц сайта «Хабрахабр» :) И всего в 12 раз медленнее :)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для andr24-at-front.ru:

Это просто анимированный gif

Ну я и не обещал, что это будет работать при помощи магии :)

drucha 2011

У меня стабильно стартует с 12:00. Сейчас 13:47, Москва :)

Максим Зотов (maxim-zotov.livejournal.com) 2011

Комментарий для drucha:

У меня стабильно стартует с 12:00

Агрессивный кеш. Опера, наверное? :)

Хотя в скрипте тоже не мешало бы явный запрет на кеширование выдавать (expires, no-cache).

Тима Люмин 2011

Стартует с 12:00. Firefox.

dinoel 2011

У меня теперь тоже с 12.00 кстати.
Получить таймзону по ип конечно может, а что делать если у меня кривая таймзона/отстают часы ?
Первое что приходит в голову для получения времени клиента на сервере без яваскрипта  — какой нить хитрый изврат с куками и expires. ну типа, поставить 24 куки с expires от 0 до 24 , и посмотреть что придёт на сервер )

andr (andr.mp) 2011

Андроид, старт с 12.

Евгений Степанищев (bolk.moikrug.ru) 2011

Это была бага, поправил.

Максим Зотов (maxim-zotov.livejournal.com) 2011

Комментарий для dinoel:

а что делать если у меня кривая таймзона/отстают часы

Так это как раз хорошо, что на сайте пользователю показывается правильное время, независимо от кривости установок на компе пользователя. Разумеется, если предположить, что точность определения таймзоны по IP 100%, что, конечно, не так.

dinoel 2011

Комментарий для maxim-zotov.livejournal.com:

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

Евгений Степанищев (bolk.moikrug.ru) 2011

Комментарий для dinoel:

Я не написал такую штуку ещё из-за такой эгоистической причины, что не знаю быстрого способа выяснить по IPv4 часовой пояс пользователя, придётся ходить в интернет, если сервис, куда я буду ходить, будет медленно отвечать, то меня заDDoSят.

Хранить всю базу geoip и апдейтить её для обычной игрушки мне не хочется.

Максим Зотов (maxim-zotov.livejournal.com) 2011

Комментарий для dinoel:

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

мы не понимаем друг друга. У меня нет равным счетом ничего про javascript.
Но, в общем, неважно, в итоге мы всё равно говорим об одном.

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

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

Я сейчас не могу придумать какого-нибудь серьезного примера веб-приложения, когда требуется знать время пользователя. Серьезней часиков на страничке. Но допустим, что такие задачи есть :)

Евгений Степанищев (bolk.moikrug.ru) 2011

Комментарий для maxim-zotov.livejournal.com:

Я сейчас не могу придумать какого-нибудь серьезного примера веб-приложения, когда требуется знать время пользователя. Серьезней часиков на страничке. Но допустим, что такие задачи есть :)

Есть, конечно. Показывать в ЖЖ время постов и комментов в часовом поясе пользователя.

dinoel 2011

Комментарий для maxim-zotov.livejournal.com:

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

Евгений Степанищев (bolknote.ru) 2011

Комментарий для dinoel:

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

Евгений Степанищев (bolknote.ru) 2011

Комментарий для dinoel:

Под time-сервисом я имею ввиду NTP или Daytime (RFC 867), впрочем ещё есть несколько серверов времени, просто они встречаются реже.

Максим Зотов (maxim-zotov.livejournal.com) 2011

Комментарий для dinoel:

ну посмотрим мы его таймзону по ип, но это не то.

не понял, почему не то. Мы узнаем точное местное время пользователя.

Задача: получить время которое установлено на компьютере пользователя

Если я могу узнать точное время пользователя, зачем мне знать какие-то фиктивные циферки?

dinoel 2011

Если я могу узнать точное время пользователя, зачем мне знать какие-то фиктивные циферки?

А зачем рисовать часы без javascript? Just for fun! :)

Евгений Степанищев (bolknote.ru) 2011

Комментарий для maxim-zotov.livejournal.com:

не понял, почему не то. Мы узнаем точное местное время пользователя.

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

Максим Зотов (maxim-zotov.livejournal.com) 2011

Комментарий для Евгения Степанищева:

Не совсем.

Да, само собой. Вопрос лишь в сравнении недостоверности времени из JavaScript и по IP. Вдруг получится так, что по IP процент ошибок меньше :)

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