Inicialmente este blog foi criado para armazenar algumas dicas e links de UNIX/Linux, OpenVMS, linguagem C, Assembly, TCP/IP e nerdezas afins. No entanto devido ao autor ter abandonado o seu plano de ser um super hacker e dominar o mundo (devido esposa, família, filhos, trabalho), a partir de 2012 este blog tem um tipo de nerdeza mais light (Android, Linux, RetroPie (retrogames), produtividade, e por aí vai). Estas dicas raramente serão criações minhas.

quarta-feira, 8 de outubro de 2008

maneira Deitel de checar data

Essa é mais uma dica da série "como é que eu não tinha pensado nisso antes?". Trata-se de uma maneira super-simples de checar a validade de uma data. Vi isso no livro "Java: Como Programar", sexta edição, do Deitel. Aí vai...

- ano: pode ser qualquer inteiro não negativo.
- mês: inteiro dentro do intervalo [1,12].
- dia: aí vai o algoritmo em C, levando em consideração que o mês e ano são válidos.


int checarDia(int dia, int mes, int ano) {
   /* aqui está a simplicidade do algoritmo:
   * cada elemento deste array é o maior dia do mês cujo número
   * é o índice do elemento, exceto o elemento 0
   */
   int diaPorMes[] = { 0, 31, 28, 31, 30, 31, 30
   31, 31, 30, 31, 30, 31, 30 };

   /* veja que coisa mágica! */
   if(dia > 0 && dia <= diaPorMes[mes])
     return dia;

   /* cuidando do danadinho do ano bissexto */
   if(mes == 2 && dia == 29 && (ano % 400 == 0 || (ano % 4 == 0 && ano % 100 != 0)))
     return dia;

   /* se não for uma data válida, retornamos o dia primeiro */
     return 1;
}


Me lembro de um dia fazer um exercício de programação que pedia para validar se a data que o usuário entrou era válida, fiz o código usando switch-case e alguns ifs...

Ver essa solução usando um simples array chega a dar raiva! Raiva por não ter pensado nisso de primeira.

usando o qsort() do stdlib.h

O protótipo é o seguinte:


#include <stdlib.h>

void qsort(void *base, size_t nmemb, size_t size, int (*compare)(cont void *, const void*));


Criei uma função compara() para comparar dois inteiros:

int compara(int const *a, int const *b) {
    return *a - *b;
}


e usei o seguinte comando para ordenar um array de inteiros lista[] com 10 elementos.

qsort(lista, 10, sizeof(int), &compara);


Pronto! Agora lista já está ordenada.

sábado, 20 de setembro de 2008

tabela unicode

Imagine uma tabela com todos os caracteres unicode. Não deve ser uma coisa pequena, concorda?

Pois um cidadão fez um esquema interessante para se consultar esta tabela, com uma navegação bem similar ao Google Earth.

Para quem se interessar aí vai o link: http://ian-albert.com/misc/zoom-unicode.php.

quarta-feira, 20 de agosto de 2008

Linux Terminal Server Project

Encontrei um projeto de uma coisa que eu penso em fazer a muito tempo. Criar um mega servidor e conectar vários terminais modestos a ele. Parece que já tem uma maneira bem tranquila de fazer isso: http://www.ltsp.org/.

E no caso de Debian: http://wiki.debian.org/LTSP/Howto

Tenho que dar uma olhada nisso!

quarta-feira, 13 de agosto de 2008

criando um arquivo .img

Acho que vou precisar fazer isso na maquina de origem:


prompt$ dd if=/dev/sda1 | gzip -1 -c > sda1.img.gz


Depois vou precisar levar o arquivo para a máquina destino e fazer isso (MUITA ATENÇÃO ANTES DE APERTAR O ENTER PARA NÃO DETONAR A PARTIÇÃO ERRADA!!!):

prompt$ zcat sda1.img.gz >/dev/sda1

tags