Bebo nerd…

Sabe aquelas brincadeiras de mesa de bar com os palitos de dente, ou coisa parecida? Bom, quem toma umas, sabe que bar também é cultura.... Mas nerd é osso, então, só pra pensar um pouquinho, um Puzzle C, bem conhecido:

Adicionando ou modificando apenas um caracter, no código abaixo, faça este código imprimir exatamente 20 asteriscos:

int main()
{
        int i, n = 20;
        for (i = 0; i < n; i--)
                printf("*");
	return 0;
}

É simples, e existem algumas soluções para isto! :)

Vimdiff, a diferença diferente

Para nós, pobres mortais, analisar a saída do comando diff, pode não parecer muito amigável à primeira vista e as vezes precisamos conhecer o que mudou de um arquivo para outro, após uma edição. Bom, para os amantes do vi/vim o mesmo possui um utilitário chamado vimdiff, que em alguns casos, pode cair como uma luva, e ser muito útil.

O vimdiff, analisa a diferença entre dois ou três arquivos, dividindo a janela de edição e destacando as linhas que são diferentes entre estes arquivos. A navegação, ocorre da mesma forma quando se divide a janela de edição do vim através do comando :split, ou seja:

Ctrl-W + j = Vai para janela de baixo
Ctrl-W + k =Vai para a janela de cima
Ctrl-W + l = Vai para a janela da direita
Ctrl-W + h = Vai para a janela da esquerada

Um exemplo do comando vimdiff em execução pode ser visto aqui.

Buumm…

Trechos de código maliciosos que tem por objetivo a negação de um serviço ou até mesmo a obtenção de um recurso privilegiado do sistema, a internet tá cheia. Muitos já vi, mas um deles me chamou a atenção quando me deparei com ele pela primeira vez, foi um simples fork bomb, feito em meia linha, utilizando a bash. Reparem como é "medonho" o danado:

$ :( ){ :| :; };:

Simples, não ? Tirando o fato desta linha poder travar uma máquina em poucos segundos, é uma função como outra qualquer, que em uma primeira olhada, pode parecer um palavrão, mas acreditem, não é. Obfuscated Code é uma boa leitura. Explicando melhor, uma função em script bash, pode ser declarada da seguinte forma:

$ teste() {
> echo "teste";
> }

Ok, tranquilo... Mas esta mesma função pode fazer referência à ela mesmo (Recursividade), bastava que no local de um echo, tivesse a própria função, e caso ela chamasse a si próprio usando um pipe para ela também, ai é que "num tinha pareia não", como diriam os natalenses amigos meus. Observe:

$ teste() {
> teste | teste ;
> }

Substituindo teste por dois pontos (apenas mudamos o nome da função), e logo em seguida chamamos a tal função, tudo junto, em uma linha só, temos a bomba shell:

$ :( ){ :| :; };:

Existem várias maneiras de preparar Neston, e também existem várias maneiras de se proteger de um uso exagerado de recursos, a mais flexível talvez seja utilizando a ferramenta ulimit, que não serve apenas para especificar a quantidade de processos que um usuário pode alocar, man ulimit e seja feliz.