segunda-feira, 30 de agosto de 2010

Problema de Lógica: As pérolas do rajá

Um rajá deixou às suas filhas certo número de pérolas e determinou que a divisão se fizesse do seguinte modo: a filha mais velha tiraria 1 pérola e um sétimo do que restasse; viria, depois, a segunda e tomaria para si 2 pérolas e um sétimo do restante; a seguir a terceira jovem receberia 3 pérolas e um sétimo do que restasse. E assim sucessivamente. A divisão proposta pelo velho rajá era justa e perfeita. Feita a partilha, cada uma das herdeiras recebeu o mesmo número de pérolas. Pergunta-se: Qual o número de pérolas? Quantas são as filhas do rajá?






RESPOSTA






Seja x o número total de pérolas do rajá e q1, q2, q3 etc. as quantidades para cada filha. Portanto x = q1+q2+q3 etc.

A primeira filha retirou 1 pérola mais 1/7 do restante:

q1 = 1 + 1/7 * (x-1) = (x+6)/7

Então restaram:

x - q1 = x - ((x+6)/7) = (6x-6)/7

A segunda retirou 2 pérolas mais 1/7 do restante:

q2 = 2 + 1/7 * ((6x-6)/7 - 2) = (6x+78)/49

Poderíamos agora calcular o restante e a quantidade para a terceira filha mas não é necessário. Como sabemos que as herdeiras receberam o mesmo número de pérolas, então, q1=q2=q3 etc. Assim, podemos igualar a quantidade q1 com q2 e encontrar o valor do número total de pérolas:

q1 = q2
(x+6)/7 = (6x+78)/49
x = 36

As pérolas eram em número de 36 e foram repartidas por 6 filhas. A primeira tirou 1 pérola e mais um sétimo de 35, isto é, 5; logo, tirou 6 pérolas e deixou 30. A segunda, das 30 que encontrou, tirou 2 mais um sétimo de 28, que é 4; logo, tirou 6 e deixou 24. A terceira, das 24 que encontrou, tirou 3 mais um sétimo de 21, ou 3. Tirou portanto 6, deixando 18 de resto. A quarta, das 18 que encontrou, tirou 4 mais um sétimo de 14. E um sétimo de 14 é 2, recebendo também 6 pérolas. A quinta encontrou 12 pérolas e retirou 5 e um sétimo de 7, isto é, 1; logo tirou 6. A sexta filha recebeu, por fim, as 6 pérolas restantes.

sábado, 28 de agosto de 2010

Magnitude de objetos celestes

A magnitude é uma medida do brilho de um objeto celeste. Números mais altos de magnitudes representam objetos menos brilhantes, números mais baixos de magnitudes representam objetos mais brilhantes e números negativos de magnitude indicam brilho extremo.

O primeiro sistema de medida do brilho de objetos celestes foi desenvolvido pelo astrônomo grego Hiparco, no século II a.C. Ele verificou que as estrelas poderiam ser classificadas de acordo com o brilho que apresentavam quando observadas a olho nu. Sem meios de medir sua radiação, ele escolheu visualmente as mais brilhantes e as definiu como de grandeza 1. As um pouco mais fracas, chamou de grandeza 2, e assim por diante até chegar às estrelas que mal podia ver, que classificou como grandeza 6.

Naquela época a intensidade visual era associada ao tamanho dos objetos, desta forma utilizava-se a palavra grandeza. Atualmente, a intensidade visual está relacionada à distância de um objeto, não tendo relação com seu tamanho e brilho intrínseco e o termo adotado passou a ser magnitude. O brilho que um objetos celeste aparenta ter, quando visto a olho nu a partir da Terra, determina sua magnitude aparente ou visual. Já a medida real ou do seu brilho intrínseco é definida pela magnitude absoluta.

O sistema quantitativo atual foi desenvolvido em 1856 pelo astrônomo inglês Norman Robert Pogson, que procurou criar um sistema que concordasse tanto quanto possível com as antigas medições qualitativas feitas pelos gregos. Com o auxílio de um fotômetro, Pogson elaborou um modelo matemático para dar conta do sistema de magnitudes.

A expressão que dá a magnitude visual ou aparente de uma estrela em termos de sua luminosidade é conhecida como fórmula de Pogson e é escrita como:

m = -2,5 log F + C

Onde m é a magnitude aparente ou visual da estrela, F é a luminosidade da estrela recebida por um detector colocado sobre a superfície da Terra, e C é a constante usada para definir o zero da escala de magnitude, baseada na magnitude aparente da estrela Vega.

A equação de Pogson mostra que a escala de magnitudes é uma relação logarítmica. A regra utilizada por esta escala é tal que uma diminuição sucessiva de uma unidade em magnitude representa um aumento no brilho aparente por um fator de 2,512. Deste modo uma diferença de 5 magnitudes corresponde a um aumento de 100 vezes no brilho do objeto celeste. Trata-se da medição feita por Pogson através do fotômetro, onde observou-se que a diferença de brilho entre uma estrela de grandeza 1 e uma de grandeza 6 era de aproximadamente 100 vezes.

A magnitude aparente não nos dá uma ideia do brilho verdadeiro de um objeto, que às vezes parece fraco devido à grande distância que se encontra, enquanto outros nos parecem muito brilhantes porque estão muito mais perto. A magnitude absoluta é o brilho que os objetos apresentariam, se estivessem a uma mesma distância, padronizada em 10 parsecs (1 parsec = 30,857x10^12 km). Deste modo, vemos que a magnitude absoluta mede quão brilhante um objeto apareceria para nós se ele fosse tirado de sua posição verdadeira e colocado a uma distância padrão de 10 parsecs, ou aproximadamente 32,6 anos-luz.

Se a distância real de uma estrela é d parsecs, sua magnitude absoluta M e sua magnitude aparente m estão relacionadas pela equação:

M = m - 5 log (d/10)

Abaixo uma tabela com as estrelas mais brilhantes de acordo com a magnitude aparente e respectiva magnitude absoluta e distância à Terra:

Estrela      magnitude      magnitude      distância à Terra
             aparente       absoluta       em parsecs

Sol          -26,74          4,83            0,00000485
Sirius        -1,46          1,43            2,64
Canopus       -0,72         -5,63           96
Arcturus      -0,04         -0,29           11,24
Vega           0,03          0,58            7,76
Rigel          0,18         -6,72          240
Procyon        0,34          2,63            3,49
Betelgeuse     0,42         -6,05          197

A visão humana, sem instrumentos, é capaz de enxergar objetos até a sexta magnitude, com o auxílio de um binóculo ou de um telescópio o alcance torna-se maior, por exemplo o telescópio Hubble detecta objetos até a trigésima magnitude aparente.

quinta-feira, 26 de agosto de 2010

Execução de aplicações gráficas remotas pelo redirecionamento do X11 com o SSH

O protocolo SSH possui a habilidade de redirecionar seguramente aplicações gráficas, do ambiente X Window, para uma conexão SSH criptografada. Assim, a aplicação gráfica é executada na máquina remota e sua janela é exibida na máquina local, em um tráfego de rede protegido.

Se a máquina remota possui o sistema Linux, que é o se será abordado neste artigo, a implementação do "X11 Forwarding" torna-se simples e os clientes poderão ser tanto sistemas Linux como Windows.

Para isto poder acontecer são necessários alguns pré-requisitos. Primeiro, na máquina remota o servidor X deve estar em estado de execução. Segundo, o sistema da máquina remota precisa estar configurado para permitir o acesso por SSH. E finalmente, o servidor SSH (SSHd) da máquina remota e o cliente SSH da máquina local precisam estar configurados para permitir o X11 Forwarding.

O primeiro e o segundo pré-requisitos não serão abordados neste artigo, vamos partir do terceiro.

A configuração do servidor SSH se faz pelo arquivo "/etc/ssh/sshd_config". Neste arquivo encontram-se duas linhas que devem ter seus argumentos como mostrado abaixo, para ativar o redirecionamento do X11:

X11Forwarding yes
X11DisplayOffset 10

O parâmetro "X11Forwarding" marcado com "yes" especifica que o redirecionamento do X11 está permitido. O parâmetro "X11DisplayOffset" especifica o primeiro valor disponível para redirecionamento do X11 pelo servidor SSH, prevenindo que o SSHd interfira nos servidores X11 reais. O padrão é 10.

Basta reiniciar o serviço do SSHd para concluir esta parte da configuração da máquina remota. Agora vamos para o cliente, que é a máquina local onde irá receber as janelas das aplicações gráficas.

Em um cliente com sistema Linux, existem algumas formas de ativar o X11 Forwarding em uma sessão SSH. Uma é editar o arquivo de configuração "/etc/ssh/ssh_config" e alterar duas linhas para "ForwardX11 yes" e "ForwardX11Trusted yes". Esta forma ativa o recurso permanentemente para todos os usuários que forem utilizar o SSH. Uma outra forma é diretamente na linha de comando do SSH, com os parâmetros -X ou -Y. O parâmetro -X equivale ao "ForwardX11 yes" e o parâmetro -Y ao "ForwardX11Trusted yes".

Temos então duas classes de clientes, com o redirecionamento não-confiável do X11 e com o redirecionamento confiável do X11, respectivamente -X e -Y. O redirecionamento confiável do X11 significa que o cliente confia no servidor X, no qual está conectando pelo SSH, e que então neste servidor X não há qualquer programa malicioso como keylogger, screenshot ou algo que vá espionar sua conexão. O redirecionamento não-confiável do X11 significa uma conexão para um sistema desconhecido ou inseguro. Este tipo de conexão gera um cookie com o xauth e utiliza uma extensão de segurança para limitar o acesso. Algumas aplicações podem não funcionar neste modo não-confiável por causa destas limitações na segurança.

Assim, em um cliente com sistema Linux devemos executar o cliente SSH para abrir um terminal do sistema remoto e qualquer aplicação gráfica que for executada por este terminal será aberta na área de trabalho do cliente, que é a máquina local. Segue um exemplo de linha de comando para o SSH:

$ ssh -CY -c blowfish 192.168.1.102

Outros parâmetros podem ser utilizados na linha de comando do SSH, de acordo com a necessidade ou preferência. Por exemplo o parâmetro -C ativa a compactação de dados na transferência pela rede, o parâmetro -c especifica a cifra de criptografia. Este assunto sai do escopo deste artigo, é só um lembrete.

Em um cliente com sistema MS Windows são necessários um servidor X, para receber as janelas das aplicações remotas, e um cliente SSH, para estabelecer a conexão segura com o servidor remoto.

Um servidor X para Windows compatível com o X11 é o Xming (http://www.straightrunning.com/XmingNotes/). Sem entrar em muitos detalhes, pois o procedimento é fácil, instale e execute o Xming. Seu ícone aparecerá na barra de tarefas. Posicionando o cursor sobre seu ícone, o software mostra o endereço do servidor X no cliente Windows, algo como "Xming Server:0.0".

O PuTTY (http://www.chiark.greenend.org.uk/~sgtatham/putty/) é uma implementação gratuita de um cliente SSH para Windows. Não requer instalação, basta executá-lo para abrir sua janela de configuração. Na janela de configuração do PuTTY, na categoria "Session" escreva o nome da máquina ou o IP em "Host Name (or IP address)" e a porta se for o caso. Na categoria "Connection/SSH/X11" marque a quadrícula "Enable X11 forwarding" e em "X display location" escreva sem as aspas "localhost:0.0", que é o endereço do servidor X instalado no cliente Windows. Concluída esta configuração, basta clicar no botão "Open" para o PuTTY abrir a janela do terminal remoto. Qualquer aplicação gráfica que for executada por este terminal será aberta na área de trabalho do cliente Windows.

Como visto, pela ferramenta SSH é possível não só executar aplicações em modo texto como também aplicações gráficas. A administração de sistemas remotos torna-se bastante completa com este recurso a mais. Consulte as documentações das ferramentas citadas neste artigo para mais informações.

segunda-feira, 23 de agosto de 2010

I don't want directions

Adaptando o mundo moderno aos costumes antigos...


* clique na imagem para exibi-la em tamanho natural.

Referência: XKCD (http://xkcd.com/783/)

Usando o msmtp com o Mutt para envio de anexos

O Mutt é um programa que permite aos usuários ler, salvar e compor mensagens de e-mail, em um ambiente em modo texto. Programas deste tipo são formalmente chamados de MUA (Mail User Agent).

Para o envio de e-mail pela linha de comando com arquivos binários em anexo, o resultado é mais garantido quando utiliza-se o Mutt para formatar a mensagem. O Mutt trata adequadamente os tipos MIME e assim o recebimento do arquivo binário é devidamente reconhecido pelo programa cliente do destinatário.

O Mutt pode trabalhar com o programa msmtp para o envio das mensagens, ao invés de sua função interna de SMTP ou do sendmail, para isso é necessária uma simples configuração no seu arquivo ~/.muttrc, desde que o programa msmtp esteja devidamente configurado (veja em: http://dan-scientia.blogspot.com/2010/08/enviando-email-pela-linha-de-comando.html).

Um exemplo de configuração para o ~/.muttrc é apresentado a seguir:

set sendmail = "/usr/bin/msmtp -a gmail"
set realname = "Nome do Usuario"
set from = usuario@gmail.com
set use_from=yes
set envelope_from=yes

Toda a construção do e-mail será agora pela linha de comando do Mutt. Os principais parâmetros de entrada são:

-a arquivo
     Anexa um arquivo na mensagem usando MIME.
-b endereço
     Especifica o endereço de e-mail para cópia oculta (Bcc).
-c endereço
     Especifica o endereço de e-mail para cópia (Cc).
-H rascunho
     Especifica um arquivo de rascunho com os dados do cabeçalho e corpo da mensagem.
-i arquivo
     Especifica um arquivo texto para incluir no corpo da mensagem.
-s assunto
     Especifica o assunto da mensagem.
--   Marca o final dos parâmetros. Obrigatório quando usa-se o parâmetro -a pois separa os nomes dos arquivos dos endereços de e-mail.

Para compor uma nova mensagem pode-se usar uma linha de comando semelhante a abaixo:

$ mutt -c fulano@provedor.com.br -i arquivo.txt -s "Assunto da mensagem" -a foto.jpg -- destinatario@provedor.com.br

Com o comando acima o Mutt abrirá um editor para confirmar os itens de cabeçalho e corpo da mensagem. Para automatizar o envio do e-mail e assim não abrir o editor do Mutt, podemos utilizar uma mensagem pré preparada em um arquivo texto, para compor o corpo da mensagem, e direcioná-la para o programa Mutt:

$ cat mensagem.txt | mutt -c fulano@provedor.com.br -s "Assunto da mensagem" -a foto.jpg -- destinatario@provedor.com.br

O próximo exemplo faz uso do parâmetro -i para inserir o texto no corpo da mensagem porém direciona o dispositivo nulo (ele retorna uma indicação de final de arquivo) na edição do Mutt, para automatizar o envio.

$ mutt -c fulano@provedor.com.br -i mensagem.txt -s "Assunto da mensagem" -a foto.jpg -- destinatario@provedor.com.br < /dev/null

E o exemplo a seguir utiliza o parâmetro -H que recebe um arquivo texto contendo toda a estrutura para o cabeçalho e corpo do e-mail, chamado arquivo de rascunho:

$ mutt -H email.txt -a foto.jpg < /dev/null

O conteúdo para este arquivo de rascunho segue o modelo abaixo:

To: fulano@provedor.com.br, sicrano@provedor.com.br
Cc: beltrano@provedor.com.br
Bcc: johndoe@provedor.com.br
From: usuario@gmail.com
Subject: Assunto do e-mail

Texto do corpo da mensagem.

Outra opção para automatizar o envio é redigir a mensagem na própria linha de comando:

$ echo "Texto do corpo da mensagem." | mutt -c fulano@provedor.com.br -s "Assunto da mensagem" -a foto.jpg -- destinatario@provedor.com.br

O Mutt é um programa cliente de e-mail completo, com diversas diretivas para configuração e personalização. Seu ambiente, em modo texto, é controlado completamente pelo teclado e possui tudo o que é necessário para um software cliente de e-mail. Como visto neste artigo, somente por sua linha de comando já é possível enviar um e-mail automaticamente, isto pode ser útil em um shell script.

Se você acabar entrando no ambiente de edição do Mutt, será necessário conhecer as teclas dos comandos para operar o ambiente. Quem sabe num próximo artigo.

Mais informações em http://www.mutt.org/ ou nas páginas manuais do Mutt.

domingo, 22 de agosto de 2010

Enviando email pela linha de comando usando o msmtp

O msmtp é um cliente de SMTP que em seu modo de operação padrão transmite um e-mail para um servidor SMTP, por exemplo para seu provedor, que faz a entrega. Pode ser usado por um programa cliente de e-mail (MUA) e é compatível com o programa sendmail. Dentre outros atributos o msmtp pode trabalhar com diversos métodos de autenticação e com múltiplas contas de e-mail.

O msmtp é executado pela linha de comando e pode ser configurado por arquivo alcançável em todo o sistema (/etc/msmtprc), por arquivo restrito ao usuário (~/.msmtprc) ou diretamente por parâmetros na linha de comando. Um exemplo de conteúdo para o arquivo de configuração é o apresentado a seguir:

account gmail
host smtp.gmail.com
port 587
timeout off
protocol smtp
auto_from off
from usuario@gmail.com
maildomain gmail.com
auth on
user usuario
password suasenha
tls on
tls_starttls on
tls_certcheck off
logfile ~/.msmtp.log
syslog LOG_MAIL

account default: gmail

Este exemplo serve para o servidor SMTP do Gmail. Múltiplas contas podem ser configuradas neste arquivo, identificadas pela linha "account nome_da_conta". É recomemdável proteger o arquivo de configuração do msmtp com permissões de leitura e escrita somente para o próprio usuário (0600, -rw-------), senão a senha ficará exposta aos outros usuários.

O msmtp possui muitas opções para sua linha de comando mas basicamente o comando pode ser "msmtp " se o arquivo de configuração existir. Com este comando simples o programa inicia um prompt para a entrada do conteúdo do e-mail, para o cabeçalho e corpo. A combinação de teclas "Ctrl+D" encerra esta edição. Entretanto, pode ser mais prático utilizar um arquivo texto contendo toda esta estrutura de mensagem e direcioná-lo para a entrada padrão do msmtp. Um exemplo de como pode ser este arquivo texto é apresentado abaixo:

To: fulano@provedor.com.br, sicrano@provedor.com.br
Cc: beltrano@provedor.com.br
Bcc: johndoe@provedor.com.br
From: usuario@gmail.com
Subject: Assunto do e-mail

Texto do corpo da mensagem.

A linha de comando do msmtp ficaria então desta forma:

$ msmtp --read-recipients < email.txt

Para não utilizar um arquivo de configuração é necessário passar todos os dados do servidor SMTP pela linha de comando do msmtp. Aproveitando o exemplo da conta do Gmail mostrado anteriormente, a seguir está o exemplo da linha de comando equivalente:

$ msmtp --host=smtp.gmail.com --port=587 --timeout=off --protocol=smtp --auto-from=off --from=usuario@gmail.com --maildomain=gmail.com --auth=on --user=usuario --tls=on --tls-starttls=on --tls-certcheck=off --syslog=LOG_MAIL --read-recipients < email.txt

A senha do servidor não é passada pela linha de comando, ela é solicitada pelo msmtp em um prompt semelhante ao abaixo:

password for usuario at smtp.gmail.com:

Outros parâmetros poderão ser úteis, o parâmetro --file=arquivo é usado para indicar outro arquivo de configuração ao invés do padrão e --account=nomedaconta para indicar outra conta de e-mail ao invés da conta padrão.

O conteúdo de uma mensagem de e-mail é sempre em texto ASCII, porém é possível anexar um conteúdo binário no corpo da mensagem. Um arquivo binário pode ser codificado para o formato ASCII por ferramentas como o uuencode ou o uuenview, este último mais poderoso. A linha de comando para um e-mail com anexo binário pode ser como no exemplo a seguir:

$ (cat email.txt; uuenview foto.jpg) | msmtp --read-recipients

Neste exemplo tanto o conteúdo do arquivo email.txt como o resultado da codificação do arquivo foto.jpg são canalizados para a entrada padrão do comando msmtp. Contudo, aqui tem uma ressalva, o programa msmtp não trata garantidamente os tipos MIME e, dependendo do programa cliente ou provedor que irá receber a mensagem, o arquivo anexo poderá não ser reconhecido no recebimento. Por exemplo, em testes feitos por mim, contas do Gmail e do Yahoo receberam adequadamente mas a conta do Terra não. A solução garantida é utilizar outra ferramenta para formatar o e-mail e trabalhar em parceria com o msmtp, no envio. Uma boa ferramenta para linha de comando é o Mutt, que será descrito em um próximo artigo.

Mais informações em http://msmtp.sourceforge.net/ ou nas páginas manuais do msmtp.

quinta-feira, 19 de agosto de 2010

O conhecimento comum e o equilíbrio de Nash

O conceito do conhecimento comum é a base na teoria dos jogos. A clássica teoria dos jogos assume que todo conhecimento é "conhecimento comum", exceto por partes específicas de informações que são percebidas assimetricamente, para justificar o conceito do equilíbrio de Nash. Um fato é de conhecimento comum se todos sabem o fato, todos sabem que todos sabem o fato, todos sabem que todos sabem que todos sabem o fato, e assim infinitamente. Se é de conhecimento comum que todos os jogadores são racionais, ou escolhem a melhor reação, então em condições apropriadas eles produzem um equilíbrio de Nash.

Por vários anos foi pensado que a existência de conhecimento comum da racionalidade para os jogadores no jogo era fundamental. Acontece que em um jogo com dois jogadores o conhecimento comum da racionalidade não é necessário como uma condição para estratégias que levem ao equilíbrio de Nash. Um exemplo é o dilema do prisioneiro, onde a pior estratégia para ambos conduz a um melhor resultado cooperativo, um equilíbrio de Nash.

Dilema do prisioneiro:

Dois suspeitos, A e B, são presos pela polícia. A polícia tem provas insuficientes para os condenar, mas, separando os prisioneiros, oferece a ambos o mesmo acordo: se um dos prisioneiros, confessando, testemunhar contra o outro e esse outro permanecer em silêncio, o que confessou sai livre enquanto o cúmplice silencioso cumpre 10 anos de sentença. Se ambos ficarem em silêncio, a polícia só pode condená-los a 6 meses de cadeia cada um. Se ambos traírem o comparsa, cada um leva 5 anos de cadeia. Cada prisioneiro faz a sua decisão sem saber que decisão o outro vai tomar, e nenhum tem certeza da decisão do outro. A questão que o dilema propõe é: o que vai acontecer? Como o prisioneiro vai reagir?

Existem alguns jogos divertidos que possuem equilíbrios de Nash que dependem do nível de recursão de "quem sabe de quem sabe o que". Os próximos problemas exploram este assunto.

O pai e os filhos:

Um pai honesto mas brincalhão disse a seus dois filhos responsáveis que ele colocou R$ 10, R$ 100, R$ 1.000 ou R$ 10.000, com igual probabilidade, em um envelope e dez vezes o tal dinheiro em outro envelope. Ele deu um envelope para cada filho. Um filho encontrou R$ 10.000 e o segundo R$ 1.000. O pai chamou cada um a parte e perguntou particularmente se ele gostaria de trocar. Cada um disse "sim". O pai relatou cada uma destas respostas para o outro irmão. Quantas vezes precisará o pai repetir este processo até que um dos filhos diga "não"?

As mulheres de Sevita:

Os Sevitãos vivem como famílias monogâmicas em um pequeno vilarejo onde literalmente todos sabem o que todos estão fazendo, literalmente em todo o tempo. A única assimetria informacional é que nenhuma esposa sabe se seu próprio marido é mulherengo, embora toda esposa saiba a conduta de todos os outros maridos no vilarejo. A punição para um marido mulherengo é ser marcado pela sua esposa com um M marrom na testa durante à noite enquanto dorme. Esta punição é somente imposta pela esposa que soube com convicção que seu marido é culpado.

Desnecessário anunciar, nenhum marido jamais foi marcado. Mas um dia uma mulher de outro vilarejo fez uma visita. Indo embora no dia seguinte, ela confidenciou para as mulheres de Sevita que agora há pelo menos um mulherengo no vilarejo. Nada aconteceu durante cinco dias. Mas na sexta noite um certo número de maridos foram marcados com o M marrom. Quantos maridos foram marcados? Quantos maridos mulherengos há neste lugar? Como pode isto acontecer, já que a mulher indo embora não disse para as mulheres de Sevita nada que elas já não saibam - que agora há pelo menos um mulherengo no meio delas?

O problema da Cor dos Olhos postado neste blog também é sobre este assunto (http://dan-scientia.blogspot.com/2009/08/problema-de-logica-cor-dos-olhos.html).

sábado, 14 de agosto de 2010

Corrida de Vetores

A corrida de vetores é um jogo de papel e caneta de origem desconhecida e que pode ser jogado por dois ou mais jogadores. Para este jogo utiliza-se um papel quadriculado, preferencialmente com os quadradinhos da grade possuindo 5 milímetros de dimensão, e contendo um desenho imitando um circuito de Fórmula 1. Este jogo simula uma corrida de carro.

Na corrida de vetores cada carro é representado por um vetor. Os vetores indicam a aceleração, a direção e a posição do carro (na ponta da seta). Os carros sempre devem ficar na interseção das linhas do quadriculado e não no interior de um quadradinho.

Durante cada movimento um carro pode deslocar-se no mesmo número de quadradinhos e direção do movimento anterior ou, pode deslocar-se para um dos pontos ao redor desta projeção do movimento anterior. A escolha entre pontos próximos fará com que diminua o vetor e consequentemente reduza a velocidade do carro e a escolha entre pontos mais distantes aumentará o vetor e a velocidade do carro. A direção também pode ser alterada com a escolha de pontos laterais ao ponto central da projeção.

O deslocamento do carro se dá nesta sucessão de vetores ligados e a posição atual do carro estará na extremidade do último vetor adicionado. A figura abaixo ilustra o deslocamento do carro partindo do repouso, cada círculo indica um ponto para onde o carro pode deslocar-se e a linha tracejada é a projeção do movimento anterior, que marca o ponto central dos nove pontos permitidos para o deslocamento.


Semelhante a uma corrida real onde os carros devem respeitar o posicionamento e a desaceleração, para realizarem uma curva com um bom aproveitamento, neste jogo os vetores devem seguir esta mesma destreza nos movimentos dos carros. Desta forma, os jogadores devem planejar cada movimento, prevendo os próximos para que seu carro não saia da pista. O percurso formado por esta sucessão de vetores é semelhante a um percurso de um carro em uma corrida real.

Toda mudança de direção ou de velocidade ocorre com uma mesma taxa de variação que é, durante cada rodada, um quadradinho por vez. Assim, por exemplo um vetor com cinco quadradinhos de comprimento precisará de 4 rodadas para reduzir seu comprimento à um quadradinho apenas.

Para realizar o jogo deve-se então ter uma folha de papel quadriculado e uma caneta, ou canetas de cores distintas para cada participante. Nesta folha faz-se um desenho de uma pista de fórmula 1 com a linha de largada e chegada. A largura da pista deve comportar o número de jogadores lado a lado, seis quadradinhos de largura é uma boa medida. Após a definição da ordem dos jogadores, cada jogador marca o seu ponto inicial sobre a linha de largada. Se houver mais jogadores que o espaço disponível na linha de largada, pode-se usar as linhas de trás. Seguindo a ordem dos jogadores, a cada rodada cada jogador marca o seu vetor e assim sucessivamente até que todos completem a volta na pista. A classificação final é de acordo com a ordem de chegada ou pode-se definir o vencedor aquele que, após terminada toda a rodada, tiver passado a linha de chegada com maior distância.

Durante o percurso dois carros não podem estar sobre um mesmo ponto, deve-se escolher um ponto livre, dentro da pista e a reta do vetor não pode passar fora da pista. É permitido ocupar um ponto que já foi ocupado por outro jogador em uma rodada anterior e os vetores podem cruzar-se.

Dependendo da situação, pode ocorrer do jogador não ter um ponto livre dentro da pista, seja por ter suas opções já ocupadas pelos outros jogadores ou seja por estar em uma velocidade que não permita reduzir a tempo e por exemplo realizar uma curva. Para estas situações existem diversas regras que devem ser combinadas pelos jogadores. Existe definir que o jogador não poderá realizar a jogada e na próxima deverá reiniciar sua velocidade do zero, ou realizar a jogada colidindo com outro jogador ou saindo da pista e reiniciar sua velocidade do zero. Pode-se ainda aplicar punições como por exemplo ficar uma rodada sem jogar e o deslocamento fora da pista deve ser de um em um quadradinho. O jogador vítima da colisão normalmente segue sua jogada normalmente. Tudo é combinado antes da corrida.


Se quiser jogar no computador existe um site que possui uma versão em Java deste jogo, chama-se Vector Racer (http://vectorracer.boschloo.net/).

terça-feira, 10 de agosto de 2010

A tecnologia RAID

O RAID, atualmente um acrônimo para "Redundant Array of Independent Disks" ou "Arranjo Redundante de Discos Independentes", é uma tecnologia usada para proporcionar confiança e redundância de dados e aumentar a performance. Trata-se de uma tecnologia que combina dois ou mais discos rígidos para formar um único volume de armazenamento, ou seja, é um conjunto de discos que funcionam como se fossem somente um. Pode ser implementado via hardware ou software e possui diversos níveis de combinação em diversos arranjos.

Alguns arranjos RAID proporcionam uma alta performance pois múltiplos discos podem ser acessados simultaneamente e outros arranjos RAID proporcionam proteção de dados com espelhamento de discos ou cálculo de paridade.

Um RAID por hardware requer uma placa controladora, normalmente com tecnologia única para cada fabricante. Na implementação em hardware os discos físicos ficam transparentes para o sistema operacional e o sistema enxerga somente um único volume de armazenamento. A maioria das implementações em hardware suportam o "hot swapping", permitindo que discos com falha sejam substituídos enquanto o sistema está sendo executado.

Um RAID por software é criado com a combinação de partições e discos no ambiente do sistema operacional. Não é necessária uma placa controladora porém o processamento fica dependente do processador da máquina.

Os diferentes arranjos RAID são nomeados com a palavra RAID seguida de um número, por exemplo RAID 0, RAID 1, que indica seu nível. Os níveis RAID padronizados formam o conjunto básico de arranjos RAID e empregam a segmentação, o espelhamento ou a paridade. O RAID padrão utiliza a numeração de 0 a 6. Ainda existem implementações RAID não padronizadas e também implementações híbridas ou combinadas, por exemplo o RAID 0+1.

O RAID 0 não é verdadeiramente um RAID pois não oferece redundância, apenas distribui os dados entre os discos. Os dados são divididos em pequenos segmentos e distribuídos entre os discos. A vantagem é ter um aumento na performance e ter fácil implementação. A desvantagem é justamente a não redundância, isto é, não oferece a tolerância a falha, os dados armazenados não podem ser recuperados em caso de falha em um disco. É recomendado para edição de áudio e vídeo, servidor web e design gráfico. Necessita de pelo menos dois discos.


O RAID 1 cria um espelhamento dos dados em dois ou mais discos. É bastante útil quando a confiança é mais importante do que a capacidade de armazenamento. A vantagem são os 100% de redundância que aumentam geometricamente com a adição de novos discos. A desvantagem é que a capacidade de armazenamento cai para pelo menos a metade. É recomendado para aplicações financeiras e servidores de banco de dados pequenos. Necessita de pelo menos dois discos.


O RAID 2 implementa um mecanismo de detecção de falhas em discos rígidos, assim todos os discos ficam monitorados pelo mecanismo. Atualmente é pouco usado pois praticamente todos os discos rígidos novos já incluem mecanismos de detecção de falhas e então não há aplicação comercial para o RAID 2.

O RAID 3 e o RAID 4 distribuem os dados segmentados entre os discos e adotam um disco dedicado para paridade, proporcionando a redundância. O RAID 3 usa a segmentação em bytes enquanto o RAID 4 usa em blocos. Ambos RAID 3 e RAID 4 foram rapidamente substituídos no mercado pelo RAID 5. Necessitam de pelo menos três discos.


O RAID 5 usa a segmentação em blocos para distribuir os dados e possui a paridade dos dados também distribuída entre os discos. Tem a vantagem de usar o mínimo de sobrecarga no acesso de leitura aos discos e possibilita um melhor aproveitamento do espaço de armazenamento quando comparado ao RAID 1, ou seja, um menor custo para a redundância. A desvantagem está na performance ruim na escrita devido ao controle de paridade. É recomendado para servidores de arquivo e de aplicação, servidores de banco de dados e servidores web, e-mail e intranet. Necessita de pelo menos três discos.


O RAID 6 extende o RAID 5 com uma paridade adicional, da mesma forma segmenta os dados em blocos entretanto implementa dois blocos de paridade, distribuídos entre os discos. A vantagem está numa melhor redundância quando implementado em um número alto de discos utilizados pois pode tolerar falhas em mais de um disco simultaneamente. A desvantagem está na perda de performance na escrita. Necessita de pelo menos quatro discos.


O RAID 0+1 é uma combinação do RAID 0 com o RAID 1, onde os dados são segmentados entre os discos para melhorar a performance mas também utiliza o espelhamento de disco para a redundância. A vantagem está nas altas taxas de transferências de dados aliada a pelo menos 100% de redundância. A desvantagem é possuir um custo maior e escalabilidade limitada inerente ao alto custo. É recomendado a servidores de banco de dados que requerem alta performance e tolerância a falhas. Outra combinação é o RAID 1+0. A diferença está na localização de cada sistema RAID, o RAID 0+1 é um espelhamento da segmentação enquanto o RAID 1+0 é uma segmentação de espelhos. Necessitam de pelo menos quatro discos.


Existem muitos outros níveis, por exemplo RAID 0+3 e 3+0, RAID 1+0+0, RAID 5+0 e 0+5, RAID 5+1, que são justamente combinações entre os diversos padrões RAID para ganhar performance e ou redundância adicional.

É necessário um artigo específico para descrever as características, vantagens e desvantagens para cada nível de RAID, este artigo foi apenas uma introdução.

Neologismo na computação

Chama-se de neologismo a criação de novas palavras na língua ou atribuição de novos sentidos a palavras já existentes. No mundo da computação o neologismo ocorre com uma grande frequência. Estas palavras surgem para suprir uma necessidade vocabular, que pode ser momentânea mas às vezes, quando muito utilizada, acaba se estabelecendo no idioma e se torna parte do léxico.

Como exemplos de neologismos na computação, temos: salvar, escanear, logar, deslogar, ripar, ressetar, rebootar etc. Geralmente são palavras da língua inglesa que são pronunciadas e escritas de uma forma aportuguesada.

Em muitos casos a expressão já possui uma tradução para a língua portuguesa e o uso destas palavras acaba sendo um erro. Por exemplo dizer "embedar" em vez de "incorporar", "downloadar" em vez de "baixar", "printar" em vez de "imprimir", "setar" em vez de "configurar" e "atachar" em vez de "anexar" passa a ser um atentado à língua portuguesa.

Embora existam palavras que estão incorporadas no léxico, algumas devem ser evitadas, são os casos de "customizar" pois deve ser usado "personalizar", "deletar" pois deve ser usado "apagar" e "estartar" pois deve ser usado "iniciar".

Atualmente a moda é dizer "googar" e "tuitar", são tecnologias na Internet com grande popularidade. Tudo quanto é novidade acaba formando um neologismo, isto é característica de uma língua viva. Há até um website norte-americano, o "Word Spy" (http://wordspy.com/), que mantém um guia para estas novas palavras.

sexta-feira, 6 de agosto de 2010

Problema de Lógica: Letras na resposta

Atenção, resposta logo após o problema!

Quantas letras existem na sua resposta a esta pergunta?





RESPOSTA





Cinco

quinta-feira, 5 de agosto de 2010

Copiando arquivos pela rede em modo texto

Em sistemas Linux podemos copiar arquivos entre máquinas de uma rede utilizando uma ferramenta do pacote OpenSSH. O OpenSSH é uma versão gratuita das ferramentas de conectividade SSH. O OpenSSH codifica todo o tráfego para eliminar qualquer ataque de escuta ou rapto de conexão. A suíte OpenSSH traz soluções que substituem o rlogin, telnet, ftp e o rcp.

A ferramenta para cópia remota e segura de arquivos é o scp (secure copy). O scp copia arquivos entre máquinas em uma rede usando a mesma autenticação e segurança da ferramenta ssh. São permitidas cópias entre uma máquina local e uma remota ou entre duas máquinas remotas. Para que o scp funcione é necessário que a máquina remota tenha o servidor sshd ativo.

A sintaxe básica e resumida do comando está na linha abaixo:

scp [-Cr] [-P porta] [[usuario@]host1:]arquivo1 ... [[usuario@]host2:]arquivo2

Um exemplo é:

scp joao@192.168.0.105:/home/joao/arquivo.ext /home/maria/

O comando acima copia o arquivo.ext da máquina remota no endereço 192.168.0.105, usando a conta do usuário joao, para a máquina local, de onde está sendo executado o comando. Se a conta do usuário joao tiver uma senha então será solicitada para autorizar a cópia.

Existem diversas opções para a linha de comando, citei apenas a "-C" que ativa a compactação para a transferência, a "-r" que copia recursivamente um diretório e "-P porta" para caso a porta não seja a padrão. A página manual traz uma descrição de todas as opções.

A velocidade da cópia obviamente depende da estrutura da rede. Em uma rede de 100 Mbits a velocidade máxima teórica é 12,5 MB/s.

Mais informações em: http://www.openssh.org/

quarta-feira, 4 de agosto de 2010

Informações nos arquivos MP3

O ID3 é um formato muito popular de etiqueta de identificação para arquivos de áudio. Uma etiqueta ID3 é um recipiente de dados anexado em um arquivo MP3, somente MP3. Pode armazenar informações relevantes à música contida no próprio arquivo, como o nome da música, do compositor, do disco, o gênero, o ano e até uma imagem com a capa do disco.

Diversos softwares como iTunes, Windows Media Player, WinAmp e hardwares "MP3 players" como o iPod, aparelhos de DVD e de som automotivo suportam a etiqueta ID3. Assim, quando um arquivo MP3 é reproduzido nestes equipamentos, as informações são mostradas no visor.

Para inserir estas informações no arquivo MP3 é necessário um editor de etiqueta ID3, por exemplo o EasyTAG (http://easytag.sourceforge.net/). Alguns softwares multimídia também trazem este recurso de edição da etiqueta, por exemplo o iTunes e o WinAmp.

Os programas que convertem as faixas de CD de áudio para arquivos MP3 costumam automatizar este processo. Existem servidores na Internet que fornecem o CDDB (Compact Disc Database), ou Banco de Dados do Disco Compacto, e o programa de conversão identifica o CD e acessa o banco para preencher a etiqueta com as informações armazenadas no CDDB.

A versão mais recente da etiqueta ID3 é a 2 (ID3v2). Nesta versão, as informações ficam armazenadas no início do arquivo MP3. Cada campo da etiqueta pode armazenar 16 MB e a capacidade total da etiqueta é 256 MB. Na primeira versão do ID3 (ID3v1) a etiqueta ficava nos últimos 128 bytes do arquivo MP3 e cada campo podia armazenar no máximo 30 caracteres.

É possível manter as duas versões de etiqueta no mesmo arquivo MP3. Isto ajuda na compatibilidade com os diversos tocadores pois nem todos suportam a versão 2. Entretanto a versão 2 pode conter dezenas de campos enquanto a versão 1 contém apenas seis. Desta forma as informações podem ficar incompletas quando for utilizada a primeira versão.

Vale a pena manter sua coleção de MP3 com as etiquetas devidamente preenchidas. Pelo menos as informações básicas como nome do disco, nome da música, nome do artista, ano, número da faixa, gênero e uma imagem da capa do disco. Os tocadores mostrarão as músicas em uma forma organizada e especialmente no iPod, que é capaz de mostrar a capa do disco, sua coleção terá um visual incrível.

Mais informações em http://www.id3.org/