Часы без JavaScript
Сделал крошечные аналоговые часы, которые работают без JavaScript. Кто первый догадается как они работают, тот молодец.
Правда я их ускорил в 60 раз (а то очень уж скучно смотреть), поэтому это скорее секундомер, но стартуют они с текущего времени.
Хе-хе, косяк в том что часы показывают серверное, а не клиентское время :) Дальше всё понятно =)
Точнее, стартуют они с текущего сервернеого времени.
А можно узнать, зачем такой изврат нужен? Видимо побочный продукт чего-то полезного?
Комментарий для dinoel:
Не, ну можно сделать старт и с клиентского. Правда без JS это на порядок сложнее. Вот я и не стал заморачиваться :)
Комментарий для dinoel:
Неа, этот изврат — побочный эффект того, что мне хочется развлечься :)
=) а как с клиентского времени без js? Сразу как-то не придумывается. на сервер браузер ни время, ни таймзону не шлёт.
На пути к счастью лежит ограничение на 32 секунды задержки между двумя кадрами, придется делать фиктивные кадры :)
Комментарий для dinoel:
http://www.maxmind.com/app/locate_my_ip
Шлёт IP, знаем город — знаем таймзону.
Комментарий для Евгения Степанищева:
Но если вдруг куда-то выйдет в полезное, то нужно существенно уменьшать размер, записывая в отдельные кадры не полные картинки, а только разницу.
Комментарий для maxim-zotov.livejournal.com:
А откуда там ограничение в 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:
Еще одну ссылку упустил на список таймзон по городам:
http://www.maxmind.com/timezone.txt
Комментарий для maxim-zotov.livejournal.com:
Не, это какая-то плохая ссылка. Правильная вот: http://www.twinsun.com/tz/tz-link.htm
забавно
Комментарий для Евгения Степанищева:
Да, торможу. Неправильно посчитал, потом еще неправильный эксперимент провел, должно быть 655 секунд (65535/100). А вот Gimp не позволяет ввести больше 65 секунд.
В ней соответствия регионов по MaxMind обозначениям таймзон, а вот описания таймзон брать уже по «правильной» ссылке, но обычно их брать не нужно, если в операционке уже есть функция получения смещения по обозначению таймзоны.
Это просто анимированный gif
Хорошо, что секундной стрелки нет (или в данном случае, скорее, чаосовй) — грузить 12 мегабайт ради часиков — не комильфо :)
Комментарий для mr-simm.livejournal.com:
Это всего лишь 12 страниц сайта «Хабрахабр» :) И всего в 12 раз медленнее :)
Комментарий для andr24-at-front.ru:
Ну я и не обещал, что это будет работать при помощи магии :)
У меня стабильно стартует с 12:00. Сейчас 13:47, Москва :)
Комментарий для drucha:
Агрессивный кеш. Опера, наверное? :)
Хотя в скрипте тоже не мешало бы явный запрет на кеширование выдавать (expires, no-cache).
Стартует с 12:00. Firefox.
У меня теперь тоже с 12.00 кстати.
Получить таймзону по ип конечно может, а что делать если у меня кривая таймзона/отстают часы ?
Первое что приходит в голову для получения времени клиента на сервере без яваскрипта — какой нить хитрый изврат с куками и expires. ну типа, поставить 24 куки с expires от 0 до 24 , и посмотреть что придёт на сервер )
Андроид, старт с 12.
Это была бага, поправил.
Комментарий для dinoel:
Так это как раз хорошо, что на сайте пользователю показывается правильное время, независимо от кривости установок на компе пользователя. Разумеется, если предположить, что точность определения таймзоны по IP 100%, что, конечно, не так.
Комментарий для maxim-zotov.livejournal.com:
Не, тут прикол именно в том чтобы показать пользователю его время без использования яваскрипта :) Практической пользы никакой , но интересно.
Комментарий для dinoel:
Я не написал такую штуку ещё из-за такой эгоистической причины, что не знаю быстрого способа выяснить по IPv4 часовой пояс пользователя, придётся ходить в интернет, если сервис, куда я буду ходить, будет медленно отвечать, то меня заDDoSят.
Хранить всю базу geoip и апдейтить её для обычной игрушки мне не хочется.
Комментарий для dinoel:
мы не понимаем друг друга. У меня нет равным счетом ничего про javascript.
Но, в общем, неважно, в итоге мы всё равно говорим об одном.
Практическая же польза в том, чтобы определить правильное время пользователя. Показать его самому пользователю, или записать себе, или еще как-то что-то сделать, в зависимости от задачи.
Проблема в том, что времени, установленном на компьютере пользователя, доверять нельзя, времени, полученному из JavaScript. У пользователя на компе не то что часовой пояс может быть кривым, год может стоять другой.
Я сейчас не могу придумать какого-нибудь серьезного примера веб-приложения, когда требуется знать время пользователя. Серьезней часиков на страничке. Но допустим, что такие задачи есть :)
Комментарий для maxim-zotov.livejournal.com:
Есть, конечно. Показывать в ЖЖ время постов и комментов в часовом поясе пользователя.
Комментарий для maxim-zotov.livejournal.com:
:) Я думаю что если у пользователя время неправильное, то получить правильное время пользователя на сервере это что-то из области фантастики :) ну посмотрим мы его таймзону по ип, но это не то.
Задача: получить время которое установлено на компьютере пользователя (даже если оно неправильное) на сервере, без использования яваскрипта.
Комментарий для dinoel:
Первое, что приходит в голову, соединиться с IP, с которого пришёл запрос и попробовать найти там какой-нибудь time-сервис. Ненадёжно и человек может быть за прокси.
Комментарий для dinoel:
Под time-сервисом я имею ввиду NTP или Daytime (RFC 867), впрочем ещё есть несколько серверов времени, просто они встречаются реже.
Комментарий для dinoel:
не понял, почему не то. Мы узнаем точное местное время пользователя.
Если я могу узнать точное время пользователя, зачем мне знать какие-то фиктивные циферки?
А зачем рисовать часы без javascript? Just for fun! :)
Комментарий для maxim-zotov.livejournal.com:
Не совсем. IP, бывает, не соответствуют фактическому расположению пользователя, когда провайдеры не очень-то аккуратны. Кроме этого, есть прокси. Так что точность относительная.
Комментарий для Евгения Степанищева:
Да, само собой. Вопрос лишь в сравнении недостоверности времени из JavaScript и по IP. Вдруг получится так, что по IP процент ошибок меньше :)
Ну а если два метода дают одинаковые данные, то больше уверенности, что и время у пользователя верное, и по IP мы попали куда надо.