Umówiłem się z nią na @833
2017-06-17
Internet od zawsze był przestrzenią przyjazną eksperymentom i wynalazczości. I zgodnie z nazwą mojej ulubionej kolumny w „Młodym Techniku” — „Pomysły genialne, zwariowane i takie sobie”1 niektóre przetrwały nie tylko próbę czasu, ale stały się budulcem współczesnego świata. Inne wypadły z rąk twórców i z hukiem roztrzaskały się na betonowej posadzce rzeczywistości.
Pomysł, o którym chciałem Wam dziś opowiedzieć, tańczy na granicy tych trzech przymiotników. No, chyba, że będziemy patrzeć z punktu widzenia przyjęcia rozwiązania na rynku, wtedy nawet „takie sobie” to raczej laurka niż opis stanu faktycznego. Popatrzmy na niego oczami cyber-futurystów roku pańskiego 1998, kiedy Internet miał już pierwszy zarost.
Najważniejszym zadaniem sieci było połączyć nas wszystkich i stworzyć Globalną Wioskę, gdzie wektory wiedzy, różnorodności i zaradności dodadzą się rodząc sytuację, w której co drugi obywatel będzie Królem Filozofem. Dziś z perspektywy czasu widać, że idea wioski się spełniła: kumoterstwo, plotkarstwo i disko polo ma się dobrze.
Zostawmy jednak cynizm.
Kiedy zaczęliśmy pracować w globalnej wiosce okazało się, że wszyscy tyrają w systemie trójzmianowym. Idziesz do piekarza, a on śpi, gdyż jest na innym kontynencie, choć metaforycznie, na wyciągnięcie e-ręki. Strefy czasowe podstawiły nogę rozpędzającej się, globalnej, ekonomii. Próba umówienia się z kimś wymagała powtórki z geografii, ustalenia stref czasowych wszystkich uczestników, oraz tego, czy używają obecnie czasu letniego czy zimowego.
Swatch wpadł na pomysł jak rozwiązać ten nowy — na tę skalę — problem, sprzedając przy okazji niezłą górę zegarków. Swatch Internet Time!
Francja, po rewolucji, wprowadziła czas decymalny, oparty na 10 godzinach, które składały się z 100 minut po 100 sekund. Jako że ciężko się patentuje rozwiązania, które są jasno opisane w podręcznikach do historii, Swatch dokonał lekkiej modyfikacji: doba składała się z 1000 .beat, nie posiadały one strefy czasowej, więc były uniwersalne dla świata. Wystarczało, że umówisz się z nią na @833, weźmiesz od szefa akonto i wszyscy będą wiedzieć, kiedy to jest! Proste!
Oczywiście to nie zmieniło niczego w fakcie, że podróżujemy dookoła kuli plazmy i ludzie nadal śpią gdzieś kiedy zegarek Swatcha „wybija” @833.
Ja jednak byłem urzeczony pomysłem i choć nie miałem kontaktów z nikim, kto potrzebowałby się ze mną umówić w różnych strefach czasowych, dumnie włączyłem renderowanie ilości .beat na belce systemowej mojej Amigi. Próbowałem nawet nieśmiało podawać tak sformatowaną godzinę różnym znerdziałym znajomym, ale oni patrzyli tylko na mnie jak na dziwaka. Dwadzieścia lat później sytuacja nie uległa zmianie w tej kwestii.
Swatch nie był zadowolony z tego, że ich wynalazek jest tak beztrosko implementowany przez różnych obszarpańców, co pewnie nie mają zegarka ni garnituru i zrobił to, co każde lajfstajlowe korpo, zaczął ścigać „nielegalne dzielenie”, aż do momentu w którym nikt nie chciał się w to bawić. Trudno wymagać żeby każdy, z kim się umawiasz, miał zegarek tego samego producenta.
Dodatkowo Swatch, chcąc zapewne podbić wartość swojego wynalazku, wprowadził swoją własną strefę czasową, Biel/Switzerland, od której liczony był czas bazowy dla Internet Time.
Ktoś mógłby zapytać, czy jest jakaś merytoryczna różnica między umawianiem się na godzinę wg. UTC a tym oto wynalazkiem? Jest jedna, oczywista. Godzina z prefiksem @ jest bardziej e-cyber.
I tak pomysł genialny, bo stymulował fantazję o Jednym Świecie, zwariowany, bo ciężko wyobrazić sobie coś tak radykalnie dobrego żeby cały świat entuzjastycznie przytaknął, ale też taki sobie, bo w przeciwieństwie do innych zdobyczy epoki internetowej nie dane mu było oderwać się od cyca korpowładców.
A piszę o tym dlatego, że wracając wczoraj, lekko intelektualnie zmęczony imprezą, przypomniałem sobie o tym moim zegarku na belce Amigi i wymyśliłem, że dopiszę sobie to samo, tylko jako element belki tmuxa. Sama procedura jest trywialna.
- Weź obecną godzinę
- Policz ile sekund minęło od północy
- Ponieważ w 24h jest 86400 sekund, a chcemy 1000 jednostek, dzielimy to przez 86.4 i odrzucamy resztę
- Dzwoniący telefon to prawnicy szwajcarskich zegarmistrzów
- No division is illegal, hack the planet
Natychmiast po napisaniu kodu zdałem sobie sprawę, że jestem o godzinę za daleko. Jasne, muszę przekręcić datę na ich strefę czasową. Programowanie z uwzględnieniem stref czasowych przechodzi atrofię za każdym razem, gdy przestaję o nim myśleć. Poszedłem więc czytać dokumentację, ale za nic na świecie nie mogłem się dobrać do, nieoficjalnej przecież, strefy czasowej Swatcha.
Rzutem na taśmę odkryłem, że jest on równoważny UTC+1, dodałem więc brzydką arytmetykę na datach. Jestem pewien, że zrobiłem coś źle. Apple dwa lata wydawało iOS z błędem, który przestawiał budziki użytkownikom, a Microsoft miał firmware w Zune, które spowodowało, że jeden dzień nie dało się włączyć odtwarzacza. Skoro oni nie wiedzą, co robią, to ja też sobie pozwolę.
Efekt działania na terminalu:
#!/usr/bin/env python3
from datetime import datetime, timedelta
import pytz
import sys
def swatch_time(datetime_object = None, timezone_literal = 'Europe/Warsaw'):
reset_clock = {
'hour': 0,
'minute': 0,
'second': 0,
'microsecond': 0
}
if not datetime_object:
datetime_object = datetime.now()
if not datetime_object.tzinfo:
timezone = pytz.timezone(timezone_literal)
datetime_object = timezone.localize(datetime_object)
# Biel TZ is a unrecognized TZ that can be expressed as UTC+1
# Thanks, Swatch
swatch_timezone = pytz.timezone('UTC')
datetime_object = datetime_object.astimezone(swatch_timezone) + timedelta(hours=1)
midnight = datetime_object.replace(**reset_clock)
time_delta = datetime_object - midnight
if time_delta.seconds == 0:
# don't divide against zero
return 0
return int(time_delta.seconds / 86.4)
if __name__ == "__main__":
print("@{}".format(swatch_time()))
- Dział ten nazywałem też „Nygusem”, gdyż numery z lat 80-tych miały pana leżącego niedbale dookoła liter loga, standardowym zawołaniem bojowym w weekendy było „Babcia, poczytaj mi «Nygusa»”. ↩