sábado, 22 de agosto de 2009

A importância da cópia de segurança

Na informática, a cópia de segurança, ou "backup", é a cópia dos arquivos de um dispositivo de armazenamento à outro para que possam ser restaurados em caso da perda dos arquivos originais, quando há falha no hardware, apagamentos acidentais, pane no sistema operacional ou vírus.

Para um usuário doméstico as opções mais comuns de dispositivos de armazenamento que podem ser usadas para guardar a cópia de segurança são o CD, o DVD, o pendrive e o HD externo. Em ordem de capacidade de armazenamento no CD cabem apenas 700 MB, no DVD cabem 4,7 ou 8,4 GB, os pendrives mais comuns são de 1 GB à 32 GB e os HDs externos variam de 80 GB ou mais.

A escolha do dispositivo ideal para sua cópia de segurança vai depender do tamanho dos arquivos, do tempo que as cópias devem ser mantidas e também do preço do produto, um CD custa bem barato e dura por muitas décadas mas pode não ter espaço suficiente para seus arquivos. Porém nada impede de se usar mais de uma mídia.

Outro detalhe importante é no momento da cópia dos arquivos. Não é muito aconselhável utilizar sempre o mesmo dispositivo de armazenamento nas operações de cópia, principalmente em casos de CDs e DVDs regraváveis (CD-RW e DVD-RW) onde é necessário limpá-los antes de cada cópia. Justamente no momento que a mídia estiver limpa você não terá cópia de segurança alguma! Nestes casos é recomendável ter pelo menos duas mídias, usando-as alternadamente, enquanto uma está sendo preparada, a outra mantém uma cópia de segurança.

Pendrives e HDs externos também correm riscos quando estão conectados ao computador. Se seu sistema ficar infectado com algum vírus e você não perceber, no momento que o dispositivo for conectado ao seu computador o vírus poderá infectar os arquivos no pendrive e no HD externo. Uma pane elétrica também pode comprometer a saúde de todos os seus equipamentos quando eles estão conectados entre si.

Importante reforçar, sempre tenha uma cópia de segurança anterior à que você estiver realizando. Por este motivo que pendrives e HDs externos não são muito seguros se tiver apenas um para ser utilizado. O ideal é utilizar mídias que, uma vez gravadas, não serão utilizadas no dia a dia, e os CDs e DVDs são perfeitos para isso.

A periodicidade das cópias de segurança deve ser analisada em função da quantidade de arquivos alterados em seu computador, se o volume for elevado as cópias devem ser diárias. Uma situação como exemplo é a cada dia realizar cópias para o seu pendrive e quando tiver uma quantidade suficiente para encher um DVD, faz então a cópia para um DVD, e recomeça no dia seguinte a usar o pendrive até o próximo DVD.

Mas dentre todos os arquivos existentes em seu computador, o que é necessário ter em cópia de segurança? Basicamente os arquivos produzidos diretamente por você, por exemplo, documentos produzidos em um editor de texto, em um editor de planilha eletrônica, fotos carregadas da sua câmera digital, arquivos baixados pela internet, músicas etc. Além destes também deve-se incluir os arquivos variáveis dos softwares que você utiliza, como os favoritos do seu navegador, os seus e-mails, os "savegames" dos seus jogos, sua agenda de endereços, contatos etc.

O que não é necessário guardar em cópia de segurança são os arquivos do sistema operacional e os softwares instalados, pois estes serão automaticamente restaurados se houver a necessidade da reinstalação de todo o sistema.

Lembre-se, o computador não é eterno e quando ele parar vai ser confortante saber que seus arquivos importantes estão guardados em um lugar seguro. Faça sempre cópias de segurança!

sexta-feira, 21 de agosto de 2009

Função Ackermann

Uma das mais importantes funções na ciência da computação. Sua maior propriedade é que ela cresce surpreendentemente rápido pois esta função eleva seu retorno rapidamente para números muito grandes, denominados números Ackermann e que normalmente são representados em uma notação inventada por Donald Knuth, a notação "up-arrow" ou notação de Knuth.

A função Ackermann foi descoberta e estudada por Wilhelm Ackermann em 1928. A função que ele descobriu, que então recebeu seu nome, é um simples exemplo de uma função total e bem definida que pode ser computável mas não é uma recursão primitiva. "Total e bem definida" significa que a função é internamente consistente e não quebra as regras das instruções que a define. "Computável" significa que ela pode, em princípio, ser avaliada por todos os valores possíveis em suas variáveis. "Recursão primitiva" significa que pode ser computada usando somente laços for, repetindo a operação em um número de vezes predeterminado. A função Ackermann somente pode ser calculada usando o laço de repetição while, que repete a ação até que o teste da condição retorne falso.

A função Ackermann é definida recursivamente para números inteiros não negativos, m e n, como:

          n + 1                  se m = 0
A(m, n) = A(m - 1, 1) se m > 0 e n = 0
A(m - 1, A(m, n - 1)) se m > 0 e n > 0


Dois inteiros positivos, m e n, são a entrada e A(m ,n) é a saída sendo outro inteiro positivo. A função pode ser programada facilmente em apenas poucas linhas de código. O problema não é a complexidade da função mas sua terrível taxa de crescimento. Por exemplo uma inocente entrada A(4,2) retorna um número de 19.729 dígitos:

A(0, n) = n + 1
A(1, n) = 2 + (n + 3) - 3
A(2, n) = 2 × (n + 3) - 3
A(3, n) = 2^(n + 3) - 3
A(4, n) = 2^(2^(...^2)) - 3 (n + 3 números dois)
A(5, n) = 2^(2^(...^2))^(2^(2^(...^2)))^(...^(2^(2^(...^2)))) - 3

Por isso o uso de uma grafia especial para números grandes como a notação de Knuth é indispensável, como mostra o exemplo abaixo:

A(4, n) = 2^^(n + 3) - 3
A(5, n) = 2^^^(n + 3) - 3

Como podem perceber, a função Ackermann estabelece adições iterativas e multiplicações iterativas, efetuando potências dentro de potências, recursivamente (potências iterativas). Alguns resultados da função Ackermann para as entradas m e n são mostrados abaixo:

                             n
0 1 2 3 4 5
0 1 2 3 4 5 6
m 1 2 3 4 5 6 7
2 3 5 7 9 11 13
3 5 13 29 61 125 253
4 13 65533 2^65536 -3 2^2^65536 -3 ...
5 65533 ...


O código para a função Ackermann é bastante simples, abaixo dois exemplos em java que aplicam a função:

public static long acker(long m, long n) {
if(m == 0) {
return n + 1;
} else if(n == 0) {
return acker(m-1, 1);
} else {
return acker(m-1, acker(m, n-1));
}
}


Ou:

public static long acker(long m, long n) {
return (m == 0) ? (n + 1) : ((n == 0) ? acker(m-1, 1) : acker(m-1, acker(m, n-1)));
}


A função Ackermann devido a sua característica de recursão extremamente profunda pode ser usada como teste de medida da capacidade de um compilador otimizar a recursão.

Veja mais em:

http://mathworld.wolfram.com/AckermannFunction.html
http://rosettacode.org/wiki/Ackermann_Function
http://planetmath.org/encyclopedia/AckermannFunction.html
http://kosara.net/thoughts/ackermann.html

quarta-feira, 19 de agosto de 2009

Problema de Lógica: Cor dos Olhos

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

Um grupo de pessoas com olhos de diferentes cores mora numa ilha. Elas são perfeitas em seus pensamentos lógicos, se uma conclusão pode ser deduzida logicamente, elas a farão instantaneamente. Ninguém sabe a cor de seus próprios olhos. Toda noite, à meia-noite, uma balsa chega na ilha. Qualquer uma que descobrir a cor de seus próprios olhos deixa a ilha e o resto fica. Qualquer uma pode ver qualquer uma o tempo todo e sabem a contagem do número de pessoas que elas veem com cada cor dos olhos (excluindo a si próprias), mas elas não podem se comunicar. Todos na ilha conhecem as regras deste parágrafo.

Nessa ilha há 100 pessoas de olhos azuis, 100 pessoas de olhos castanhos e a Guru (ela tem olhos verdes). Então, qualquer pessoa de olhos azuis pode ver 100 pessoas de olhos castanhos e 99 de olhos azuis (e uma de olhos verdes), mas isso não lhe diz a cor de seus próprios olhos. Podem imaginar que os totais são 101 castanhos e 99 azuis, ou 100 castanhos, 99 azuis e ela pode ter olhos vermelhos.

A Guru pode falar apenas uma vez (digamos, ao meio-dia) em um único dia de toda eternidade delas na ilha. Em pé em frente aos habitantes da ilha, ela diz o seguinte:

"Eu posso ver alguém que tem olhos azuis."

Quem deixa a ilha, e em que noite?

Lá não há espelhos ou superfícies refletivas. Não é uma pegadinha e a resposta é lógica. Não depende de truque de palavras ou alguém mentindo ou supondo e não envolve pessoas fazendo coisas como comunicação por sinais etc. A Guru não fez sinal com os olhos para alguém em particular, ela simplesmente disse "eu contei pelo menos uma pessoa de olhos azuis nesta ilha que não sou eu".

E finalmente, a resposta não é "ninguém deixou a ilha".




RESPOSTA




Todas as pessoas de olhos azuis deixarão a ilha na centésima noite.

Se você considerar o caso de haver apenas uma pessoa de olhos azuis na ilha, você pode ver que ela deixará a ilha na primeira noite, porque ela saberá que é a única de quem a Guru deve estar falando. Ela olha ao seu redor e não vê alguém mais e sabe que pode sair. Então: [TEOREMA 1] Se tiver uma pessoa de olhos azuis, ela deixará a ilha na primeira noite.

Se neste lugar haver duas pessoas de olhos azuis, elas se olharão uma a outra. Cada uma delas pensará "Se eu não tenho olhos azuis [HIPÓTESE 1], então esta pessoa é a única que tem. E se ela é a única, pelo TEOREMA 1 ela deixará a ilha nesta noite.". Cada uma delas esperará para ver e quando nenhuma delas deixar a ilha na primeira noite, cada uma pensará "Minha HIPÓTESE 1 estava incorreta. Eu devo ter olhos azuis.". E as duas sairão na segunda noite. Então: [TEOREMA 2] Se tiver duas pessoas de olhos azuis, cada uma delas deixará a ilha na segunda noite.

Se neste lugar haver três pessoas de olhos azuis, cada uma olhará as outras duas e atravessará um processo similar ao anterior. Cada uma considerará duas possibilidades: "Eu tenho olhos azuis." ou "Eu não tenho olhos azuis.". Ela saberá que se não tiver olhos azuis, terá somente duas pessoas de olhos azuis na ilha, as duas que ela vê. Então ela pode esperar duas noites, e se ninguém deixar, ela saberá que deve ter olhos azuis: TEOREMA 2 diz que se ela não tiver, as outras pessoas terão de sair. Quando ela ver que as outras não deixaram, ela saberá que seus próprios olhos são azuis. Todas as três estão no mesmo processo, então todas elas deduzirão no dia 3 e deixarão a ilha.

Esta indução pode continuar adiante até o TEOREMA 99, no qual qualquer pessoa envolvida na ilha saberá imediatamente. Cada uma delas esperará 99 dias, verão que o resto do grupo não foi a lugar algum, e na centésima noite todas deixarão a ilha.

segunda-feira, 17 de agosto de 2009

Editor de texto sed

sed é um "Stream EDitor" ou editor de fluxo, bastante leve para linha de comando. Um editor de fluxo é um programa usado para executar transformações básicas em textos recebidos de uma entrada em fluxo, pode ser vindo de um arquivo ou da entrada padrão.

O sed trabalha com somente uma passagem sobre a entrada, tornando-o assim mais eficiente. Mas é a habilidade de filtragem de texto em um redirecionamento da saída para a entrada padrão, canalização, que o distingue dos outros tipos de editores.

A característica principal do sed é poder editar arquivos automaticamente. É um editor de textos não interativo, ele pode editar automaticamente, sem interação do usuário, vários arquivos seguindo um conjunto de regras especificadas. É como uma edição em "lote".

O sed é um editor de fluxo que está incluído em quase todos os sabores de UNIX, incluindo o Linux. Entretanto as distribuições do Linux contém o GNU sed, uma versão melhorada com muitas extensões úteis que economizam tempo ao padrão sed POSIX e também não sofre as muitas limitações que versões anteriores e proprietárias do sed tinham.

O sed trabalha executando qualquer número de operações de edição especificadas pelo usuário nos dados de entrada. O sed é baseado em linhas, assim os comandos são executados em cada linha, em ordem. E o sed escreve o resultado na saída padrão, ele não modifica nenhum arquivo de entrada.

Abaixo apresento alguns exemplos de uso do sed. Dentre eles alguns exemplos com o uso do sed combinado com outros programas para que tenha algo mais prático e assim entender melhor a utilidade do sed:

Substitui em cada linha de arquivo.txt as palavras "assim" para "assado":
sed 's/assim/assado/g' arquivo.txt

Substitui somente nas linhas que encontrar a string as palavras "assim" para "assado":
sed '/string/s/assim/assado/g'

Remove os 34 primeiros caracteres a partir do início de cada linha:
sed 's/^.\{34\}//' hash.md5 > arquivo.txt

Remove desde o início de cada linha até a última / encontrada
sed 's/^.*\///' caminhos.txt > sonomes.txt

Renomeia todos os arquivos .doc trocando _ e - por espaços:
for i in `ls *.doc`; do mv $i "`echo $i | sed 's/_/ /g; s/-/ /g'`"; done

Remove em arquivo.txt a linha 1 até a 28:
sed '1,28d' arquivo.txt > outro_arquivo.txt

Remove todas as linhas em branco:
sed '/^$/d' arquivo_com_linhas_em_branco.txt | sort > arquivo_limpo.txt

Remove todas as linhas que contenham a string:
sed '/string/d' arquivo.txt

Renomeia todos os arquivos de letras maiúsculas para minúsculas:
for i in `ls *.*`; do mv $i `echo $i | sed 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÄÅÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÇÑ/abcdefghijklmnopqrstuvwxyzàáâãäåèéêëìíîïòóôõöùúûüçñ/'`; done

Remove todas as tags HTML:
sed 's/<[^>]*>//g' arquivo.html > arquivo.txt

Adiciona um texto no início de cada linha:
sed 's/^/texto incluido/' arquivo.txt

Adiciona um texto no final de cada linha:
sed 's/$/texto incluido/' arquivo.txt

domingo, 16 de agosto de 2009

Feliz Aniversário Debian!

Há dezesseis anos atrás Ian Murdock anunciou a "iminente finalização para um lançamento de uma nova marca de Linux". Este lançamento estava sendo chamado de Debian Linux e foi o começo de uma das mais populares distribuições de Linux mantidas pela comunidade. Mais recentemente tornou-se a base para a distribuição Ubuntu. O Debian GNU/Linux é conhecido por seu comprometimento de sua comunidade à filosofia do software livre.

O Debian é um sistema operacional livre para seu computador. Um sistema operacional é um conjunto de programas básicos e utilitários que fazem seu computador funcionar. O Debian usa o kernel (núcleo de um sistema operacional) Linux, mas a maior parte das ferramentas do sistema operacional vêm do projeto GNU, daí o nome GNU/Linux.

O Debian GNU/Linux é mais que um simples sistema operacional, ele vem com mais de 25113 pacotes contendo softwares pré-compilados e distribuídos em um bom formato, que torna fácil a instalação deles na sua máquina.

É uma das primeiras distribuições a aparecer no planeta e o Debian está entre as mais importantes distribuições de Linux. Veja mais neste endereço: http://www.debian.org/

A pronúncia oficial de Debian é "débian". O nome vem do nome do criador do Debian, Ian Murdock, e sua esposa, Debra.

Feliz Aniversário Debian!

sexta-feira, 14 de agosto de 2009

O catálogo de Messier

Os objetos Messier são uma seleção de objetos astronômicos que foram primeiramente listados pelo astrônomo francês Charles Messier em seu "Catalogue des Nébuleuses et des Amas d'Étoiles", publicado em 1781. A original motivação para o catálogo foi que Messier era um caçador de cometas e ficou frustrado pelos objetos que pareciam mas não eram cometas. Ele então compilou uma lista destes objetos, em colaboração com seu assistente Pierre Méchain.

A primeira edição cobriu 45 objetos numerados de M1 à M45. A listagem total publicada por Messier continha 103 objetos mas a lista recebeu acréscimos sucessivos de outros astrônomos. O primeiro acréscimo foi de Camille Flammarion em 1921, adicionando o M104. Os objetos M105 ao M107 foram adicionados por Helen Sawyer Hogg em 1947, M108 e M109 por Owen Gingerich em 1960 e M110 por Kenneth Glyn Jones em 1966.

Todo os objetos Messier são visíveis através de binóculos ou de pequenos telescópios, portanto eles são bastante populares nas examinações dos astrônomos amadores.

Este catálogo de objetos é uma das mais famosas listas de objetos astronômicos e apesar destes objetos estarem também catalogados em outras listas mais modernas, muitos objetos Messier ainda são referenciados pelo seu número Messier.

A lista contém galáxias, aglomerados estelares e nebulosas. Dentre os objetos, alguns deles são: a Nebulosa do Caranguejo (M1) na constelação de Touro, a Galáxia de Andrômeda (M31) na constelação de Andrômeda, a Nebulosa de Órion (M42) na constelação de Órion e Plêiades (M45) na constelação de Touro.

Abaixo duas imagens com as fotografias e um mapa dos 110 objetos Messier:



quinta-feira, 13 de agosto de 2009

Efeito Droste

O efeito Droste é um termo holandês para um tipo específico de imagem recursiva. Uma imagem exibindo o efeito Droste contém uma cópia pequena da própria imagem sendo exibida em uma determinada posição de seu interior. E esta cópia pequena também exibe uma outra cópia menor ainda na mesma posição e assim sucessivamente.

Somente na teoria este efeito avança infinitamente pois a continuidade avança enquanto o limite da resolução da imagem permitir e o efeito é curto pois reduz exponencialmente o tamanho da imagem a cada iteração.

A primeira aparição deste efeito recursivo foi em 1900 na embalagem do pó de cacau da marca Droste, por isso o nome do efeito. Nesta embalagem aparece uma enfermeira servindo em uma bandeja uma xícara e a embalagem do mesmo pó de cacau.


Veja algumas imagens com o efeito Droste: