terça-feira, 28 de abril de 2009
Web Analytics: Além da implementação
segunda-feira, 27 de abril de 2009
Data da Páscoa, como calcular?
A apresentação mais interessante (e concisa) que achei para a data da Páscoa foi no material do prof. Kepler de Souza Oliveira Filho, do Departamento de Astronomia e Astrofísica, Instituto de Física, da UFRGS:
A páscoa judaica (Pesach), que ocorre 163 dias antes do início do ano judaico, foi instituída na epoca de Moisés, uma festa comemorativa feita a Deus em agradecimento à libertação do povo de Israel escravizado pelo Faraó, o rei do Egito. Esta data não é a mesma da Páscoa Juliana e Gregoriana.
O dia da Páscoa cristã, que marca a ressurreição de Cristo, de acordo com o decreto do papa Gregório XIII (Ugo Boncampagni, 1502-1585), Inter Gravissimas em 24/02/1582, seguindo o primeiro concílio de Nicéia de 325 d.C., convocado pelo imperador romano Constantino, é o primeiro domingo depois da Lua Cheia que ocorre em ou logo após 21 de março, data fixada para o equinócio de Primavera no hemisfério norte.
Entretanto, a data da Lua Cheia não é a real, mas a definida nas Tabelas Eclesiásticas, que, sem levar totalmente em conta o movimento complexo da Lua, podia ser calculada facilmente, e está próxima da lua real.
De acordo com essas regras, a Páscoa nunca acontece antes de 22 de março nem depois de 25 de abril.
Com base nas regras, foram desenvolvidos ao longo do tempo diversas técnicas e algoritmos para o Cálculo da Páscoa, ou Computus em inglês (calculation of the date of Easter), em cada ano do calendário cristão, em especial no Calendário Gregoriano utilizado no Brasil e muitos outros países latinos.
Relaciono a seguir as melhores referências que coletei a respeito:
Cálculo da Páscoa, verbete na Wikipédia em Português, apresentando tabela e algoritmos para cálculo da data da Páscoa em cada ano.
Computus, verbete na Wikipedia em inglês, apresentando história, teoria, métodos tabulares e algoritmos.
A Data da Páscoa, por prof. Kepler de Souza Oliveira Filho, Astronomia e Astrofísica, UFRGS; inclui uma tabela com as datas da Páscoa já calculadas para os anos de 1980 a 2024.
Como Calcular a Data do Domingo de Páscoa, por Arlindo Correa, 2001; inclui script que dado um ano, informa data da Páscoa, Carnaval, Dia da Ascensão, Pentecostes e Corpus Christi.
Cálculo do Dia da Páscoa, por prof. Roberto Cabral de Mello Borges, incluindo uma Tabela de dias da Páscoa, Carnaval e Corpus Christi de 1951 a 2078.
Cálculo do dia da Páscoa e de outras datas móveis, por José Luís Carneiro, 2009; inclui uma planilha para cálculo de datas móveis para baixar.
The Date of Easter e programa para cálculo de Datas da Quarta-feira de Cinzas (Ash Wednesday) e Domingo de Páscoa (Easter Sunday), em inglês, Naval Meteorology and Oceanography Command, Marinha dos Estados Unidos.
A Perpetual Easter and Passover Calculator, em inglês, por R.H. van Gent, Institute for History and Foundations of Mathematics and the Natural Sciences, 2003.
Dada a data da Páscoa, temos as seguintes celebrações, todas em dias da semana fixos:
Terça-feira de Carnaval ocorre 47 dias antes da Páscoa; celebração pagã;
Quarta-feira de Cinzas (Ash) ocorre 46 dias antes da Páscoa; início do período da Quaresma (Lent) [1], [2];
Quinta-feira da Semana Santa ocorre três dias antes da Páscoa; celebração da ultima ceia de Jesus Cristo com os doze apóstolos;
Domingo de Páscoa (Easter); celebração da Ressurreição de Jesus Cristo;
Domingo de Pentecostes ocorre no 50º dia desde a Páscoa;
Domingo da Santíssima Trindade é o domingo seguinte ao de Pentecostes;
Quinta-feira de Corpus Christi (Corpo de Deus) ocorre no 60 dias após a Páscoa; celebração da presença do corpo de Cristo na Eucaristia.
sexta-feira, 24 de abril de 2009
Garbage First Collector da Sun Elimina Amplamente a Baixa Latência/Alto Consumo
Postado por Charles Humble, traduzido por Ricardo Almeida em 24 Abr 2009 02:59 PM no InfoQ
O Garbage Collector da Sun chamado Garbage First (referenciado de G1) é o novo garbage collector de baixa latência planejado para substituir CMS no Hotspot da JVM. É um coletor estilo servidor, dirigido a máquinas multi-processamento com muita memória. Existem duas grandes diferenças entre CMS e G1. Primeiro que o G1 é um coletor com compactação. Compactação, um processo o qual a vida de objetos são movidas para espaços de memória livre no fim da pilha (heap) de modo que outros espaços tornam-se uma área contínua de memória livre, é importante em aplicações de execução longa porque é inevitável que a pilha irá se fragmentar no decorrer do tempo. G1 compacta suficientemente para evitar completamente o uso de listas livres de granularidade fina para alocação, o que simplifica consideravelmente partes do coletor e sobretudo elimina questões de potenciais fragmentações. Bem como a compactação, G1 oferece pausas de coleta mais previsíveis do que pode obter com o coletor CMS e permite usuários configurar as pausas do coletor. Essa determinística forte dá ao G1 algumas características de um coletor de Tempo Real (Real-Time) verdadeiro, porém não é fortemente Tempo Real, uma vez que fatores como agendamento do Sistema Operacional ainda significam que pausas não podem ser garantidas. Para o desenvolvedor entretanto consideravelmente mais fácil de usar do que produtos Java de Tempo Real desde que o código existente é capaz de ter performance melhorada sem necessitar de qualquer alteração em código. G1 usa algumas técnicas interessantes, baseadas na marcação global de informação e outras métricas, para priorizar regiões para coleta de acordo com a eficiência da Garbage Collector. Um artigo InfoQ anterior fornece mais detalhes técnicos.
Em um podcast recente,, James Gosling destacou a importância do G1 para certos tipos de aplicações Java de larga escala, semelhante a intercâmbios financeiros, que são caracterizados por grandes quantidades de dados vivos na pilha e considerável paralelismo no nível de thread, e são executados frequentemente em processadores multi-core:
"...o segredo profundo sobre muito dessas aplicações Java é que eles não usam banco de dados realmente. Ao invés de banco de dados eles usam muita RAM e empurram o garbage collector igual maluco porque eles não podem se dar ao luxo de tocar o disco sempre. Quando você está fazendo muitos, muitos milhares de transações por segundo, é bom manter tudo na RAM, usando tabelas hash, obtendo muitos núcleos focados nas transações na medida do possível, e geralmente ter grande questões sobre latência de operação.""
Gosling fala da diferênça entre consumo e determinismo. Tipicamente um garbage collector é otimizado para um ou outro. Um garbage collector otimizado para consumo é ideal para executar tarefas de segundo plano muito longas, onde pausas para garbage collector não são um problema para terminar a tarefa de segundo plano o mais rapidamente possível. Inversamente, se você está trabalhando em um sistema iterativo semelhante a uma aplicação web, então uma baixa latência do garbage collector é geralmente a melhor escolha. Gosling mostra o ponto que essas diferenças também existem em outras partes da JVM e que geralmente a JVM é otimizada para consumo. Realmente:
""Isso acontece todo lugar onde existe algoritmos que reorganizam algo. Então ter uma tabela hash - todos pensam que uma tabela hash tem tempo constante de inserção e tempo constante de remoção, o que é falso. O tempo de inserção é constante até ter que recolocá-lo no hash e depois uma insersão vai levar um bom tempo.""
Permitindo usuários especificar que o garbage collection não consuma mais que x ms de tempo, o G1 pode tentar manter pausas de collection como pequenos e não frequentes como for necessário para a aplicação, mas não tão lento como to diminuir consumo ou aumentar desnecessariamente a pegada. Dado que o garbage collector tem uma das áreas onde o ganho lento de latência é mais visível, o G1 deve oferecer benefícios significantes para desenvolvedores Java Enterprise. Está disponível no release do Java 6 update 14 e o time do Hotspot da Sun está extremamente vivo para ter feedback e bug reports dos que adotam cedo.