Archive for March 2009

Bem-vindo Tuz

Sem muito tempo, como de praxe, vai um pequeno, mas memorável post.

Hoje foi lançado do kernel 2.6.29, e junto com as features, veio o Tuz:

Tuz

Tuz

O Tuz é um Diabo da tazmânia, desfarçado de pinguim… Bonitinho não? … ele será exibido no boot, no lugar  do Tux… mas ele é temporário… só para este Release… Seja bem-vindo :)

(get|set)sockopt

Menu de seleção de opções para fazer em uma sexta que você está de folga:
  1. 1: Ir a praia
  2. 2: Fazer uma trilha de bicicleta
  3. 3: Ver TV
  4. 4: Ler: "Programação para redes Unix"
  5. Digite sua Opção:
  6. 4
  7. Opção 4: você é um nerd.
  8.  
  9. - Eu   n ã o   s o u    N E R D…

Os sockets possuem algumas opções e ajustes que podem ser feitos, como por exemplo, o tamanho do buffer de envio e recebimento de pacotes, se o pacote pode ser enviado para broadcast (este somente para sockets de datagrama (ex: UDP)), o TTL do pacote, etc.

Um dos meios de ajustar estes valores é utilizando as chamadas do sistema getsockopt(2) e setsockopt(2)

int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen);
  1. int setsockopt(int s, int level, int optname, const void *optval, socklen_t optlen);

Os argumentos, são:

int s: Descritor do soquete aberto
int level: Nivel do protocolo que deseja alterar a opção (ip, tcp, udp…)
int optname: Opção que deseja alterar
void *optval: Um ponteiro para a variável ao qual o valor deve ser gravado em getsockopt() ou lido em setsockopt().
socklen_t optlen: Tamanho da variável optval

Os valores para level, optname e optval estão descritos nas sessões “Socket Options” de ip(7),tcp(7),udp(7),socket(7) e unix(7).

O código abaixo, trás dois exemplos de opções:

  • Aumentar o tamanho do buffer de recebimento
  • Liberar o envio de pacotes UDP para o endereço de broadcast da rede:

sockopt.c Continue reading ‘(get|set)sockopt’ »

Python Píxel à Píxel

Processamento de imagens, quem diria que eu teria que fazer isto, mas é a academia!, cadeira de Processamento Digital de Imagens.

Em meu grande portifólio de linguagens de programação, C e Python, escolhi a segunda pensando: Ah vai ser barbadinha!
- E não é que foi mesmo?

Foram apresentadas seis técnicas:
* Acesso a cores (adicão de brilho)
* Conversão para tons cinzas
* Negativa
* Limiarização
* Adição
* Subtração

As quais devíamos implementar. Para isto utilizei o módulo de imagem que possui várias funções, desde ler uma imagem à setar propriedades e editar os valores RGB de cada píxel.

O Legal, é que mesmo sem nunca ter trabalhado com imagem (ao menos em nivel de manipulação de pixel), consegui resolver os problemas muito rapidamente, ao ponto de ser o único a terminar os execícios em sala… e ter tempo de dar umas risadas com a/da galera “Java”, o que foi mais legal :D

A imagem abaixo mostra o resultado da aplicação das ténicas nas fotos do Tux e do Beastie…

imagens

imagens modificadas

E o código fonte está aqui.

Python! Python! Python!