sexta-feira, 13 de fevereiro de 2009

1234567890 segundos da chamada era POSIX!

Sei que está todo mundo falando sobre isso e que eu vou ser só mais um, porém, além de ser uma data/momento/instante memorável, talvez algumas pessoas tomem conhecimento só em aqui, nesse humilde "rabisco tecnológico".

Enfim...

(By wikipédia)

Apesar do calendário gregoriano facilitar o raciocínio cronológico para os humanos quando se deseja realizar comparações lógicas ou cálculos com datas em computadores este tipo de calendário acaba dificultando o trabalho.

Por exemplo, para nós, saber o que aconteceu primeiro, se foi algo em 10/04/1977 12:45:15 ou algo em 10/03/1976 13:09:12 é algo quase automático mas para resolver isso em um computador todos os 6 campos teriam que ser analizados independentemente, apesar disso ser realizado quase que instantâneamente não deixa de ser um trabalho extra que o processador poderia evitar se fizesse uso de outro formato de data. Imaginemos um banco de dados com milhares de registros e o processador recebendo um comando para colocar tudo em ordem cronológica, se pudermos fazer as comparações com uma única operação por registro ao invés de 6 operações/registro o tempo final também tenderá a ser 6 vezes menor.

Outra situação seria: quanto dá a data 16/09/2004 23:59:58 UTC mais 12 dias, 10 horas e 40 minutos? A complicação neste tipo de cálculo está em corrigir o overflow conforme o processamento em etapas vai sendo feito. Ou seja, ao somar os 40 minutos na data teríamos 95 minutos, antes de somar as 10 horas precisaríamos corrigir este valor, portanto o minuto seria 35 e a hora somaria 1, porem 24 horas também precisa ser corrigido para 0 o que somaria 1 no dia, resultando em 23/08/1980 0:35:12, somente então somaríamos as 10 horas, faríamos as correções, somaríamos os dias e novamente faríamos correções. Vê-se facilmente que é um trabalho repetitivo que deveria ser evitado.

Para resolver problemas do tipo dos citados acima e para unificar um formato de data foi criada a marca temporal UNIX, que é uma forma de calendário amplamente utilizada em sistemas computacionais principalmente os baseados no sistema operacional UNIX.

Ela é simplesmente um contador que teve seu valor zero associado com a data 01/01/1970 00:00:00UTC, e que é incrementado a cada segundo, assim:

  • 01/01/1970 00:00:00 UTC -> 0
  • 01/01/1970 00:00:25 UTC -> 25
  • 01/01/1970 00:01:00 UTC -> 60
  • 01/01/1970 01:00:00 UTC -> 3 600
  • 02/01/1970 00:00:00 UTC -> 86 400
  • 31/12/1998 23:59:58 UTC -> 915 148 798
  • 01/01/1999 00:00:01 UTC -> 915 148 801
  • 16/09/2004 23:59:58 UTC -> 1 095 379 198

Uma vez representadas no formato acima, as datas se tornam um pouco complicadas para o raciocínio humano mas são manipuladas muito facilmente pelos computadores, por exemplo, no caso da comparação entre datas com uma única operação o processador sabe se a data 17658546778 é maior ou não que a data 1765223546, e no caso dos cálculo seria algo como (usando o mesmo exemplo: 16/09/2004 23:59:58 UTC mais 12 dias, 10 horas e 40 minutos):

1095379198+12\cdot 86400+10\cdot 3600+40\cdot 60=1096454398

que é uma operação facilmente realizada pelos processadores, também em etapas, mas em menor quantidade que no caso do calendário gregoriano.

Tah, mto tri, mas e daí? E daí que o dia que isso entrou em vigor no dia 1 de janeiro de 1970, o marco inicial da era UNIX. O nome se deve ao fato de esta data, 01/01/1970 00:00:00 UTC, ser o marco zero do sistema de calendário usado pelo sistema operacional UNIX. Também pode ser chamada de era POSIX.

E hj, como você pode ver no exemplo abaixo "comemoraremos" 1234567890 da era UNIX ou era POSIX.

root@tiago-desktop:~# date -d @1234567890
Sex Fev 13 21:31:30 BRST 2009

Para tirar um screenshot você pode fazer um get timestamp:

tiago@tiago-desktop:~$ date
Sex Fev 13 14:03:55 BRST 2009
tiago@tiago-desktop:~$ date +%s
1234541037
tiago@tiago-desktop:~$

Talvez não seja a melhor maneira, mas dá para registrar, se conseguir.

Foi criada uma página para facilitar o acompanhamento:

http://1234567890.chalkley.org/

Tenho um alias do root para o meu email no postfix, vou tentar por o cron para fazer isso pra mim e guardar o email como registro "histórico". Criei um script com o seguinte conteúdo:

#!/bin/bash

sleep 30
date +%s
date

Colequei ele para executar às 21:31, ele vai esperar 30 segundos, fazer o registro e enviar para o meu email.





Nenhum comentário:

Postar um comentário