domingo, 26 de maio de 2013

Atualizando o caminho dos arquivos numa listagem de hash

Recentemente, eu estava com uma estrutura de arquivos em diversos diretórios e subdiretórios e todos eles já estavam com os respectivos hashes MD5 armazenados em um arquivo texto (hash.md5) no diretório raiz. Bastava executar o comando "md5sum -c hash.md5" na raiz para a ferramenta verificar a integridade de todos os arquivos.

Entretanto, resolvi reorganizar a localização dos arquivos, mudando os arquivos de subdiretórios, criando diretórios novos etc. Eram os mesmos arquivos só que agora estavam em caminhos de diretórios diferentes. Com isso, após estas mudanças, o arquivo texto com os hashes MD5 também precisava ser atualizado para os novos caminhos dos arquivos.

Algumas soluções poderiam ser aplicadas. Uma seria recalcular todas as somas MD5, gerando novamente os hash de todos os arquivos, mas esta solução iria expor novamente o disco rígido em um uso intenso. Eram muitos gigabytes de dados armazenados. Outra solução seria editar o arquivo texto com os hashes, alterando cada linha para o novo caminho do respectivo arquivo. Mas era um arquivo com 1650 linhas e fazer isso manualmente torna impraticável, levaria uma eternidade.

Contudo a segunda era a solução que deveria ser aplicada, afinal os hashes dos arquivos já estavam gerados e só precisava atualizar os caminhos. O que poderia executar esta tarefa rapidamente? Simples, um script no interpretador de comandos.

A seguir, está o código do script que realizou a atualização dos caminhos, de cada arquivo, nas linhas do arquivo texto com os hashes MD5. É um script para o interpretador de comandos Bash, do Linux.

O que ele faz é, primeiramente, uma cópia de segurança do arquivo texto com os hashes. Depois será lida cada linha deste arquivo, onde serão armazenados em variáveis o hash (incluindo os espaços) que está no início da linha e o nome do respectivo arquivo, ignorando o caminho antigo. Então será realizada uma busca pelo arquivo e seu caminho atual é armazenado em outra variável. Por fim, as strings com o hash e o caminho atual são concatenadas e direcionadas para um novo arquivo texto com os hashes MD5.


#!/bin/bash
#

cp -f hash.md5 hashantigo.md5

while read LINHA
do

  HASH=`echo "$LINHA" | cut -c 1-34`
  ARQUIVO=`echo "$LINHA" | sed 's/^.\{34\}//' - | sed 's/.*\///' -`
  NOVODIR=`find */ -iname "$ARQUIVO" -type f -print`
  if [[ $NOVODIR ]]
  then
    echo "$HASH""$NOVODIR" >> novohash.md5
  fi

done < hashantigo.md5

mv -f novohash.md5 hash.md5

echo "Feito!"



Este script torna o processo muito mais rápido e menos traumático no acesso ao disco. Nesta reorganização, eu também separei os arquivos em volumes de aproximadamente 4.4 GB (capacidade de DVDs) pois foram gravados em mídias óticas. Cada volume tinha o seu "diretório raiz" com uma cópia do arquivo texto original com os hashes e o script. O script foi executado para cada volume. Por isso a necessidade do if no script, alguns arquivos não estavam no respectivo volume.

São diversos comandos do Bash, internos e externos, utilizados neste script. As páginas manuais de cada um deles podem ajudar no entendimento de sua execução.

sábado, 18 de maio de 2013

Conversão entre coordenadas geográficas e UTM

O sistema de coordenadas geográficas expressa a posição de um ponto na superfície esférica do globo. Um exemplo desta coordenada são os valores -23,653492 graus de latitude e -47,235703 graus de longitude. O sistema de coordenadas UTM expressa a posição de um ponto em uma projeção plana do globo terrestre. Um exemplo desta coordenada são os valores X 271960,000 (Easting), Y 7382350,200 (Northing), Fuso 23 (Zone), Hemisfério Sul e Elipsoide WGS84 (datum).

As coordenadas podem ser convertidas de um sistema para o outro. Existem uma série de fórmulas, longas e volumosas mas não difíceis de compreender, que convertem uma coordenada do sistema de coordenadas geográficas para o sistema de coordenadas UTM e vice-versa. As fórmulas são baseadas nas propriedades do elipsoide, na geometria do elipsoide de revolução, que serve como referência no posicionamento geodésico.

Com o intuito de tornar este artigo o mais simples possível na execução da conversão, a teoria sobre a geometria do elipsoide de revolução não está demonstrada, muito menos a origem das fórmulas. Ainda, este artigo não trata da coordenada de altitude.

Uma informação importante nos valores de uma coordenada no sistema UTM é sobre o elipsoide de referência. O elipsoide de referência serve para representar matematicamente a superfície terrestre, na forma de um elipsoide de revolução, e assim executar os cálculos e definir as coordenadas. Um dos elipsoides de referência, ou datum, mais usados é o WGS84 e é o que está sendo usado neste artigo. Conhecer o datum é importante porque, nos cálculos, as fórmulas adotam alguns valores (parâmetros) constantes e estes valores estão definidos no datum.

Assim, por exemplo, pela coordenada UTM apresentada no primeiro parágrafo deste artigo, vemos que o datum é o WGS84. Desta forma, nos cálculos desta coordenada são necessários os parâmetros do elipsoide WGS84. O relatório técnico número 8350.2 (3ª edição) da Agência Nacional de Informação Geoespacial, do Departamento de Defesa dos Estados Unidos, define os valores (parâmetros) constantes do elipsoide WGS84, que são:

- Raio Equatorial (semi-eixo maior do elipsoide) em metros:



- Achatamento polar:




Destes parâmetros, derivam-se as seguintes constantes geométricas, que também são utilizadas nos cálculos:

- Raio Polar (semi-eixo menor do elipsoide) em metros:



- Primeira Excentricidade:



- Primeira Excentricidade ao Quadrado:



- Segunda Excentricidade:



- Segunda Excentricidade ao Quadrado:




Outro detalhe é que os graus de latitude e longitude, nestes cálculos, são usados em notação decimal. Se estiverem em notação sexagesimal, o artigo "Conversão de grau decimal e sexagesimal" (http://dan-scientia.blogspot.com.br/2012/12/conversao-de-grau-decimal-e-sexagesimal.html) pode ser útil.

Ainda em relação a latitude e longitude, além dos valores em graus decimais também são necessários os valores em radianos. A conversão de graus decimais para radianos é feita com o uso das fórmulas a seguir. Neste artigo, a latitude e a longitude em graus decimais estão representadas respectivamente por "lat" e "long", e em radianos estão representadas respectivamente pelas letras gregas phi "φ" e lambda "λ".






Mais alguns valores são utilizados nas fórmulas dos cálculos:

A latitude de origem, que no UTM padrão é zero.




O fator de escala no meridiano central do fuso, para garantir um modelo mais favorável de deformação em escala ao longo do fuso.




Os valores de falso norte, que será adotado um ou outro dependendo da posição, se está no hemisfério norte ou sul, e o valor para o falso leste, sendo o valor do meridiano central do fuso. Estes valores são adotados para evitar números negativos. Os graus em notação decimal são indicados com o sinal - (negativo) quando na latitude sul (hemisfério sul) ou na longitude oeste.






Conversão de coordenada geográfica para coordenada UTM

Nesta conversão, iremos obter os valores de Easting (x), Northing (y) e o fuso, a partir da coordenada geográfica, utilizando o datum WGS84.

O fuso UTM (zone) é dado pela fórmula:




E o meridiano central do fuso, que não é um item da coordenada mas será usado nos cálculos de ambas as conversões, é dado pela fórmula:




Na obtenção dos valores de Easting e Northing começam os cálculos pesados. As fórmulas para o cálculo das coordenadas Easting e Northing são compostas de diversos termos. Para que as fórmulas não fiquem extremamente extensas, podemos resolver estes termos realizando cálculos intermediários.

O cálculo de M, comprimento do arco de meridiano, que é a distância vertical ao longo da superfície terrestre partindo do Equador até o ponto, é feito com as fórmulas (séries) a seguir. A latitude está em radianos.




Outros cálculos intermediários devem ser feitos, também relacionados as propriedades do elipsoide, como o raio da curvatura na primeira vertical ou grande normal (N).




Por fim, as fórmulas para obtenção dos valores em metros de Easting (x) e Northing (y). Os valores obtidos nos cálculos intermediários devem ser substituídos nas fórmulas a seguir.






Na anotação desta coordenada deve-se, além dos valores de x, y e fuso, incluir o hemisfério e o datum.


Conversão de coordenada UTM para coordenada geográfica

Nesta conversão, iremos obter os valores de latitude e longitude, a partir da coordenada UTM (x, y e fuso), utilizando o datum WGS84. Alguns valores utilizados serão os mesmos da conversão inversa, incluindo as constantes geométricas, a latitude de origem e o fator de escala no meridiano central do fuso.

As fórmulas para o cálculo das coordenadas geográficas também são compostas de diversos termos. Assim, da mesma forma, para que as fórmulas não fiquem extremamente extensas, podemos resolver estes termos realizando cálculos intermediários.

O cálculo de M, comprimento do arco de meridiano, que é a distância vertical ao longo da superfície terrestre partindo do Equador até o ponto, é feito com a fórmula a seguir.




O cálculo da "footprint latitude", que é a latitude do ponto no meridiano central do fuso que possui a mesma latitude, ou comprimento do arco de meridiano, que o ponto que está sendo convertido.




E mais estes termos intermediários, calculados para "footprint latitude".




Finalmente, as fórmulas para obtenção dos valores da latitude (φ) e longitude (λ). Os valores obtidos nos cálculos intermediários devem ser substituídos nas fórmulas a seguir.






A notação decimal destas coordenadas são obtidas com as fórmulas a seguir.






A conversão entre coordenadas geográficas e UTM não é tão complicada mas requer muitos cálculos. Um software matemático ou uma planilha eletrônica ajuda na velocidade de todos os cálculos, além do mais, já existem muitos sites e aplicativos que fazem estas conversões. O propósito deste artigo é somente mostrar as fórmulas, de forma simplificada pois algumas são séries.

Para mais informações sobre o UTM, leia o artigo "O Sistema de Coordenadas UTM" (http://dan-scientia.blogspot.com.br/2013/04/o-sistema-de-coordenadas-utm.html).

Bibliografia recomendada:

National Imagery and Mapping Agency Technical Report 8350.2, Department of Defense World Geodetic System 1984, Its Definition and Relationships with Local Geodetic Systems, Third Edition, January 2000.

SNYDER, J.P., Map Projections A Working Manual, U.S. Geological Survey Professional Paper 1395, Supersedes USGS Bulletin 1532, United States Government Printing Office, Washington, 1987.

sexta-feira, 26 de abril de 2013

Codificando os parâmetros de uma URL no PHP

Quando se utiliza o método GET os parâmetros de solicitação, codificados como pares de nome e valor, ficam visíveis na URL do script que trata a solicitação HTTP. Isto torna o GET menos seguro, comparado ao POST, porque os dados são enviados como parte da URL e assim, além da URL estar visível à qualquer um, pode ser adicionada no favoritos, armazenada no cache e permanecer no histórico do navegador.

Exemplo de URL com parâmetros no script PHP:

http://www.site.com/index.php?op=L&md=D&id=8

É comum utilizar parâmetros no script como meio de especificar as funções que serão executadas ou também como passagem de valores para variáveis ou funções. Se a navegação no site pode ser manipulada apenas adulterando o valor de um parâmetro na URL, ou se há alguma informação relativamente importante que precisa ser passada por parâmetro na URL, é uma boa medida proteger o site dos bisbilhoteiros. Uma solução é esconder os parâmetros da URL, adicionalmente com outras medidas de segurança.

Não quero neste artigo ditar regras de segurança para sites. Quero apenas mostrar uma solução simples e alternativa para proteger a URL, sem uso das ferramentas convencionais e sérias de criptografia. Nesta solução caseira, é usado uma combinação de comandos nativos do PHP para dar um certo efeito de criptografia.

Uma forma de esconder os parâmetros é codificá-los em caracteres ilegíveis. Somente o script que manipula a solicitação saberá decodificá-los, como se fosse uma criptografia.

Exemplo de URL com parâmetros codificados:

http://www.site.com/index.php?p=dpECApXucSffrhH0VfFOTWgfFyIErbMOTv4ZT5EEvEEWrE

Um método simples de codificação e decodificação é o Base64. O Base64 é um método para codificação de dados para transferência na Internet. Útil na transmissão de dados binários por meios que lidam apenas com texto, por exemplo, enviar arquivos por email. O Base64 codifica qualquer dado em uma sequência de caracteres dentre 64 caracteres distintos (A-Z, a-z, 0-9, + e /). Por exemplo, o texto "ola mundo", convertido para Base64 se torna "b2xhIG11bmRv". Existem diversas variações do Base64 mas não importa aqui.

Entretanto, o Base64 não é uma criptografia, é apenas uma codificação. Na codificação os dados são facilmente convertidos de uma representação para outra, sem a necessidade de uma chave, apenas do algoritmo. O algoritmo Base64 é bastante comum e seu uso é fácil de ser percebido. Usar somente ele não adiantaria muito no propósito de esconder os parâmetros.

Para camuflar o Base64 pode-se usar uma sequência de eventos em uma função que irá codificar ou decodificar a URL. Esta sequência, inventada pelo programador, fica desconhecida para quem tem acesso a página HTML apresentada no navegador pois está no código fonte do script. Praticamente uma criptografia onde a chave é o algoritmo em si.

A seguir tem um exemplo de implementação desta solução em PHP. A classe "cripto" contém as funções que irão codificar e decodificar a URL. Nelas, algumas funções nativas do PHP foram usadas para camuflar o Base64:

A função "strtr", retorna uma cópia da string, traduzindo todas as ocorrências de cada caractere do primeiro conjunto para o caractere correspondente no segundo conjunto; A função "substr" retorna a parte da string a partir do parâmetro especificado; A função "strrev" retorna a string invertida; Por fim, a função "base64_encode" codifica a string e a função "base64_decode" decodifica a string.

A ideia deste exemplo é codificar a string original, invertê-la e adicionar um prefixo aleatório, repetindo tudo isso por três vezes. Este prefixo é para confundir o resultado final, impossibilitando a decodificação direta. Como se não fosse o bastante, os caracteres da string resultante são trocados, gerando outra confusão no resultado final. Segue a classe de exemplo:

class cripto {
 
  function codificar($str) {
    $prfx = array('AFVxaIF', 'Vzc2ddS', 'ZEca3d1', 'aOdhlVq', 'QhdFmVJ', 'VTUaU5U',
                  'QRVMuiZ', 'lRZnhnU', 'Hi10dX1', 'GbT9nUV', 'TPnZGZz', 'ZGiZnZG',
                  'dodHJe5', 'dGcl0NT', 'Y0NeTZy', 'dGhnlNj', 'azc5lOD', 'BqbWedo',
                  'bFmR0Mz', 'Q1MFjNy', 'ZmFMkdm', 'dkaDIF1', 'hrMaTk3', 'aGVFsbG');
    for($i=0; $i<3; $i++) {
      $str = $prfx[array_rand($prfx)].strrev(base64_encode($str));
    }
    $str = strtr($str,
                 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
                 "a8rqxPtfiNOlYFGdonMweLCAm0TXERcugBbj79yDVIWsh3Z5vHS46pQzKJ1Uk2");
    return $str;
  }
 
  function decodificar($str) {
    $str = strtr($str,
                 "a8rqxPtfiNOlYFGdonMweLCAm0TXERcugBbj79yDVIWsh3Z5vHS46pQzKJ1Uk2",
                 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789");
    for($i=0; $i<3; $i++) {
      $str = base64_decode(strrev(substr($str,7)));
    }
    return $str;
  }
 
  function separar_parametros($param) {
    return explode('&',$param);
  }
 
  function separar_valor($opcao) {
    return explode('=',$opcao);
  }
 
}

No script que irá montar a página HTML, no momento da edição da etiqueta "a" ou de outra etiqueta que use uma URL, chama-se a função "codificar", da classe "cripto", para gerar a URL do atributo "href". Os parâmetros originais são transformados em um único valor para o parâmetro "p", que será coletado na solicitação. O parâmetro "p" ficará visível na URL mas seu valor estará codificado. Segue alguns exemplos de aplicação da função "codificar":

'<a href="index.php?p='.$this->cripto->codificar("op=F&md=E").'">'

'<a href="cliente.php?p='.$this->cripto->codificar("op=A&md=F&id=".$idcliente).'">'

'<button type="button" value="Cancelar" onclick="location.href=\'index.php?p='.$this->cripto->codificar("op=A&md=I").'\'">Cancelar</button>'

header("Location: index.php?p=".$this->cripto->codificar('op=L&md=C'));

Por sua vez, o script invocado pela URL deve ler o valor do parâmetro "p" que está na variável $_GET, variável predefinida que coleta valores no método GET, e executar a função de decodificar. Após a decodificação, a string com os pares originais (nome e valor) deve ser separada nos parâmetros originais e seus respectivos valores e armazenados em variáveis que serão utilizadas no decorrer do script PHP. Segue exemplo:

$cripto = new cripto;

$param = isset($_GET["p"]) ? $_GET["p"] : '';
$op = $md = $id = '';
$parametros = $cripto->separar_parametros($cripto->decodificar($param));
foreach($parametros as $opcao) {
  $valor = $cripto->separar_valor($opcao);
  if ($valor[0]=='op') $op = $valor[1];
  elseif ($valor[0]=='md') $md = $valor[1];
  elseif ($valor[0]=='id') $id = $valor[1];
}

As funções auxiliares "separar_parametros" e "separar_valor" tratam a string decodificada. A função "explode", nativa do PHP, retorna uma matriz de strings, cada uma com uma substring formada pela divisão a partir do delimitador especificado.

Esta solução funciona muito bem para o propósito. O algoritmo criado para confundir a codificação Base64 é o segredo. O sucesso vai da imaginação do programador.

Uma limitação técnica desta solução é quanto ao limite do tamanho da URL. A URL é limitada a um tamanho máximo de 2048 caracteres. Os dados codificados em Base64 ficam aproximadamente 33% maiores que os dados originais. Realizando a codificação mais de uma vez e adicionando o prefixo, o resultado é bem maior. Mas é raro precisar de uma URL tão grande.

sexta-feira, 19 de abril de 2013

A matemática e o progresso humano

O avanço tecnológico e o progresso humano estão fortemente conectados ao conhecimento matemático. A percepção desta conexão é vital para o entendimento da história do homem em sua evolução. Uma das ferramentas mais importantes da matemática são as equações. As equações são modeladas nos padrões que encontramos no mundo a nossa volta e são estas equações que nos fazem entender o sentido do nosso mundo.

O recente livro do matemático inglês Ian Stewart, intitulado "17 Equações que Mudaram o Mundo", descreve a origem de algumas equações que tiveram influência na história humana. As equações vão desde o teorema de Pitágoras, passando pelas leis de Newton, as equações de Maxwell e a teoria da relatividade de Einstein. É um livro bem interessante com uma linguagem fácil.

A edição original foi lançada em 2012, a 1ª edição brasileira é de Abril de 2013 e lançada pela editora Zahar. Esta é a capa do livro:


sábado, 13 de abril de 2013

O Sistema de Coordenadas UTM

O UTM (Universal Transversa de Mercator) é um tipo de projeção e de sistema de coordenadas no plano. É utilizado na cartografia, um importante campo de aplicação da geodésia, para dar a localização de um ponto na superfície terrestre. O UTM é baseado no modelo elipsoidal da Terra e é um dos mais utilizados no mundo.

A geodésia é a ciência que estuda a forma, a dimensão da Terra, o campo gravitacional, o espaço-tempo tridimensional e os fenômenos geodinâmicos como rotação da Terra, marés e movimentos da crosta terrestre.

A forma da Terra foi representada inicialmente por uma esfera, Pitágoras e Aristóteles foram os primeiros que expressaram esta ideia. No século 17, Newton demonstrou que o conceito de uma Terra esférica era inadequado e representou a Terra como um elipsoide de revolução, onde o eixo equatorial era maior do que o eixo polar e assim a Terra era achatada nos polos. No século 19, Laplace, Gauss e outros afirmaram que o modelo elipsoidal não era convincente e então surgiu a forma de geoide para a superfície terrestre. O geoide é uma superfície equipotencial do campo de gravidade da Terra que coincide com o nível médio dos mares. O geoide se estende através dos continentes em uma forma ondulada, se aproximando da topografia terrestre.


Os modelos de representação da Terra, com a topografia, elipsoide e geoide.

Apesar do geoide ser o modelo mais próximo do verdadeiro formado da Terra, em geodésia utiliza-se um elipsoide de referência para representar matematicamente a superfície terrestre. O modelo matemático da Terra é denominado "datum". O elipsoide de referência torna bem mais simples a execução dos cálculos e definição das coordenadas e elevação. Atualmente, um dos elipsoides de referência, ou datum, mais usados é o WGS84, servindo como base ao Sistema de Posicionamento Global (GPS).

A Cartografia é o conjunto de estudos e operações científicas, técnicas e artísticas utilizados na elaboração de mapas, cartas e outras formas de representação de objetos. O mapa é a representação no plano, em pequena escala, dos aspectos geográficos de uma área na superfície de um objeto planetário. Diferentemente, a carta é a representação em média ou grande escala, para possibilitar a avaliação dos detalhes.

Para elaborar um mapa é necessário determinar um método no qual cada ponto na superfície terrestre corresponda a um ponto no plano e vice-versa. Existem diversos métodos e estes métodos são chamados sistemas de projeções. Um sistema de projeção adota um modelo matemático do planeta e relaciona os pontos estabelecendo uma escala e um sistema de coordenadas.


Projeção cilíndrica transversa, o eixo do cilindro está perpendicular ao eixo da Terra.

As projeções cartográficas são classificadas de diversas formas. Quanto a superfície de projeção temos a cilíndrica, que é utilizada no sistema UTM na posição transversal, em relação à superfície de referência. Na posição transversal, o eixo do cilindro está perpendicular ao eixo da Terra.

Quanto ao tipo de contato entre as superfícies de projeção e referência, o sistema UTM adota a secante, onde a superfície de projeção secciona a superfície de referência. Isto vem da atribuição do fator de escala k = 0,9996 ao meridiano central do sistema UTM, que garante um modelo mais favorável de deformação em escala ao longo do fuso. Limitando o erro de escala em 1/2500 no meridiano central e 1/1030 nos extremos do fuso.


Fuso ou Zona UTM, com 6° de extensão longitudinal e seu meridiano central.

No sistema UTM a Terra é dividida em 60 fusos, ou zonas, com 6° de extensão de longitude e os fusos são numerados de 1 a 60, crescente no sentido leste a partir do fuso 180°, a 174° oeste de Greenwich. Isto é, o fuso 1 vai de 180°O até 174°O, o fuso 2 vai de 174°O até 168°O e assim sucessivamente. Cada fuso é prolongado em 30' sobre os fusos adjacentes, criando uma área de sobreposição de 1°.

O sistema UTM é utilizado somente entre as latitudes 84° ao norte e 80° ao sul. Cada fuso é segmentado em 20 faixas com 8° de extensão de latitude. São dez faixas no hemisfério norte e dez faixas no hemisfério sul. Embora não ser essencialmente adotado no UTM e sim no MGRS, uma derivação militar do UTM, as faixas são designadas por letras de C, a partir de 80°S, até X, que termina em 84°N. As letras I e O não são usadas por causa da similaridade com os números 1 e 0. A letra N é a primeira faixa do hemisfério norte, adotada por causa do "n" de norte.


O mapa UTM, com a identificação dos fusos, faixas e graus.

Os quadriculados das zonas são uniformes em todo o globo, com exceção em duas áreas. O quadriculado 32V está estendido para alcançar toda a Noruega e assim o quadriculado 31V está recuado. Os quadriculados 31X, 33X, 35X e 37X estão estendidos para cobrir a região da Esvalbarda, também pertencente à Noruega, assim os quadriculados 32X, 34X e 36X não são usados.

O ponto de origem de cada fuso é a intersecção do Equador com o meridiano central do fuso. Para evitar números negativos, é adotado o valor de 500.000 metros para o meridiano central do fuso, na linha ao longo do Equador. Os fusos possuem um alcance longitudinal de 167.000 a 833.000 metros, na altura do Equador, reduzindo em direção aos polos. Justificando os números, a Terra possui aproximadamente 40.000.000 metros de circunferência, então os fusos tem 666.666 metros de extensão longitudinal.

No hemisfério norte as posições são medidas para o norte partindo do zero ao Equador até 9.300.000 metros na latitude 84°N, na linha ao longo do meridiano central. No hemisfério sul as posições são medidas para o sul partindo do 10.000.000 metros ao Equador até 1.100.000 metros na latitude 80°S, na linha ao longo do meridiano central. Assim, nenhum ponto recebe um valor negativo.

A posição na Terra é dada pelo número do fuso (zona), as coordenadas Este (Easting) e Norte (Northing) explicitamente nesta ordem, e o hemisfério. A coordenada Este também pode ser descrita por X e a coordenada Norte por Y. Abaixo um exemplo de coordenada UTM:

X 271960,000 (Easting)
Y 7382350,200 (Northing)
Fuso 23 (Zone)
Hemisfério Sul
Elipsoide WGS84 (datum)

A coordenada acima, dada como exemplo, indica que o ponto está no fuso 23, no Hemisfério Sul, a 228.040 metros a oeste do meridiano central do fuso (500.000 - 271.960) e a 2.617.649,8 metros ao sul do Equador (10.000.000 - 7.382.350,2). O datum será útil no cálculo de conversão entre sistemas de coordenadas.

O sistema de coordenadas UTM é o sistema mais usado em projeções planas do globo terrestre. As coordenadas geográficas, em graus de latitude e longitude, são usadas na superfície esférica do globo. É possível realizar a conversão entre os sistemas, será visto em um próximo artigo.

sexta-feira, 12 de abril de 2013

Detalhamento do uso no Android

Sem necessitar de aplicativos de terceiros, apenas com as ferramentas nativas, o sistema Android possui algumas telas que mostram detalhes do uso do sistema. São detalhes do uso de dados de rede, do espaço ocupado no armazenamento dos aplicativos e demais arquivos, do uso da bateria pelos aplicativos e do uso da (memória) RAM pelos aplicativos. O acesso à estas telas é pelo ícone Configurações.

Rede:

A tela "Uso de dados" detalha a quantidade de dados transferidos por upload ou download durante um determinado período. Chega-se nesta tela pelo ícone "Configurações" e depois em "Uso de dados". Existem duas guias, uma com as estatísticas dos dados trafegados pelo serviço da operadora de telefonia móvel e outra guia com as estatísticas dos dados trafegados por Wi-Fi. Além do gráfico do volume total de dados, é exibido o consumo por aplicativo, e clicando em um aplicativo, é exibido o consumo do respectivo aplicativo durante as execuções de primeiro plano e segundo plano.



Armazenamento:

A tela "Armazenamento" detalha, além do espaço total e do espaço disponível, o espaço ocupado pelos aplicativos, pelas imagens e vídeos, pelas músicas, pelos arquivos provenientes de download, pelos dados em cache e pelos arquivos diversos. Chega-se nesta tela pelo ícone "Configurações" e depois em "Armazenamento". Tocando em cada uma das categorias, é exibido o conteúdo da respectiva categoria. Para imagens é exibida a galeria, para downloads são exibidos os arquivos etc.



Bateria:

A tela "Bateria" detalha o uso da energia pelo sistema e aplicativos. Chega-se nesta tela pelo ícone "Configurações" e depois em "Bateria". A primeira informação é a quantidade de carga ainda disponível na bateria, em porcentagem. Em seguida, tem um gráfico evolutivo do nível da bateria, com início na última vez que o aparelho foi carregado com energia externa, e o tempo que o aparelho vem funcionando sob a energia da bateria. Abaixo, uma listagem dos aplicativos que consumiram a energia da bateria neste tempo, desde a última recarga. Tocando no gráfico abre-se uma tela com maiores detalhes do histórico e a influência do hardware no consumo, como GPS, Wi-Fi etc. Tocando em um aplicativo abre-se uma tela com maiores detalhes do respectivo aplicativo e, se aplicável, botões para ajuste do uso da energia.



Aplicativos:

A tela "Aplicativos", na guia rodando, detalha todos os aplicativos, processos e serviços que estão sendo executados no momento, com sua respectiva quantidade de memória que estão usando e a quanto tempo. Chega-se nesta tela pelo ícone "Configurações" e depois em "Aplicativos". Na parte superior desta guia há um botão para alternar entre mostrar os processos em cache ou mostrar os serviços em execução. Na parte inferior há um gráfico que mostra o total de RAM usada e a quantidade livre.



Neste artigo foi usado o Android na versão 4.2.1 para descrever estas telas de detalhamento do uso. Em outras versões as telas poderão ser diferentes ou até inexistentes (em versões muito antigas). Nestes casos poderão ser úteis os aplicativos de terceiros para este fim.

domingo, 31 de março de 2013

Problema de Lógica: A balança com defeito

Francisco e sua irmã Ana estão com seu cachorro Simba na farmácia de seu tio. Na farmácia há uma balança com defeito que só mostra corretamente os pesos superiores a 50 kg. Para evitar o defeito, pesaram-se juntos dois a dois e obtiveram os seguintes pesos:

Francisco e Simba pesam juntos 88 kg;
Francisco e Ana pesam juntos 114 kg;
Ana e Simba pesam juntos 60 kg.

Qual é o peso de Francisco, de Ana e do cachorro Simba?





RESPOSTA





De acordo com o enunciado, os valores obtidos nas pesagens de Francisco (x), Ana (y) e Simba (z), dois a dois, foram:

A) x + z = 88
B) x + y = 114
C) y + z = 60

Fazendo A - B, teremos:

D) (x + y) - (x + z) = 114 - 88
D) x + y - x - z = 26
D) y - z = 26

Fazendo C - D, teremos:

E) (y + z) - (y - z) = 60 - 26
E) y + z - y + z = 34
E) z = 17

Fazendo A - E, teremos:

(x + z) - z = 88 - 17
x = 71

Fazendo C - E, teremos:

(y + z) - z = 60 - 17
y = 43

Portanto, Francisco pesa 71 kg, Ana pesa 43 kg e Simba pesa 17 kg.