quinta-feira, 26 de abril de 2012

Andando No Ar

A NASA (http://www.nasa.gov/) possui um interessante portal de conteúdo multimídia, fornecendo imagens, áudios e vídeos das suas missões, pesquisas etc. Na seção de vídeos (http://www.nasa.gov/multimedia/videogallery/index.html) está postado um belíssimo videoclipe denominado "Walking On Air" (http://www.nasa.gov/multimedia/videogallery/index.html?media_id=141042671). Este vídeo retrata uma série de fotografias feitas pela tripulação da Expedição 30 a bordo da Estação Espacial Internacional (ISS).

As imagens capturadas são de diversos lugares ao redor do mundo, junto com fascinantes efeitos luminosos, em especial as Auroras Austral e Boreal. A sequência de lugares e eventos está ordenada com o tempo no vídeo:

0:01 - Estrelas sobre o sul dos Estados Unidos
0:08 - Costa oeste dos E.U.A ao Canadá
0:21 - Europa Central ao Oriente Médio
0:36 - Aurora Austral sobre o Oceano Índico
0:54 - Tempestades sobre a Africa
1:08 - Parte central dos Estados Unidos
1:20 - Meio-oeste dos Estados Unidos
1:33 - Reino Unido ao Mar Báltico
1:46 - Pôr da Lua
1:55 - Norte dos Estados Unidos ao Leste do Canada
2:12 - Aurora Austral sobre o Oceano Índico
2:32 - Cometa Lovejoy
2:53 - Aurora Boreal sobre a Baía de Hudson
3:06 - Reino Unido à Europa Central

A Expedição 30 iniciou oficialmente com a despedida da nave Soyuz TMA-02M da ISS, em 21 de Novembro de 2011, levando embora a equipe da Expedição 28/29. A Expedição 29 foi lançada à ISS na nave Soyuz TMA-22 em 14 de Novembro de 2011 e complementada com a Expedição 30, lançada em 21 de Dezembro de 2011 na nave Soyuz TMA-03M. A equipe da Expedição 30 é formada pelos astronautas Anton Shkaplerov, Anatoly Ivanishin e Dan Burbank, da Expedição 29, e Oleg Kononenko, Andre Kuipers e Don Pettit, da Expedição 30.

segunda-feira, 16 de abril de 2012

Processos em execução no sistema Linux

O Linux, como qualquer sistema UNIX, é um sistema operacional multitarefa, isto é, vários processos podem ser executados ao "mesmo tempo". Um processo é um programa em execução independente que tem seu próprio conjunto de recursos.

No Linux, os recursos do sistema, como a memória e os discos, são gerenciados pelo kernel, que é o núcleo do sistema operacional. Tudo mais, em execução no sistema, são processos.

Quando o usuário se conecta, seu terminal é controlado pelo seu shell, que é um processo em execução. Então, o shell cria um novo processo sempre que o usuário fornecer um comando para ser executado. O sistema operacional trabalha com uma infinidade de processos e possui alguns meios para controlá-los.

Os processos possuem um conjunto de características, as principais são:

- Proprietário do processo (UID e GID);
- Estado do processo (em espera, em execução, etc);
- Prioridade de execução;
- Recursos de memória e CPU.

Um PID (Process Identifier) é um número de identificação que o sistema dá a cada processo. Para cada novo processo, um novo número deve ser atribuído. Não se pode ter um único PID para dois ou mais processos ao mesmo tempo.

É comum que um processo já existente se duplique para que a cópia possa ser atribuída a uma nova tarefa. O processo de origem recebe o nome de "processo pai" e o novo é denominado "processo filho". Nesse ponto que o PPID (Parent Process Identifier) passa a ser usado. O PPID de um processo é o PID de seu processo pai. No Linux, o processo "pai de todos" é o init e possui o PID de número 1.


PS

O comando 'ps' informa quais os processos em execução no momento, exibindo o estado dos processos correntes. Se somente 'ps' for digitado na linha de comando, o sistema mostra os processos do usuário. Uma combinação de opções existe para obter mais detalhes.

Principais opções:

-e                 seleciona todos os processos
-u ou -U usuario   seleciona pelo ID efetivo ou real do usuário
-t terminal        seleciona pelo tty
-f ou -F           listagem total ou extra total
-l                 formato longo
-p pid             seleciona pelo PID

Observação: O comando 'ps' aceita diferentes sintaxes nas opções, mantendo compatibilidade com o UNIX, BSD e GNU. Por exemplo, 'ps aux' é reconhecido para compatibilidade com a sintaxe BSD.


TOP

O comando 'top' também exibe as tarefas do sistema mas em uma atualização que se repete. O 'top' proporciona uma visão em tempo real do sistema em execução. As informações do sistema, separadas em categorias, são exibidas ordenadamente e podem ser modificadas por sua interface interativa.

Principais comandos de interação:

l       liga/desliga a exibição de "Uptime" e "Load Average"
m       liga/desliga a exibição de uso de memória e swap
t       liga/desliga a exibição do estado de tarefas e uso da CPU
1       liga/desliga a exibição de CPUs separadas ou unificadas
u       especifica o nome do usuário
< ou >  move entre as colunas para ordenação
f       define quais colunas serão vistas
        (digitando a letra correspondente exibe/exclui a coluna)
o       define a posição das colunas visíveis
        (digitando a letra correspondente em maiúscula aproxima, em minúscula afasta)
q       sai do programa


Planos de Execução

Os processos que são controlados diretamente pela tela chamam-se processos em primeiro plano. Os outros processos que foram inicializados, mas que o usuário não possui controle sobre eles, chamam-se processos em segundo plano. Podemos ter um processamento em primeiro plano, porém muitos processamentos em segundo plano podem ser executados simultaneamente.

O ambiente gráfico X Window facilita a execução de diversos programas ao mesmo tempo. No console, o usuário terá que executar os programas em segundo plano, mantendo no máximo um em primeiro plano. Para executar um comando em segundo plano, coloca-se o símbolo & no final da linha de comando, por exemplo:

# gcc prog.c &

O prompt retornará e o usuário poderá continuar executando outros comandos enquanto o primeiro está sendo processado. Antes do prompt ser retornado, o shell informa o número do serviço (trabalho) que é atribuído ao comando e o PID do processo, veja um exemplo:

[1] 411

O [1] é o número do serviço e o 411 é o número de identificação do processo (PID).


BG

Se o programa já estiver sendo executado, em primeiro plano, o usuário deverá usar o comando 'bg', que põe um processo em execução em segundo plano.

Para isso digita-se 'Ctrl+Z', assim o processo recebe um sinal SIGSTOP e o shell interrompe a execução do mesmo. Então usa-se o 'bg' para colocar o processo interrompido no modo de execução em segundo plano e o processo irá continuar sua execução.

Sintaxe do comando 'bg':

bg [%id]

%id é o número do serviço (necessário ter o sinal de porcentagem antes).

Exemplo:

# bg %1

Imediatamente após o uso das teclas 'Ctrl+Z' o shell exibe o número do serviço junto com outras informações.


FG

Para retornar o processo ao primeiro plano, usa-se o comando 'fg', que transferirá o controle do terminal para o processo.

Sua sintaxe é a mesma do comando 'bg'.

fg [%id]


JOBS

Para descobrir o número do serviço atribuído ao processo usa-se o comando 'jobs'. O comando 'jobs' lista os processos que estão parados ou executando em segundo plano pelo shell. Os processos são ordenados pelo número do serviço que é atribuído ao seu comando. Veja a sintaxe:

jobs [-l]

O parâmetro -l faz com que o comando 'jobs' liste também o PID de cada processo. Em sua saída o comando 'jobs' retorna, além do número do serviço, o estado do processo, a linha digitada no comando e, opcionalmente, o PID.


Praticando

No ambiente gráfico, inicie alguma aplicação gráfica pela linha de comando, digitada no prompt do shell em uma janela de terminal. Por exemplo a calculadora gráfica do KDE (kcalc). Envie o sinal SIGSTOP para o processo da calculadora e tente operá-la no ambiente gráfico. Depois, coloque o processo no modo de execução em segundo plano e verifique sua operação. Por fim, liste os processos que estão em segundo plano.

Roteiro:

$ kcalc

Ctrl+z

$ bg %1

$ jobs

sexta-feira, 13 de abril de 2012

Comic Book Archive

Os arquivos do tipo Comic Book são arquivos de arquivamento contendo diversos arquivos de imagens, em ordem sequencial, das páginas de uma revista de história em quadrinhos. É um formato eletrônico para uma revista de história em quadrinhos.

São arquivos de arquivamento pois tratam-se puramente de arquivos nos tipos zip, rar, ace, 7z ou tar, apenas com a extensão renomeada para o tipo de comic book (cb). A última letra da extensão indica o tipo do arquivamento:

.cbr = rar
.cbz = zip
.cb7 = 7z
.cbt = tar
.cba = ace

Seu conteúdo são arquivos comuns de imagem, preferencialmente nos formatos png, jpeg, gif, tiff ou bmp, nomeados em sequência numérica, em geral de acordo com o número da página na revista, na qual a imagem reproduz.

É importante, nos nomes dos arquivos de imagem, os primeiros números estarem preenchidos com zeros à esquerda para se igualarem na quantidade de dígitos do número do último arquivo. Assim, não haverá problema de interpretação nos softwares leitores de comic book, quanto a ordem dos arquivos. Por exemplo, o software apresentará os arquivos como 1, 10, 11, ..., 2, 20, 21, ..., ao invés da ordem 1, 2, 3, ..., 10, 11, .... Então o correto é renomear para 01, 02, 03, ....

Existem diversos softwares para a exibição dos arquivos do tipo comic book, nas mais diversas plataformas e sistemas operacionais. Apresento neste artigo alguns dos softwares para os sistemas Linux e Windows:

Okular (http://okular.kde.org/)

O Okular é um leitor universal de documentos para o ambiente KDE no Linux. Suporta dezenas de tipos de arquivos de documentos e imagens, e inclusive os arquivos do tipo comic book. Por não ser dedicado ao comic book, a visualização é padrão para documentos em geral. É gratuito.

Evince (http://projects.gnome.org/evince/)

O Evince é um leitor de documentos para o ambiente GNOME no Linux. Suporta múltiplos formatos de documentos e imagens, e também comic book. É simples e leve. Por não ser dedicado ao comic book, a visualização é padrão para documentos em geral. Possui também uma versão para o sistema Windows. É gratuito.

MComix (http://mcomix.sourceforge.net/)

O MComix é um leitor de arquivos de imagem especialmente designado para comic book. É uma ramificação do projeto Comix. Lê os arquivos imagem diretamente ou arquivados em zip, rar, 7z ou tar. Na visualização do comic book, as páginas (imagens) avançam inteiramente uma a uma, e não rolando para baixo. O MComix abre automaticamente o próximo arquivo de comic book que estiver no diretório corrente. Possui versões pra Linux e Windows e é gratuito.

QComicBook (http://qcomicbook.linux-projects.net/)

O QComicBook é um leitor específico para arquivos comic book no sistema Linux. Na visualização, as páginas (imagens) também podem avançar inteiramente uma a uma, quadro a quadro, e não rolando para baixo. É capaz de exibir duas páginas por vez, entre outros recursos. É gratuito.

ComicRack (http://comicrack.cyolito.com/)

O ComicRack é talvez o melhor leitor de comic book para o sistema Windows. Inclui um sistema gerenciador para a biblioteca de comic book. Possui muitos usuários e é gratuito.

CDisplayEx (http://www.cdisplayex.com/)

O CDisplayEx é um leitor de comic book baseado no CDisplay (que está descontinuado). O CDisplay foi o primeiro software a suportar o formato cbr. É um leitor simples para o sistema Windows e é gratuito.

segunda-feira, 2 de abril de 2012

Problema de Lógica: Andares e apartamentos

Evandro e Augusto moram no mesmo edifício. O número do andar de Evandro coincide com o número do apartamento de Augusto e a soma dos números dos dois apartamentos é 56. Se cada andar tem 12 apartamentos, numerados de 1 a 12 no primeiro andar, de 13 a 24 no segundo andar e assim por diante, quais os números dos apartamentos de Augusto e Evandro?





RESPOSTA





Se o número do andar de Evandro é o mesmo número do apartamento de Augusto e a soma dos números dos dois apartamentos é 56, então a soma do número do apartamento de Evandro com o número do andar de Evandro também é 56:

Se: andar(E) = apto(A)
e: apto(E) + apto(A) = 56
então: apto(E) + andar(E) = 56

Somente no quinto andar é possível uma soma que resulte em 56, assim, andar 5 + apto 51 = 56.

Portanto, os números dos apartamentos de Augusto e Evandro são 5 e 51.

sexta-feira, 30 de março de 2012

O Paradoxo do Aniversário

O paradoxo do aniversário, ou problema do aniversário, vem da probabilidade de duas pessoas em um grupo de n pessoas terem o mesmo dia de aniversário. Para esta probabilidade considera-se o ano com 365 dias (excluindo 29 de Fevereiro), desconsideram-se gêmeos e consideram-se que todos os dias são equiprováveis para aniversário (pois na realidade a quantidade oscila com a época do ano ou dia da semana).

O paradoxo é que em um grupo de apenas 23 pessoas, a probabilidade de duas terem o mesmo dia de aniversário é de 50%. Com um grupo de 57 pessoas esta probabilidade sobe para 99%. Obviamente os 100% são atingidos com um grupo de 366 pessoas. A probabilidade parece alta demais, parece incompatível, dando esta ideia de paradoxo.

Entretanto a probabilidade está certa. A matemática prova isto. Veja:

Sendo P(A) a probabilidade de duas pessoas em um grupo terem o mesmo dia de aniversário, então P('A) é o inverso, é a probabilidade de duas pessoas não terem o mesmo dia de aniversário. A e 'A são eventos complementares e sendo P(A) e P('A) as únicas possibilidades e mutuamente exclusivas, então P(A) + P('A) = 1.

O cálculo da probabilidade, de duas pessoas em um grupo terem o mesmo dia de aniversário, fica mais fácil se calcularmos primeiro a probabilidade P('A).

A probabilidade P('A) é igual ao produto das probabilidades individuais, ou eventos, de cada pessoa. Se P('A) pode ser descrito como n eventos independentes, então P('A) = P(1) x P(2) x P(3) x ... x P(n), sendo n o número de pessoas no grupo. A probabilidade de um evento é dada por P(A) = n(A)/n(U).

Considerando que estamos calculando P('A), a primeira pessoa pode fazer aniversário em qualquer dia do ano, ou seja, em qualquer um dos 365 dias do ano. Assim P(1) = 365/365 = 1 = 100% (ou 1-0/365). A segunda pessoa pode fazer aniversário em qualquer dia exceto no dia do aniversário da primeira. Assim P(2) = 364/365 = 0,9973 = 99,73% (ou 1-1/365). A terceira pessoa pode fazer aniversário em qualquer dia exceto nos dias da primeira e da segunda pessoa. Assim P(3) = 363/365 = 0,9945 = 99,45% (ou 1-2/365).

Generalizando este processo para um grupo de n pessoas, P('A) é dada por: (com n menor que 366)

P('A) = 365/365 x 364/365 x 363/365 x ... x (365-(n-1))/365

ou

P('A) = (1-0/365) x (1-1/365) x (1-2/365) x ... x (1-(n-1)/365)


Simplificando uma ou outra equação, chega-se em:

P('A) = (365! / (365-n)!)/365^n = (365^-n x 365!)/(365-n)!


Se P(A) = 1 - P('A) então P(A) = 1 - (365!/(365-n)!)/365^n, visto isso, calcularemos a probabilidade para alguns grupos:

Para n=23: P(A) = 1 - (365!/(365-23)!)/365^23 = 0,5073 = 50,73%

Para n=57: P(A) = 1 - (365!/(365-57)!)/365^57 = 0,9901 = 99,01%

Para n=78: P(A) = 1 - (365!/(365-78)!)/365^78 = 0,9999 = 99,99%


Como podemos observar, a probabilidade é realmente grande de encontrarmos duas pessoas que façam aniversário no mesmo dia em grupos de 23 ou mais pessoas. Impressionantemente, com 78 pessoas é praticamente certo que teremos duas que façam aniversário no mesmo dia, mesmo existindo um número bem maior de possibilidades, 365 dias no ano.

O que acontece é que se apenas uma pessoa compara seu aniversário com as outras do grupo, a probabilidade é baixa, são poucas comparações. Mas se todas as pessoas comparam seus aniversários com as outras do grupo, a probabilidade aumenta consideravelmente, são muito mais comparações. E à medida que o número de pessoas do grupo aumenta, as probabilidades se multiplicam.

Saiba mais sobre probabilidades em http://dan-scientia.blogspot.com.br/search/label/probabilidade

quinta-feira, 29 de março de 2012

O Cientista e o Motorista

Aquele cientista famoso estava a caminho de uma conferência quando o seu motorista comentou:

- Patrão, já ouvi tantas vezes a sua palestra que tenho certeza de que poderia fazê-lo no seu lugar, se o senhor ficasse doente.
- Isso é impossível!
- Quer apostar?

E fizeram a aposta. Trocaram de roupa e, quando chegaram no local da conferência, o motorista foi para a tribuna enquanto o cientista instalou-se na última fila, como se fosse seu motorista.

Depois da palestra, começou a sessão de perguntas, que ele respondeu com precisão. No entanto, em certo momento, levantou-se um sujeito que apresentou uma questão dificílima. Longe de entrar em pânico, ele saiu-se com esta:

- Meu jovem, essa pergunta é tão fácil... mas, tão fácil... que vou pedir para o meu motorista responder!

(autor desconhecido)

Modos de rede no VirtualBox

O VirtualBox (https://www.virtualbox.org/) é uma aplicação multi-plataforma de virtualização. Com ele, é possível executar múltiplos sistemas operacionais ao mesmo tempo em máquinas virtuais.

Cada máquina virtual poderá ter sua configuração específica de hardware, como se fossem computadores reais, e o suporte à rede é bastante refinado, com diversos modos de operação.

No mundo da virtualização existem alguns termos e alguns serão úteis para o entendimento deste artigo:

Host OS (Hospedeiro)
É o sistema operacional do computador físico onde o VirtualBox está instalado.

Guest OS (Convidado)
É o sistema operacional executado dentro de uma máquina virtual.

Máquina Virtual (VM)
É o ambiente especial que o VirtualBox cria para simular um hardware de computador.

Adicionais para Convidado
É um pacote especial de software fornecido pelo VirtualBox para ser instalado no sistema convidado.


Na seção de rede das configurações da máquina virtual, é possível determinar como o VirtualBox concede os adaptadores de rede e os modos de operação na VM. O VirtualBox é bastante flexível na virtualização da rede. Os modos de operação dos adaptadores virtuais são em consideração ao hardware de rede físico do hospedeiro.

Para cada adaptador de rede habilitado é possível especificar um dos seguintes modos de virtualização:


Não Conectado

Neste modo, o VirtualBox informa ao sistema convidado que a placa de rede está presente porém não há conexão, como se não houvesse um cabo de rede plugado. É um modo de simular uma retirada do cabo da placa de rede.


NAT (Network Address Translation)

É o modo padrão de rede no VirtualBox. Com este modo, o VirtualBox age como um roteador, mapeando o tráfego, mascarando os IPs e possibilitando a comunicação da VM com a rede externa. O sistema convidado recebe um endereço IP que não faz parte da rede externa, do servidor DHCP integrado ao VirtualBox, e portando, durante todo o tráfego, os endereços e portas são traduzidos. Cada máquina virtual terá um roteador particular e elas não farão parte de uma mesma rede, impossibilitando a comunicação entre elas.

Este modo é necessário quando não é possível a máquina virtual obter um endereço IP real da rede externa. Ou quando deseja tornar a VM invisível e inalcançável pela rede externa, pelo menos não diretamente.


Placa Em Modo Bridge

Neste modo, o VirtualBox usa um driver de dispositivo para interceptar e injetar dados no adaptador de rede físico, tornando-se um adaptador de rede por software. O sistema convidado, usando este adaptador de rede por software, consegue conectar-se diretamente na rede externa e assim receber um endereço IP válido na rede externa.

O sistema hospedeiro e também todas as máquinas da rede, na qual a máquina hospedeira pertence, enxergarão normalmente a VM pela rede como se a VM fosse uma máquina real.

É um modo geralmente utilizado em sistemas convidados que são servidores de rede. Este modo possui algumas limitações dependendo do sistema operacional hospedeiro.


Rede Interna

Este modo é utilizado para criar uma rede por software onde somente as máquinas virtuais selecionadas ficarão visíveis entre elas. Nenhuma máquina da rede externa, nem mesmo o próprio hospedeiro enxergará as VMs da rede interna. Desta forma, todo o tráfego ficará restrito à rede interna e completamente isolado e escondido da rede externa.

É um modo seguro de se fazer rede entre as VMs, pois será impossível capturar pacotes pela rede externa.


Placa De Rede Exclusiva De Hospedeiro

Neste modo, o VirtualBox monta uma rede contendo somente o hospedeiro e um conjunto de máquinas virtuais, sem a necessidade do adaptador de rede físico do hospedeiro. É um modo híbrido entre o modo bridge e o modo de rede interna, as VMs se enxergarão entre si e ao hospedeiro, como se estivessem conectadas a uma mesma rede física, porém, como a rede interna está conectada somente à interface virtual do hospedeiro, o acesso a rede externa não é possível.

O VirtualBox cria no sistema hospedeiro uma interface virtual de rede, semelhante a interface de loopback. Esta interface proporciona a conectividade entre as VMs e o sistema hospedeiro.


Driver Genérico

Este modo é raramente usado. Permite ao usuário selecionar um driver que pode ser incluído no VirtualBox, numa recompilação, ou fornecido por um pacote de extensão.

Possui submodos os quais permitem que máquinas virtuais, em hospedeiros distintos, fiquem conectadas numa mesma infraestrutura de rede. Em outras palavras, permite a conexão em rede de sistemas convidados que estão em diferentes sistemas hospedeiros.

Generalizando, é uma parte opcional do VirtualBox que só está incluída no código fonte. O pacote fornecido pela Oracle não inclui os drivers necessários.