Mostrando postagens com marcador download. Mostrar todas as postagens
Mostrando postagens com marcador download. Mostrar todas as postagens

quinta-feira, 20 de setembro de 2012

Manual de Navegação Astronômica da Marinha

A navegação marítima já nos seus primórdios sempre foi guiada pela navegação astronômica, para cálculo do posicionamento em uma navegação oceânica. A navegação é a ciência e a arte de conduzir uma embarcação de um ponto a outro na superfície da terra. A navegação astronômica é um método em que o navegante determina sua posição através da observação dos astros.

A Base de Hidrografia da Marinha em Niterói (BHMN), atuando como uma Organização Militar Prestadora de Serviços Especiais (OMPS-E), executa além de outros, o serviço de distribuição de documentos cartográficos e de auxílio à navegação, gerenciando o material técnico da área de competência da Diretoria de Hidrografia e Navegação (DHN).

No site da BHMN existe um manual de navegação distribuído em três volumes que está disponível para download no formato PDF. O manual "Navegação: A Ciência e a Arte - Volumes I, II e III", de autoria do Comandante Altineu Pires Miguens, possui um extenso conteúdo de excelente qualidade, e o Volume II intitulado "Navegação Astronômica e Derrotas", trata brilhantemente de todas as particularidades da navegação astronômica.

No volume II, os capítulos nos ensinam sobre a Terra e seus movimentos, a esfera celeste, sistemas de coordenadas, medida do tempo, instrumentos náuticos e muito mais. Está muito bem editado, escrito e ilustrado.

Os três volumes do manual de navegação encontram-se disponíveis pelo endereço http://www.mar.mil.br/dhn/bhmn/publica_manualnav.html. Vale a pena o download. Observação, cada capítulo está em um arquivo PDF separado.

"Navigare necesse est, vivere non est necesse" (Gnaeus Pompeius Magnus 106-48 a.C.)

quinta-feira, 10 de maio de 2012

Puzzles Old and New

Aos entusiastas de quebra-cabeças, o livro "Puzzles Old and New" está disponível gratuitamente na Internet Archive (http://archive.org/). Este livro, publicado em 1893 pela editora Frederick Warne & Co. e de autoria do professor Louis Hoffmann, é um catálogo dos principais quebra-cabeças mecânicos com suas soluções, disponíveis na Era Vitoriana do Reino Unido, e muitos outros novos e clássicos quebra-cabeças.

A edição original do livro "Puzzles Old and New" foi digitalizada pela Boston Public Library (http://www.bpl.org/) e está disponível em diversos formatos eletrônicos no endereço http://archive.org/details/puzzlesoldnew00hoff.

quinta-feira, 26 de janeiro de 2012

Agilizando downloads pela linha de comando

Uma linha de comando executada em um prompt do shell pode agilizar muitos downloads, especialmente quando as URLs se diferem em valores sequenciais ou quando temos páginas com muitos links. Fica muito mais rápido todo o trabalho.

Neste primeiro caso de exemplo, temos uma série de arquivos numerados (man01.pdf, man02.pdf ...) com um início de endereço comum. O uso de um simples laço de repetição executará o programa wget para cada arquivo:

for (( i=1; i<=9; i++ )) do wget http://manuais.com/pdf/man0$i.pdf; done

Já neste segundo exemplo, temos duas variações ocorrendo nos nomes dos arquivos, com letras e números (manBR01.pdf, manBR02.pdf, ..., manUS01.pdf, manUS02.pdf, ...). O uso de dois laços aninhados irão gerar todas as respectivas URLs dos arquivos:

for c in BR US ES; do for (( i=1; i<=6; i++ )) do wget http://manuais.com/pdf/man"$c"0"$i".pdf; done; done

Apesar de nos exemplos ocorrerem apenas variações nos nomes dos arquivos, elas podem ocorrer em qualquer parte da URL. Bastando somente posicionar a variável no endereço.

Neste terceiro e último exemplo, temos uma página fornecendo links de diversos arquivos, não necessariamente sequenciais, sendo formatada para que somente as URLs sirvam de parâmetro para o programa wget:

for x in $(lynx -dump http://manuais.com/ | awk '{print $2}' | grep .pdf); do wget $x; done

Entendendo melhor este último exemplo. A opção -dump do programa lynx formata a página para texto puro na saída padrão e gera no final uma relação dos links encontrados. Esta relação das referências é que será utilizada. A ferramenta awk filtra e exibe somente a segunda coluna do texto, e a ferramenta grep filtra e exibe somente as linhas contendo a string especificada. Todo resultado deste texto alimentará o laço.

Nestes exemplos, todos os arquivos baixados serão salvos no diretório corrente. Os comandos deverão ficar em uma única linha, estão quebrados pois são extensos para a página. Uma longa lista poderá correr em sua tela, serão execuções sequenciais do programa wget, um downloader não-interativo para rede.

É vantajoso usar uma linha de comando ao invés de ficar clicando repetidamente em uma página, por todos os links. O tempo economizado é grande, além do conforto. Se encontrar uma página com um certo padrão nos links, não hesite, use a linha de comando!

terça-feira, 1 de junho de 2010

Corrigindo uma imagem ISO pelo rsync

Uma vez passei pela seguinte procedimento. Fiz o download de uma imagem ISO, gravei o conteúdo desta imagem em uma mídia DVD e apaguei o arquivo ISO de meu computador. Procedimento comum. Só que em um tempo depois precisei novamente desta imagem.

Tudo bem, usei o dd (diskdump) e fiz uma cópia 1:1 da mídia para um arquivo em meu HD, gerando uma nova imagem ISO. Esta nova imagem funcionou perfeitamente e decidi guardá-la caso precisasse novamente. Entretanto, ao verificar a assinatura digital percebi que o hash desta imagem, comparando com o fornecido pelo site o qual fiz o download, não era mais o mesmo.

Para não baixar novamente toda a imagem, usei a ferramenta rsync para apenas reparar o arquivo ISO. O rsync é uma ferramenta de cópia de arquivo remoto e local, que serve para sincronizar duas unidades de armazenamento, fazendo um espelho ou também para cópias de segurança. O rsync é famoso pelo seu algoritmo de transferência delta, o qual reduz a quantidade de dados transferidos pela rede enviando somente as diferenças entre os arquivos.

Para que o rsync funcione é necessário que o servidor de arquivos tenha o suporte ao protocolo rsync. Muitos servidores que fornecem imagens ISO de distribuições Linux trabalham também com este protocolo. Como um teste podemos usar o comando abaixo que mostra o conteúdo do diretório remoto:

rsync rsync://nome.do.servidor/diretório/

Para reparar a imagem, entre no diretório local no qual se encontra o arquivo ISO corrompido e execute um comando semelhante ao apresentado abaixo:

rsync -avc --stats --progress rsync://debian.las.ic.unicamp.br/debian-cd/5.0.4/i386/iso-dvd/debian-504-i386-DVD-1.iso .

O argumento "-a" usa o modo de arquivo, onde são preservados os atributos e permissões do arquivo. O argumento "-v" aumenta a verbosidade, junto com "--stats" que mostra uma estatística da transferência e "--progress" que mostra o progresso durante a transferência. O argumento "-c" faz com que o salto, percorrendo o arquivo, seja baseado no checksum. O ponto no final é porque o arquivo ISO local está no diretório atual, onde foi executado o comando, e possui o mesmo nome do arquivo remoto. O início do processo pode demorar um pouco pois o servidor precisa calcular o checksum do arquivo.

Não é todo servidor rsync que permite ou suporta o recurso de controle por checksum. Se o servidor não possuir então é necessário que o arquivo ISO local esteja com a data e hora diferente do arquivo remoto. Forçando assim uma checagem total do arquivo. O uso do comando "touch" pode resolver isto.

Adicionalmente pode incluir o argumento "-z", que usa uma compressão nas porções de dados para a transferência. Para mais informações consulte a página manual do rsync (man rsync).

quarta-feira, 6 de janeiro de 2010

Verifique a integridade dos seus downloads

Durante um processo de cópia de qualquer arquivo no computador é possível acontecer uma falha na comunicação da origem para o destino. Muitas vezes o software que está executando o processo de cópia não percebe e retorna para o sistema o sucesso da cópia. A cópia do arquivo aparenta estar normal porém ao realizar sua execução acontece um erro.

Este tipo de problema é bastante comum de acontecer em downloads de arquivos pela Internet. Não é sempre mas pode ocorrer de um único byte vir incorreto ou inexistente no arquivo. E pode ser um transtorno se este arquivo for por exemplo uma imagem de CD ou DVD, onde o erro só vai ser percebido depois de gravá-la em uma mídia e então executar o software contido.

Para possibilitar uma verificação da cópia do arquivo e assim evitar que um usuário fique com um arquivo corrompido, muitos administradores de repositórios de softwares disponibilizam um arquivo ou uma página no site contendo o valor hash do arquivo. Desta forma o usuário pode confirmar a integridade do arquivo.

Um hash é uma sequência de bits gerada por um algoritmo de dispersão formando uma sequência de caracteres alfanuméricos, geralmente na base hexadecimal de 0 a 9 e de A a F, representando 1/2 byte cada. Basicamente a sequência hash é a transformação de uma grande quantidade de dados em uma pequena quantidade de dados.

Esta seqüencia busca identificar um arquivo unicamente. É um método para transformar dados de tal forma que o resultado seja praticamente exclusivo. Mas como a seqüencia do hash é limitada, muitas vezes não passando de 512 bits, existem colisões ocasionando sequências iguais para dados diferentes.

Não é possível a partir de um valor de hash retornar à informação original, esta transformação então é somente unidirecional.

Os algoritmos de hash mais usados para este propósito são: MD5, com 128 bits; SHA1, com 160 bits e o SHA256, com 256 bits. Os hashes MD5 são representados por uma sequência de 32 caracteres hexadecimais, os hashes SHA1 e o SHA256 são representados por sequências de 40 e 64 caracteres, respectivamente.

Quando localizar um arquivo para download em um site, procure se informar se existe disponível o valor hash do arquivo. Este valor pode vir dentro de um outro arquivo em formato texto, comumente com nomes semelhantes à checksum, md5sum, sha1sum, ou pode apenas estar incluído no conteúdo da página de download do arquivo.

Para o sistema Windows é necessário instalar o utilitário que irá verificar a integridade, por exemplo para hash MD5 existe o software chamado MD5summer (http://www.md5summer.org/). Existem outros utilitários que funcionam com os algoritmos mais comuns de hash, uma pesquisada pelo Google vai ser suficiente para encontrá-los. Já o sistema Linux costuma trazer na instalação padrão estes utilitários. A execução do comando "md5sum " retorna a sequência com o valor hash MD5 do arquivo informado. Outros comando são o sha1sum e o sha256sum, para os hashes SHA.

Basta comparar o valor retornado com o fornecido no site. Se forem idênticos então o arquivo está OK. Uma forma automática é executar o utilitário informando o arquivo que contém a sequência hash, desta forma o retorno será a resposta OK ou não.

Outro proveito destes utilitários é para o controle da integridade de suas cópias particulares. Cópias de segurança, transferências de arquivos pela rede ou a utilização de uma unidade de armazenamento externa para transportar os arquivos etc. O procedimento é gerar os valores hashes antes de realizar a cópia e ao final verificar os arquivos copiados.

A grande maioria dos repositórios de softwares para o sistema Linux adotam este controle de integridade dos arquivos.

quinta-feira, 27 de agosto de 2009

Shell Script para procura e download de novos arquivos

Na manutenção do meu sistema Linux eu tenho o hábito de fazer o download de todos os pacotes disponíveis no repositório Updates, para então atualizar o que for necessário. Não costumo usar o utilitário yum pois gosto de fazer o download de tudo e não somente das atualizações dos pacotes que estão instalados. Aliás este meu procedimento vem muito antes de existirem estes utilitários que facilitam a atualização de pacotes.

Para facilitar a vida e não ter que fazer todo o trabalho manualmente, desenvolvi um script para o Shell que faz tudo automaticamente. O script é capaz de verificar os pacotes que eu já tenho e selecionar os novos pacotes disponíveis no repositório, aplicando antes um filtro para retirar os pacotes que eu não desejo. Por fim realiza o download dos arquivos.

Para facilitar o entendimento do código do script é necessário descrever o meu cenário. Porém isto é só um exemplo já que a idéia deste artigo é mostrar a possibilidade de um script de pesquisa e download automáticos.

Dentro do meu diretório pessoal (home) existe um diretório (~/Fedora), no qual fica o script, e dentro dele há o diretório Updates que contém os pacotes recebidos por download. Na raiz do meu diretório pessoal existem os arquivos com os hashes MD5 dos arquivos que já foram gravados em DVD e que não estão mais no HD.

O script lê o conteúdo dos arquivos com os hashes, lista o conteúdo do diretório Updates e grava no arquivo "pacotes-que-ja-tem.txt". Em seguida lista o conteúdo do repositório e grava no arquivo "pacotes-no-repo-updates.txt". Para estes dois arquivos há um tratamento para retirar as informações extras e deixar somente os nomes dos pacotes.

Com estas duas listagens é feita uma comparação para verificar as diferenças e, após, aplica o filtro para retirar os pacotes que estão na lista negra. Neste ponto está pronto o arquivo "pra-baixar.txt" que contém a listagem dos pacotes novos.

Na interface com o usuário é apresentada a estatística com a contagem dos novos pacotes e o conteúdo da listagem. Antes de realizar o download o script faz uma pergunta para confirmar. Caso a resposta seja positiva, é feito o download dos pacotes dentro do diretório Updates.

Veja o código do script:

#!/bin/bash

sed 's/^.\{34\}//' ~/hash*.md5 | grep "Updates/" | sed 's/.*\///g' - > updates-baixados.txt

ls ~/Fedora/Updates/ >> updates-baixados.txt

sort updates-baixados.txt > pacotes-que-ja-tem.txt

lynx -dump ftp://download.fedora.redhat.com/pub/fedora/linux/updates/10/i386/ | awk '{print $2}'
| grep .rpm | sed 's/.*\///g' - | sort > pacotes-no-repo-updates.txt

diff pacotes-no-repo-updates.txt pacotes-que-ja-tem.txt | grep "< " | sed 's/< //' - > novidades.txt

diff novidades.txt lista-negra.txt | grep "< " | sed 's/< //' - > pra-baixar.txt

NOVO=`wc -l novidades.txt | awk '{print $1}'`
NEGRA=`wc -l lista-negra.txt | awk '{print $1}'`
BAIXAR=`wc -l pra-baixar.txt | awk '{print $1}'`

echo "Pacotes novos: ${NOVO}"
echo "Pacotes na lista negra: ${NEGRA}"
echo "Pacotes para baixar: ${BAIXAR}"
echo
echo "Listagem:"
echo
cat pra-baixar.txt
echo

if [ ! -s pra-baixar.txt ]; then
echo "Nada para baixar."
else
read -p "Deseja baixar os pacotes? (s/n) " ans
if [ "$ans" == 's' ]; then
POS=1
cd ~/Fedora/Updates/
while read PACOTE
do
echo -e "\n------------------- Baixando pacote ${POS} de ${BAIXAR} ------------------\n"
wget -c -T60 ftp://download.fedora.redhat.com/pub/fedora/linux/updates/10/i386/"$PACOTE"
POS=$((POS+1))
done < ../pra-baixar.txt
cd ..
echo -e "\nFeito!\n"
elif [ "$ans" == 'n' ]; then
echo -e "\nDesistindo...\n"
else
echo -e "\nResposta invalida.\n"
fi
fi

rm -f updates-baixados.txt pacotes-que-ja-tem.txt pacotes-no-repo-updates.txt novidades.txt pra-baixar.txt


O código é até feio visualmente, talvez mal estruturado, porém faz muito bem o que é para ser feito. E lembrando, apesar do script ser para buscar as atualizações da distro Fedora, é possível modificá-lo para atender a qualquer outro repositório de arquivos.