quinta-feira, 26 de novembro de 2009

Está o nosso cérebro fazendo constantemente cálculos subconscientes?

Este artigo foi publicado na revista Scientific American Mind, edição de Novembro de 2009:

O nosso cérebro é conectado para executar cálculos que nos permitem decidir o quanto distante está um objeto quando nós andamos ou saltamos por cima, ou estendemos a mão por um copo de leite. Ainda que esta tarefa possa parecer fácil, esta tarefa ativa um profundo cálculo surpreendentemente complexo.

Quando nós olhamos um objeto, os nossos olhos projetam a estrutura tridimensional dentro da retina bidimensional. Para ver em três dimensões, o nosso cérebro precisa reconstruir o mundo tridimensional vindo da imagem bidimensional da retina. Nós temos aprendido a distinguir a profundidade usando uma variedade de sinais visuais, umas envolvendo somente um olho (visão monocular) e outras envolvendo ambos os olhos (visão binocular).

A visão binocular proporciona uma percepção mais precisa da profundidade, permitindo-nos distinguir pequenas diferenças entre as imagens de ambas retinas, enquanto que a visão monocular nos proporciona um largo campo de visão. A oclusão, que é um sinal monocular segundo o qual um objeto que está próximo obstrui parcialmente um outro mais distante, permite o cérebro distinguir as distâncias relativas. Quando um objeto obstrui um outro, o observador pode graduar as distâncias relativas destes objetos.

Uma outra sinalização monocular é a paralaxe, a qual ocorre quando o observador move seu corpo (ou somente sua cabeça) para obter informações sobre a distância relativa entre os objetos. Pelo movimento da cabeça para trás e para frente, este movimento permite ver os objetos por ângulos levemente diferentes. Um objeto próximo se moverá mais rapidamente diante da retina (criando uma ampla paralaxe) do que um objeto distante, permitindo determinar qual objeto está mais próximo. Quando está dirigindo um veículo, por alguns instantes, as coisas mais próximas passam mais rapidamente e os objetos mais distantes parecem imóveis.

Embora o nosso circuito cerebral seja geneticamente programado para distinguir profundidades vindas da visão, isto necessita alguma experiência para calibrá-lo. Inicialmente as crianças são ruins em distinguir as distâncias, mas com o tempo elas treinam seus cérebros para realizar tal cálculo. Os adultos se tornam experientes em distinguir profundidades mas somente com os objetos familiares no meio ambiente. Em um território desconhecido, a distinção automática da profundidade falha porque nosso cérebro ainda não possui novos sinais calibrados do ambiente. Diante destes novos cenários, nós temos que treinar novamente nosso cérebro para calcular as distâncias.

segunda-feira, 23 de novembro de 2009

Problema de lógica: A cor do urso

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

Uma pessoa montou uma tenda para dormir. Subitamente, apareceu um urso que lhe desfez a dita tenda. A pessoa, pacientemente, reparou a tenda e montou-a novamente. Entretanto, o urso andou um quilômetro para o sul, um quilômetro para o oeste e outro para o norte, voltando a passar pelo acampamento e desfazendo novamente a tenda. De que cor era o urso?





RESPOSTA





O urso era branco por ser um urso polar. O acampamento tinha de estar no pólo norte. Só assim que um urso andando de lá, 1 Km para o sul, 1 Km para o oeste e 1 Km para o norte, é que voltaria a passar pelo mesmo ponto. Caso contrário, passaria ao lado.

domingo, 22 de novembro de 2009

Gerando um pendrive com os arquivos de instalação do Windows XP

Com a popularização do netbook vem a necessidade de adaptar os arquivos de instalação do Windows XP, normalmente disponíveis em mídias de CD, para um pendrive. Pois um netbook não possui uma unidade leitora de CD/DVD e um pendrive é uma solução muito mais prática e barata do que uma unidade externa de CD/DVD.

Como existem alguns netbooks que não possuem uma unidade de disco rígido interna, que permite uma maior capacidade de armazenamento, possuindo em seu lugar uma unidade de armazenamento em memória flash, com uma capacidade bastante reduzida, é interessante fazer uma instalação do Windows XP enxuta o suficiente para poupar ao máximo o pouco espaço disponível. Como o instalador do Windows XP não fornece opções adequadas para isto, torna-se necessário utilizar um software chamado nLite.

O nLite é uma ferramenta para a escolha da configuração e ou remoção de componentes de uma pré-instalação do Windows. Opcionalmente o nLite pode gerar uma imagem para gravação em uma mídia ou para montar virtualmente. O nLite pode ser encontrado na Internet pelo endereço http://www.nliteos.com/.

A interface do nLite é bastante intuitiva, as etapas do processo são simples de executar e no final a pasta que contém os arquivos de instalação do Windows terá uma versão enxuta pronta para gravar em um pendrive. Uma dica é não remover o componente "Instalação manual e atualização" em "Opções do sistema operacional" pois é necessário para o reconhecimento do sistema na próxima ferramenta.

Concluída a preparação dos arquivos, o que falta agora é transferí-los para o pendrive. O WinSetupFromUSB é uma ferramenta capaz de formatar e preparar um pendrive para o boot. Este artigo contém o endereço para o download do WinSetupFromUSB: http://www.msfn.org/board/install-usb-winsetupfromusb-gui-t120444.html

Na tela inicial do WinSetupFromUSB devem ser selecionadas a pasta que contém os arquivos de instalação e a unidade do pendrive. Para o pendrive poder ser selecionado é preciso que esteja formatado adequadamente, provavelmente não está então clique no botão RMPrepUSB para formatar o disco USB.

Na janela da ferramenta RMPrepUSB escolha as opções desejadas e clique no botão "Prepare Drive". Para as opções, se o pendrive tem até 2GB de capacidade é indicado o sistema de arquivos FAT16, se for maior pode ser FAT32, e deixe a opção de boot como "WinPE/Vista v2 bootable [BOOTMGR] CC4". Clique em Exit para fechar o RMPrepUSB e retornar ao WinSetupFromUSB.

Verifique as demais opções na janela do WinSetupFromUSB, auxiliando-se pelas dicas dos balões de ajuda, para a necessidade de alguma configuração particular. Na maioria dos casos pode deixá-las como estão. Clique no botão GO para dar início ao processo de cópia para o pendrive. Concluído, pode sair do programa, o pendrive já está pronto.

Para realizar o boot pelo pendrive, no netbook, entre no setup da bios e habilite este recurso. A instalação do Windows pelo pendrive é um pouco diferente da instalação feita direta do CD. O gerenciador de boot utilizado pelo pendrive mostra duas opções à serem escolhidas, "First part of Windows XP Professional Setup" e "Second part of Windows XP Professional Setup". A segunda parte é para quando o computador reiniciar durante a instalação. De resto é a mesma coisa e realizado estes procedimentos o seu Windows XP será instalado com sucesso.

O uso do nLite só é necessário se desejar remover algum componente, incorporar alguma atualização ou automatizar algum passo da instalação do Windows XP, senão pode usar direto o conteúdo oficial da mídia de instalação. Para poupar espaço uma solução é remover os componentes de exemplos, ajudas e qualquer outro extra que costuma vir junto na instalação do Windows XP. É interessante também remover todos os drivers pois normalmente serão instalados os fornecidos pelo fabricante. Mas recomendo não remover o "Suporte ao hardware" para evitar problemas básicos de detecção.

Este artigo utiliza as versões nLite 1.4.9.1 e WinSetupFromUSB 0.2.3.

sexta-feira, 13 de novembro de 2009

Definindo apelidos e funções para comandos no bashrc

O arquivo bashrc determina o comportamento do shell, neste caso o interpretador de comandos bash. Basicamente o arquivo bashrc permite criar atalhos, podendo ser apelidos (alias) ou programas interativos (funções), que são carregados na inicialização do bash. O arquivo bashrc permite criar atalhos para praticamente todos os comandos.

Por exemplo, é muito mais fácil digitar o atalho "l" do que um comando como "ls -laF --color=auto". E uma função é como um roteiro (script) para o shell colocado em um arquivo bashrc. É ideal para casos em que o atalho não será para apenas um simples comando ou necessita de uma lógica em alguma estrutura de programação.

Existem dois arquivos bashrc que o interpretador de comandos bash carrega em cada nova inicialização do shell, o /etc/bashrc é carregado para todos os usuários e o ~/.bashrc é carregado para o usuário que iniciou o shell, ou seja, cada usuário tem o seu arquivo ~/.bashrc.

Tanto para apelidos ou para funções é recomendável testar primeiro os comandos em uma execução direta no prompt antes de incluí-los no arquivo bashrc. Diferentemente de um script para o shell, a interpretação de uma função não gera um novo processo no sistema.

Alguns exemplos de apelidos definidos no arquivo bashrc:

alias l="ls -laF --color=auto"
alias cds="cd /etc/rc.d/init.d && ls"
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias qag="rpm -qa | grep -i"
alias av="avast -a -c -t=A"
alias fd='mount /dev/fd0 /mnt/floppy; cd /mnt/floppy && ls'


Uma função pode ser definida com a estrutura apresentada abaixo:

function nome_da_função()
{
comando 1;
comando 2;
comando 3;
...
}


A palavra "function" é opcional na declaração de uma função mas pode ser considerada uma boa prática. Veja um exemplo bastante interessante:

function extrair()
{
if [ -f $1 ] ; then
case $1 in
*.tar.bz2) tar xvjf $1 ;;
*.tar.gz) tar xvzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar x $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xvf $1 ;;
*.tbz2) tar xvjf $1 ;;
*.tgz) tar xvzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' não pode ser extraído via >extrair<" ;;
esac
else
echo "'$1' não é um arquivo válido"
fi
}


Para ativar uma definição imediatamente após a sua inclusão no arquivo bashrc, sem a necessidade de sair do interpretador de comandos e entrar novamente, basta digitar:

$ source ~/.bashrc


Para saber quais apelidos estão ativos no interpretador bash basta executar o comando alias no prompt. O shell irá imprimir a lista dos apelidos na saída padrão, normalmente na tela do monitor. As funções ativas podem ser vistas com a execução do comando set, sem opções, onde o nome e o valor de cada variável e função do shell serão mostrados na tela.

quarta-feira, 11 de novembro de 2009

O que é virtualização?

Em uma breve definição, virtualização é a execução de vários sistemas operacionais em um único computador físico. Uma máquina virtual é um ambiente operacional completo que se comporta como se fosse um computador independente. Com a virtualização, um computador pode manter vários sistemas operacionais em uso.

Os ambientes operacionais são totalmente independentes um dos outros, salvo o hardware do computador que hospeda os sistemas virtualizados, esses ambientes virtuais não têm nada mais em comum. Se um sistema operacional pode ser instalado em um hardware real, poderá ser instalado em uma máquina virtual. O computador servidor pode hospedar vários sistemas operacionais, sejam eles iguais, similares ou completamente diferentes. Os sistemas operacionais virtualizados são independentes entre si.

Não é preciso que o computador servidor tenha um hardware específico para virtualização, porque quase todos os equipamentos são capazes de hospedar uma ou mais máquinas virtuais. Para isso, é preciso apenas um software especial desenvolvido para emular o ambiente físico. Basicamente, o software simula o hardware de forma que o sistema operacional é instalado sobre esse software. Existem diversos softwares para executar máquinas virtuais, os mais populares são o VMware, o VirtualBox e o Virtual PC. E outros menos famosos como o Parallels, o Xen e o QEMU.

Uma característica interessante que facilita a portabilidade das máquinas virtuais, entre servidores com especificações de hardware diferentes, é que o hardware que é apresentado ao sistema operacional virtual é o mesmo. Deste modo os drivers de dispositivos instalados sempre são os mesmos não importando qual hardware o servidor possui.

Em um ambiente computacional virtual, existem dois componentes principais, o hospedeiro e o convidado. O hospedeiro é o sistema operacional executado diretamente sobre o hardware físico. Este hospedeiro é o sistema operacional que você instala inicialmente sobre o servidor. Pode ser um Linux ou um Windows por exemplo, entretanto existem alguns softwares de virtualização que não necessitam de um sistema hospedeiro, atuam como sendo o próprio sistema operacional do hardware, como o VMware ESX. O segundo componente é o sistema operacional convidado. O sistema operacional convidado é o ambiente computacional virtual que é executado sobre o sistema operacional hospedeiro como uma máquina virtual. Com a virtualização é possível manter simultaneamente vários sistemas convidados.

Apesar da virtualização permitir vários sistemas operacionais em execução simultânea, todos de forma independente, existe apenas um servidor físico, um único hardware para atender todo o processamento e armazenamento em memória. Assim, existe um limite para o número de máquinas virtuais que podem ser instaladas em um servidor.

Pode-se compartilhar um conjunto de recursos do servidor apenas até que eles se esgotem ou que as partes não ofereçam capacidade suficiente. A única restrição para o número de máquinas virtuais é definida pelos limites de memória, espaço em disco e poder de processamento da CPU oferecidos a elas. Qualquer computador que espera hospedar uma ou mais máquinas virtuais deve possuir recursos não apenas para o hospedeiro como também para acomodar os sistemas convidados. Se o computador hospedeiro não tem grande volume de espaço em disco e não apresenta memória ou poder de processamento suficientes, não poderá oferecer aos sistemas operacionais convidados recursos adequados e o sistema operacional convidado sofrerá baixo desempenho.

Sendo as únicas desvantagens da virtualização a limitação do hardware e no acesso direto ao hardware, as vantagens na adoção dos ambientes virtuais são grandes. A facilidade no gerenciamento e na manutenção, na realização de cópias de segurança e na restauração, faz da virtualização uma excelente ferramenta para o administrador do sistema. Além de contribuir para uma redução na infraestrutura de hardware e no consumo de energia.

Uma dica, o software Sun VirtualBox é gratuito e fácil de operar. Instale-o em seu computador e experimente executar um sistema Linux dentro do Windows ou vice-versa, ou em um Mac OS X! Livre-se do "dualboot", mantenha todos em execução simultânea.

segunda-feira, 9 de novembro de 2009

Como fazer conversões de unidades de medida

Uma unidade de medida é uma quantidade específica de determinada grandeza física usada para servir de padrão para outras medidas. Existem diferentes unidades de medida e, para citar algumas, as mais comuns no nosso dia a dia são as unidades usadas para medir as grandezas de área, comprimento, massa, temperatura, tempo, velocidade e volume.

Cada grandeza pode conter mais de uma unidade de medida, por exemplo o comprimento pode ser medido em metros, em jardas, em milhas etc. E entre as unidades de medida das grandezas existe sempre um valor de correspondência para a conversão.

Para efetuar a conversão entre duas unidades devemos saber qual o fator de equivalência. Por exemplo, na grandeza de comprimento temos que 1 polegada é igual a 0,0254 metro, ou 2,54 centímetros, então 2 polegadas em centímetro será 2 vezes 2,54. Uma simples regra de três.

No sentido inverso o fator será outro. No exemplo da conversão de metro para polegada, se não tivermos a informação do fator, o seu cálculo será a divisão de 1 por 0,0254. Como resultado obteremos que 1 metro equivale a 39,37 polegadas. Assim agora basta aplicar novamente a regra de três, por exemplo 0,5 metros em polegadas é igual a 0,5 vezes 39,37, o que dá 19,69 polegadas.

Aprofundando um pouco mais no assunto, sempre teremos os dois fatores que poderão ser utilizados em ambos os sentidos da conversão, considere a situação:

1 polegada = 0,0254 metro
1 metro = 39,37 polegadas


O cálculo de conversão de 2 polegadas em metro pode ser 2 vezes 0,0254, como visto anteriormente, ou pode também ser 2 dividido por 39,37. Ambos os resultados são 0,0508 metro. E no cálculo de 0,5 metros em polegadas pode ser 0,5 vezes 39,37 ou também 0,5 dividido por 0,0254. Ambos os resultados são 19,69 polegadas.

Sempre é uma regra de três que utilizamos para efetuar o cálculo da conversão, o que muda é a posição da incógnita de acordo com as informações que temos. Existem diversos softwares e calculadoras que facilitam a conversão, mas é bom saber como se faz.

Segue uma pequena listagem das equivalências entre algumas unidades de medida:

Medidas de comprimento:

1 metro    = 0,00062137119 milha
= 1,0936133 jardas
= 3,2808399 pés
= 39,370079 polegadas

1 milha = 1609,344 metros
= 1760 jardas
= 5280 pés

1 jarda = 0,9144 metro
= 3 pés
= 36 polegadas

1 pé = 0,3048 metro
= 0,33333333 jarda
= 12 polegadas

1 polegada = 0,0254 metro
= 0,083333333 pé


Medidas de área:

1 acre                = 4046,8726 metros quadrados
= 0,40468726 hectares

1 hectare = 10000 metros quadrados
= 0,4132231 alqueire (paulista)
= 2,4710439 acres

1 alqueire (paulista) = 24200 metros quadrados
= 2,42 hectares

1 metro quadrado = 0,0000413 alqueire (paulista)
= 0,0001 hectare
= 0,00024710439 acre


Medidas de volume:

1 barril (us) = 158,98729 litros
= 42 galões (us)

1 galão (us) = 3,7854118 litros
= 0,023809524 barril (us)
= 128 onças (us)

1 onça (us) = 0,02957353 litro
= 0,0078125 galão (us)

1 litro = 0,0062898108 barril (us)
= 0,26417205 galão (us)
= 33,814023 onças (us)


Medidas de massa:

1 libra      = 0,45359237 quilograma
= 16 onças

1 onça = 0,028349523 quilograma
= 0,0625 libra

1 quilograma = 2,2046226 libras
= 35,273962 onças

sábado, 7 de novembro de 2009

Algoritmos para construir o triângulo de Pascal

O triângulo de Pascal é uma disposição ordenada dos números binomiais. E pela definição, dados dois números naturais n e p, com n maior ou igual a p, chamamos de número binomial o par de valores:

|n|
|p|


Onde lê-se binomial de n sobre p, sendo n o numerador e p o denominador, e o cálculo de seu valor pode ser feito pela fórmula:

n! / (n-p)!p!


Na disposição ordenada dos números binomiais, denominado triângulo de Pascal, obtêm-se a forma infinita:

|0|
|0|

|1| |1|
|0| |1|

|2| |2| |2|
|0| |1| |2|

|3| |3| |3| |3|
|0| |1| |2| |3|

|4| |4| |4| |4| |4|
|0| |1| |2| |3| |4|

...


E se no triângulo de Pascal substituirmos cada binomial pelo respectivo valor, obteremos os elementos:

1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
...


A construção do triângulo de Pascal usando uma linguagem de programação de computadores pode ser feita com diversos algoritmos. Os apresentados aqui utilizam a própria fórmula da definição do número binomial ou as relações de Stiefel ou de Fermat.

Nos exemplos de códigos abaixo adotou-se uma matriz para armazenar os valores dos elementos e cada par Linha x Coluna referente aos índices na matriz corresponde respectivamente, de forma análoga, ao par n e p do número binomial.

Um algoritmo que utiliza a fórmula da definição pode ser algo como mostrado abaixo. Para cada elemento da matriz é utilizada a fórmula n! / (n-p)!p!:

for (L=0;L<=N-1;L++) {
for (C=0;C<=L;C++) {
matriz[L][C] = fatorial(L) / (fatorial(C) * fatorial(L-C));
}
}


Apenas para ilustração, a função fatorial que complementa o algoritmo:

public static long fatorial(int num) {
if (num <= 1) {
return 1;
} else {
return num * fatorial(num-1);
}
}


Os próximos três algoritmos utilizam a relação de Stiefel para calcular os valores dos elementos do triângulo de Pascal, onde:

|n|   | n |   |n+1|
|p| + |p+1| = |p+1|


Então, para aplicar esta relação fazemos o sentido inverso onde o valor de um elemento |n p| é igual a soma dos valores dos binômios em |n-1 p-1| e |n-1 p|.

Nesta primeira versão é feito um controle para o primeiro e o último elemento de cada linha receber 1, nos outros é realizada a soma:

for (L=0;L<=N-1;L++) {
for (C=0;C<=L;C++) {
if (C==0 || L==C) {
matriz[L][C] = 1;
} else {
matriz[L][C] = matriz[L-1][C] + matriz[L-1][C-1];
}
}
}


Uma propriedade do triângulo de Pascal é que numa linha qualquer, dois binomiais equidistantes dos extremos são iguais. Sendo assim, para esta segunda versão é feito o controle para o primeiro elemento receber 1, até a metade faz a soma, e depois da metade repete-se os elementos anteriores em ordem inversa:

for (L=0;L<=N-1;L++) {
for (C=0;C<=L;C++) {
if (C==0) {
matriz[L][C] = 1;
} else if (C<=(L/2)) {
matriz[L][C] = matriz[L-1][C] + matriz[L-1][C-1];
} else {
matriz[L][L-C] = matriz[L][C];
}
}
}


A terceira versão, que utiliza a relação de Stiefel, é uma forma recursiva onde usa uma função que retorna o valor de um binômio qualquer quando lhe é passada n e p como parâmetro:

for (L=0;L<=N-1;L++) {
for (C=0;C<=L;C++) {
matriz[L][C] = binomio(L,C);
}
}

public static int binomio(int L, int C) {
if (L==0 || C==0 || C==L) {
return 1;
} else {
return binomio(L-1, C-1) + binomio(L-1, C);
}
}


E nosso último algoritmo utiliza a relação de Fermat para calcular os valores dos elementos do triângulo de Pascal, onde:

|n|                 | n |
|p| * (n-p / p+1) = |p+1|


Da mesma forma, para aplicar esta relação fazemos o sentido inverso onde o valor de um elemento |n p| é igual a multiplicação do valor do binômio |n p-1| por (n-p+1)/p:

for (L=0;L<=N-1;L++) {
matriz[L][0] = 1;
for (C=1;C<=L;C++) {
matriz[L][C] = matriz[L][C-1] * (L-C+1) / C;
}
}


Apesar do triângulo de Pascal ser uma estrutura complexa com diversas propriedades e características capazes de relacioná-lo, por exemplo, com algumas sequências numéricas importantes, sua implementação na forma de um algoritmo para linguagem de programação é bastante simples, como foi visto neste artigo.

Obs: A notação no número binomial foi prejudicada neste artigo. O correto é utilizar um grande par de parênteses envolvendo os números n e p, mas aqui foi utilizado o caractere "|".

terça-feira, 3 de novembro de 2009

Descobrir o fabricante da placa de rede

Na tecnologia de redes Ethernet todas as placas de rede recebem um endereço chamado MAC, Media Access Control ou Controle de Acesso ao Meio. O endereço MAC é um endereço físico de 48 bits representado por 12 dígitos hexadecimais. Este endereço está gravado na memória ROM da placa de rede e teoricamente não existem duas placas de rede com o mesmo endereço MAC.

Pelo endereço MAC da placa de rede é possível descobrir o fabricante da placa. O IEEE através de sua Associação de Padrões controla mundialmente a identificação de todos os aparelhos eletro-eletrônicos pelo código do Identificador Único Organizacional, OUI. Este código são os três primeiros octetos do endereço MAC, ex.: 11-22-33-xx-xx-xx.

Neste site pode-se digitar os números, em "Search the public OUI listing...", e seu mecanismo de busca retorna as informações do fabricante:

http://standards.ieee.org/regauth/oui/index.shtml

Ainda é possível baixar a listagem de todos os fabricantes e seus respectivos OUI.