terça-feira, 31 de janeiro de 2012

Posição atual da Estação Espacial Internacional

A Estação Espacial Internacional (ISS) viaja em uma velocidade média de 27,7 mil quilômetros por hora, realizando 15,7 órbitas por dia, numa altitude entre 278 km e 460 km. A estação leva até 6 minutos para cruzar o céu de um observador terrestre.

A ISS é o maior e mais brilhante objeto feito pelo homem em órbita, apresenta uma magnitude que varia de acordo com a distância à terra e com o reflexo da luz solar. Algumas estimativas apontam para um brilho de magnitude até -8, com a luz do Sol brilhando diretamente pelos painéis solares.

O site AstroViewer (http://www.astroviewer.com/), além de conter um mapa interativo do céu noturno, possui uma página que mostra a posição atual da ISS (http://iss.astroviewer.net/) e seu caminho sobre a superfície terrestre, com atualizações a cada segundo.

Neste site, também é possível especificar a localização do observador terrestre, e assim, obter uma lista das oportunidades de observação da ISS, com data, hora, duração, magnitude e direção. Tudo muito bem ilustrado através de um mapa da localização e com o caminho da ISS.

Ah! Ainda é possível gerar um código HTML para incorporar o mapa em sua página.

A observação da Estação Espacial Internacional depende de alguns fatores como altura em relação ao horizonte, reflexão da luz solar e céu noturno. As melhores condições de observação ocorrem antes do nascer do Sol e depois do pôr do Sol.



segunda-feira, 30 de janeiro de 2012

Brincadeira de adivinhar um número na calculadora

Algumas calculadoras, mesmo as simples, possuem uma funcionalidade na tecla = (igual), talvez associada à função de repetição ou função de cálculo contínuo, que quando pressionada, após a exibição do resultado de um cálculo, repete a última operação.

Para testar se a calculadora possui esta funcionalidade, por exemplo, tecle 1 + 1 e tecle = repetidamente. Se o resultado receber incrementos de 1 a cada pressionamento da tecla = então a calculadora possui esta funcionalidade.

Nestas calculadoras é possível fazer uma brincadeira de adivinhação de um número. Uma pessoa programa a calculadora, escolhendo um número de quantos dígitos desejar e passa a calculadora para outra pessoa, a qual irá descobrir o número digitando seus palpites.

Para programar a calculadora nesta brincadeira, entre com um número de quantos dígitos preferir. Um bom tamanho é um número de quatro dígitos. Divida este número por ele mesmo e tecle =. O resultado será obviamente 1. Pronto, a calculadora está programada. Não tecle mais nada e passe a calculadora para a outra pessoa.

Exemplo, sequência de teclas para programar o número 3647:

3 6 4 7 : 3 6 4 7 =

Para realizar as tentativas a pessoa deve digitar os números e teclando = após cada palpite. Se o palpite for menor que o número correto, o resultado será menor que 1 (zero vírgula alguma coisa). Se o palpite for maior que o número correto, o resultado será maior que 1 (um vírgula alguma coisa). Quando acertar o número, o resultado será exatamente 1.

Exemplo, adivinhando o número acima:

[Palpite 1] 5 5 5 5 = (a calculadora retorna 1,5232 - o palpite é maior)
[Palpite 2] 3 3 3 3 = (a calculadora retorna 0,9139 - o palpite é menor)
[Palpite 3] 3 6 4 7 = (a calculadora retorna 1 - o palpite está certo)

A brincadeira se desenvolve nestas tentativas, digitando um número e teclando =, para que o resultado se aproxime de 1. Quanto maior o número de dígitos, maior a dificuldade. Pode-se informar ao adivinhante quantos dígitos tem o número, ou não.

Ainda não encontrei uma documentação que explique esta funcionalidade das calculadoras, não é exatamente a função de cálculo contínuo pois esta função aproveita o resultado na operação seguinte. Nas tentativas, quando digita-se o palpite e a tecla =, o resultado das operações é o palpite dividido pelo número certo.

Infelizmente não é toda calculadora que aceita esta brincadeira. Nas mais simplezinhas costuma funcionar. Numa científica, toda poderosa, provavelmente não. Em uma com RPN, acredito que não.

Vantagens e desvantagens entre Desktop e Laptop

Um dilema bastante comum para quem vai comprar um computador é a escolha entre um desktop e um laptop (notebook). Principalmente quando pretende ter apenas um computador.

Um computador para uso pessoal deve atender o propósito mais geral possível. Os usos mais comuns são: acesso à Internet, editores de textos e planilhas, jogos, imagens, vídeos e músicas. Uns usuários fazem mais uma coisa, outros não e por aí vai.

Para uso profissional a existência de um pré-requisito ajuda na definição do modelo. Um desenhista da Pixar necessitará de uma placa de vídeo super potente. Um executivo que viaja pelas filiais pode necessitar de transporte. A escolha fica mais fácil assim.

Enumerei, talvez algumas, das vantagens e desvantagens de se ter um desktop e um notebook. Possivelmente terão outras. Praticamente, nesta minha análise, a vantagem de um é a desvantagem do outro e vice-versa. Veja:

Desktop

Vantagens:

1) Processamento maior - Tanto a unidade central de processamento como o processador gráfico e demais chipsets serão versões completas, com desempenho total.
2) Tela do monitor maior - Os monitores para desktop podem ser maiores nas polegadas e também com maior número de pixels.
3) Maior espaço em HD - Um gabinete pode comportar mais de um disco rígido e eles podem ser de 3,5", o que permite modelos com grande capacidade (2 TB).
4) Teclado mais confortável - Os teclados para desktop são grandes, com teclas maiores e com melhor ergonomia.
5) Menor risco de roubo - Como não será transportado com frequência e por ser maior e mais pesado, dificulta o roubo.
6) Manutenção mais fácil - É mais fácil abrir e trocar um componente. O custo das peças são menores também.
7) Upgrade mais fácil - Os diversos componentes podem ser independentes e assim podem ser trocados separadamente. Por exemplo, trocar uma placa de vídeo por uma melhor.
8) Preço mais barato - Por um mesmo preço pode-se obter um desktop mais potente e com maior capacidade, ou, com as mesmas características de hardware, um desktop custa menos.
9) Mais resistente - Os gabinetes são mais robustos, como também as peças internas.

Desvantagens:

1) Não é portátil - Não dá para transportar facilmente.
2) Bateria inexistente - Só funciona conectado à rede elétrica e necessita de um nobreak para que não desligue caso a energia da rede seja interrompida.
3) Consome mais energia - O hardware não é otimizado para poupar energia e os componentes necessitam de uma fonte potente.
4) Ocupa mais espaço - Monitor, gabinete, teclado, mouse, caixas de som, não é qualquer mesa que comporta tudo isso.
5) Pesado - Só o monitor já pode pesar mais que um notebook e o gabinete é o item mais pesado.
6) Mais cabos - Para ligar todas as peças usam-se diversos cabos, tudo espalhado.
7) Tudo separado - O monitor é uma peça à parte, o gabinete outra, mais teclado, mais mouse, mais caixas de som. Por exemplo, se for embalar para transporte é preciso cuidar de cada item separadamente.


Notebook

Vantagens:

1) Portátil - Pequeno, leve, é fácil transportar, pode caber até em uma pasta ou bolsa.
2) Bateria - Já vem com bateria por padrão, e assim, além de permitir o uso fora da rede elétrica, serve como um nobreak caso a energia da rede seja interrompida.
3) Consome menos energia - Funciona com uma fonte pequena e econômica, todo o hardware é otimizado para poupar energia.
4) Ocupa menos espaço - Com dimensões reduzidas, cabe em uma mesa pequena, pode ser guardado em um pequeno espaço.
5) Leve - Podendo pesar apenas 1 kg ou 2 kg, pode-se até usar no colo.
6) Menos cabos - Se usar na rede elétrica, um cabo basta, e usando na bateria pode ser completamente "wireless".
7) Tudo em um - Em uma mesma peça tem-se monitor, CPU, teclado, touchpad, caixas de som, webcam etc.

Desvantagens:

1) Processamento limitado - Os processadores são otimizados para consumir pouca energia e com isso possuem um desempenho reduzido.
2) Tela do monitor menor - As telas estão limitadas à largura do notebook e ainda costumam ter um número de pixels menor.
3) Menos espaço em HD - Além de ter espaço para somente um disco rígido em seu interior, é utilizado um modelo de menor dimensão (2,5"), que consequentemente, possui menor capacidade.
4) Teclado reduzido - Os teclados estão limitados à largura do notebook e geralmente possuem teclas compactas e em menor número (aproveita-se muitas funções numa mesma tecla).
5) Risco de roubo - Por ser fácil de esconder, carregar e estar sujeito a um passeio pela rua, o risco de um assalto é maior.
6) Manutenção complicada - A abertura e desmontagem é complicada e delicada. Os componentes estão agregados uns aos outros, geralmente, se for trocar tem que trocar tudo.
7) Upgrade limitado - Não é qualquer componente que pode ser trocado. Geralmente somente o processador, memória e disco rígido permite troca.
8) Preço mais caro - Por ser um hardware mais refinado, seu custo é maior.
9) Frágil - As peças internas são mais delicadas e a carcaça mais fina e leve, um pequeno impacto pode ser fatal.


Alguns perfis de usuários tornam mais fácil a escolha. Quem dá preferência aos jogos, escolha o desktop, sua capacidade gráfica será necessária para suportar as animações. Os jogos pesados, especialmente os atuais, não funcionarão nos notebooks. O desktop também será necessário para quem precisa ter muito espaço em disco. Os HDs de notebooks não irão suportar mais de 1 Terabyte, pelo menos na tecnologia atual.

Quem usa apenas navegação na Internet, e-mails, comunicação instantânea, suíte para escritório, visualizar e editar fotos, e ouvir músicas, tanto faz desktop ou notebook. Quem precisa levar o computador de um lugar ao outro, quem viaja bastante e gosta de usar o próprio computador para as tarefas pessoais, é melhor um notebook.

O maior medo de quem tem um notebook é realmente o roubo. O proprietário de um deve ficar atento para não dar bobeira, principalmente na rua. O uso de criptografia no disco rígido é altamente recomendável, além de backups com maior frequência.

Quem se acostuma com um notebook dificilmente volta a ter um desktop. No geral é bem mais prático. O desktop é mais para quem joga, considerando os usuários domésticos.

As vantagens e desvantagens não se aplicam aos desktops do tipo All-in-One, pois eles podem possuir características semelhantes a de um notebook. Também não se aplicam aos netbooks, estes são equipamentos bem mais enxutos tornando impraticável a comparação com os desktops.

Espero não ter dificultado ainda mais a sua escolha!

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, 24 de janeiro de 2012

Como a senha de usuário é armazenada no Linux?

O Linux é um sistema multiusuário pois permite acesso simultâneo de múltiplos usuários ao computador. O sistema controla o acesso em contas de usuário para distinguir as pessoas diferentes que o usam. Cada usuário tem uma conta pessoal com um nome e uma senha.

Toda conta no sistema Linux tem uma entrada no arquivo '/etc/passwd'. Este arquivo contém entradas, uma linha por usuário, que especificam diversos atributos para cada conta. Cada entrada neste arquivo tem o mesmo formato, com campos separados por "dois pontos":

nome_do_usuário:senha:UID:GID:Nome Real:/diretório/pessoal:shell

Exemplo de arquivo '/etc/passwd':

root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash
fulano:x:500:500:Fulano da Silva:/home/fulano:/bin/bash
siclano:x:501:501:Siclano Souza:/home/siclano:/bin/bash
beltrano:x:502:503::/home/beltrano:/bin/bash

As distribuições atuais utilizam adicionalmente uma ferramenta de proteção de senha, o 'shadow'. Esta ferramenta serve para ocultar a representação criptografada das senhas do arquivo '/etc/passwd', substituindo por um x, e então armazenando-as no arquivo '/etc/shadow', que não possui permissão de leitura aos usuários comuns. O arquivo '/etc/shadow' armazena as senhas em um formato criptografado, com algumas informações adicionais relacionadas as senhas dos usuários. Contém uma entrada por linha, separada em campos, para cada usuário definido no '/etc/passwd'.

nome_do_usuário:senha:última alteração:mínimo:máximo:aviso de expiração:inativo:expiração:

O primeiro campo contém o nome que identifica a conta, o segundo contém a representação criptografada da senha do usuário. Os campos seguintes contém: dias passados desde 01/01/1970 da última alteração da senha; dias nos quais antes a senha não pode ser alterada; dias nos quais a senha precisa ser alterada; dias prévios para aviso de expiração; dias após expiração nos quais a conta será considerada inativa ou desativada; dias desde 01/01/1970 para a conta expirar e o último campo é reservado para uso futuro.

Exemplo de arquivo '/etc/shadow':

root:$6$utLIMf6gY40$Eoe.2M7uqTK1UBtnz3yz4T:14768:0:99999:7:::
daemon:*:14715:0:99999:7:::
lp:*:14715:0:99999:7:::
shutdown:*:14715:0:99999:7:::
ftp:*:14715:0:99999:7:::
nobody:*:14715:0:99999:7:::
postgres:!!:14855::::::
fulano:$6$nsd3oKxkg0$kIEvBac347MZXYfOnrc56ybz:14768:0:99999:7:::
siclano:$6$AaNgoXJSPsv/$cupVfet0y4cIYLpPSWyNQM:14771:0:99999:7:::
beltrano:$6$Qc3AYPleBx0$ikGowHMwzkqRz9QGZzQfwfu:14770:0:99999:7:::

As senhas armazenadas no arquivo '/etc/passwd', ou atualmente no arquivo '/etc/shadow', são codificadas na forma de hashes, gerados pela função crypt(). Atualmente as distribuições Linux utilizam como padrão o algoritmo SHA-512 ao invés do método DES tradicional do Unix.

A função crypt() recebe dois argumentos, a senha digitada pelo usuário e uma string denominada "salt". Esta string tem o propósito de "salgar" ou "inchar" o hash gerado pelo algoritmo de dispersão. Assim, o hash armazenado não é simplesmente proveniente da senha mas da senha mais o salt. Isto dificulta uma tentativa de descoberta por uso de "hash tables" pois a função crypt() precisa ser executada em cada comparação.

A versão da função crypt() na glibc2 possui uma caracteristica adicional. A string salt pode iniciar com caracteres que identificam o algoritmo de criptografia, ao invés do DES tradicional. Estes caracteres seguem o padrão $ID$, onde ID é um valor referente a um dos algoritmos a seguir:

ID     Algoritmo
1      MD5
2a     Blowfish
5      SHA-256
6      SHA-512

A string completa com o hash, que representa a senha, é armazenada no arquivo '/etc/shadow' no formato $ID$SALT$SENHA. O caractere "$" (cifrão) delimita cada item da string. Por exemplo a linha a seguir (Nota: há uma quebra de linha no meio do hash para facilitar a apresentação, no arquivo é somente uma única linha):

nome_do_usuário:$6$eKn9QGMQ$Ofi1OoClVpw/cCbTsD4YUKgfurcQoBxsZ9Tlk5VBjTp
AjSYFt.M9shPtQVnouNr4/3PRDP/eMqkoWQpuBxsRk1:15362:0:99999:7:::

Os caracteres em salt e na senha criptografada são extraídos do conjunto {a-z A-Z 0-9 ./}. Em um sistema Linux, o salt é criado de forma aleatória durante a configuração da senha do usuário.

A seguir um código exemplo utilizando a função crypt(), em linguagem C, que retorna a string completa $ID$SALT$SENHA (compilar no GCC com a opção -lcrypt):

#include <stdio.h>
#include <unistd.h>
#include <crypt.h>

int main(void) {
  char salt[] = "$6$eKn9QGMQ";
  char *password;
 
  password = crypt(getpass("Password:"), salt);
 
  puts(password);
  return 0;
}

A função crypt() também está incluída em outras linguagens de programação, como Perl, PHP, Python e Ruby. Na linguagem Perl pode-se usar a linha de comando a seguir, no prompt do shell, para invocar o interpretador Perl com a função crypt():

$ perl -e 'print crypt("senha","\$algoritmohash\$salt\$") . "\n"'

Por exemplo:

$ perl -e 'print crypt("1234","\$6\$eKn9QGMQ\$") . "\n"'

Como visto, o sistema Linux possui um mecanismo interessante e bastante eficiente para controlar as contas e senhas dos usuários. Veja mais no artigo "Administrando usuários e grupos no sistema Linux" (http://dan-scientia.blogspot.com/2010/07/administrando-usuarios-e-grupos-no.html).

domingo, 22 de janeiro de 2012

Problema de Lógica: O relógio quebrado

O relógio do quarto de Pedro está quebrado. A cada hora o relógio adianta 36 minutos. No entanto, exatamente uma hora atrás, o relógio parou mostrando 8:24 da manhã. Pedro sabe que o relógio mostrou o horário certo às 2 horas da manhã. Que horas são agora?






RESPOSTA






O relógio, de forma incorreta, funcionou das 2 horas da manhã até 8:24, quando parou, desta forma, funcionou por 6 horas e 24 minutos, ou 384 minutos. Cada 96 minutos deste tempo em funcionamento, na realidade correspondem a uma hora pois o relógio adianta 36 minutos a cada 60 minutos.

Dividindo o tempo em que o relógio esteve em funcionamento (384) pelos minutos que correspondem a uma hora real (96), percebe-se que o relógio funcionou por 4 horas (384/96). Pelo horário real, o relógio funcionou das 2 horas da manhã até 6 horas, que foi uma hora atrás, portanto, agora são 7 horas da manhã.

hora certa    hora no relógio
   2:00            2:00
   3:00            3:36
   4:00            5:12
   5:00            6:48
   6:00            8:24
   7:00

sábado, 21 de janeiro de 2012

Extrair o áudio de um DVD

No ambiente Linux existe um reprodutor multimídia com o qual é possível, dentre muitas funcionalidades, extrair o áudio de um filme em DVD. Trata-se do MPlayer (http://www.mplayerhq.hu/), uma aplicação de linha de comando com código aberto.

O MPlayer suporta e reproduz dezenas de formatos de vídeos, incluindo uma mídia física no formato DVD, utilizando a opção 'dvd://número_do_título'. Para especificar a saída de áudio em um arquivo usa-se a opção do driver de saída de áudio '-ao' com a subopção 'pcm', onde '-ao pcm' especifica o driver de saída de áudio raw PCM/wave para escrita em arquivo. A subopção pcm permite 'file=arquivo.wav' para especificar o nome do arquivo que será gerado.

Opções adicionais podem ser utilizadas caso houver interesse ou necessidade, por exemplo, a opção '-ss hh:mm:ss' inicia em determinada posição do vídeo, '-endpos segundos' encerra na posição dada, '-alang LL' especifica a linguagem do áudio, '-chapter capítulo' especifica o capítulo para reprodução e '-dvd-device /dev/XXX' especifica o caminho para o dispositivo DVD.

Um exemplo de linha de comando é apresentado a seguir, reproduzindo o título 1 do DVD, encerrando após 8 segundos e gerando o arquivo title1.wav:

$ mplayer dvd://1 -endpos 8 -ao pcm:file=title1.wav

Com este arquivo wave em mãos, pode-se converter pra qualquer outro formato de áudio que desejar, com a ferramenta que desejar. O formato de áudio raw PCM/wave é um dos melhores para manter o áudio na íntegra, sem qualquer compactação com perda de dados.

O MPlayer está disponível também para outras plataformas e sistemas, consulte a documentação. Existem muitas interfaces gráficas para o MPlayer mas para explorar todas as opções, a linha de comando é necessária.