Driver wireless no ubuntu 12.04

Depois de muuito tempo, estou voltando a postar.

Atualizar o Ubuntu sempre é uma emoção, ainda mais quando algo para de funcionar. Poisé, atualizei o meu para o Ubuntu 12.04 e meu driver wireless parou de funcionar.

Fui no System Settings > Additional Drivers > Broadcom STA driver wireless. Tentei ativar mas deu erro.

Abaixo seguem os passos que fiz para voltar a funcionar:

1) Listei a minha placa com o comando:

$ lspci -nn | grep 0280

0e:00.0 Network controller [0280]: Broadcom Corporation BCM4312 802.11b/g LP-PHY [14e4:4315] (rev 01)

2) Reinstalei o pacote:

$ sudo apt-get install –reinstall bcmwl-kernel-source

3)E por último:

$ sudo modprobe wl

Isso fez com que minha placa pci.id [14e4:4315]  voltasse a funcionar.

Mudando a resolução da VMWare

Quem programa para a TV Digital sabe que é essencial, para rodar as aplicações, ter a VMWare instalada com o ginga. Se você for testar uma aplicação colocando-a em um set-top box, e tiver utilizando a VMWare com resolução diferente da televisão, vai saber como é chato ter que intuir as posições na aplicação. Ou for passar essa aplicação para outra VMWare com outra resolução, a aplicação irá ficar toda fora de posição.

Então, você pode mudar a resolução da VMWare da seguinte forma:

Assumindo que você já está rodando o ginga pela VMWare, e abriu o terminal (ssh root@ip).

Modifique os seguintes arquivos:

/etc/grub.conf

Dentro desse arquivo terá uma linha parecida com essa:

#kernel /boot/vmlinuz-2.6.23-GingaVM-0.9.26 ro root=LABEL=/ vga=788 video=vesafb:ywrap,mtrr 1 ginga quiet

Onde você altera o parâmetro vga para, por exemplo,  788 (800x600x16) ou 791 (1024x768x16).

E altera o arquivo,  /etc/directfbrc :

 Altere o parâmetro mode para 800×600-75 ou 1024×768-75 de acordo com as alterações que você fez anteriormente.

A seguir, tem uma lista com as resoluções mais utilizadas:

# VESA framebuffer console @ 1024x768x64k
vga = 791
# Normal VGA console
# vga = normal 
# VESA framebuffer console @ 1280x720x64k
# vga=794
# VESA framebuffer console @ 1024x768x64k
# vga=791
# VESA framebuffer console @ 1024x768x32k
# vga=790
# VESA framebuffer console @ 1024x768x256
# vga=773
# VESA framebuffer console @ 800x600x64k
# vga=788
# VESA framebuffer console @ 800x600x32k
# vga=787
# VESA framebuffer console @ 800x600x256
# vga=771
# VESA framebuffer console @ 640x480x64k
# vga=785
# VESA framebuffer console @ 640x480x32k
# vga=784
# VESA framebuffer console @ 640x480x256
# vga=769 
 
Espero ter ajudado com essas informações,

Grande Abraço

Manipulação de variáveis e estado em NCL

Na última semana, fiz uma apresentação para a disciplina Televisão Digital do mestrado sobre manipulação de estado e variáveis em ncl que aborda variáveis locais, globais, private base, entre outras coisas. Então estou disponibilizando esta apresentação e se alguém tiver alguma dúvida é só entrar em contato comigo.

Detecção de pele usando o espaço de cor HSV

Depois de muito tempo sem postar nada, estou motivado em fazer esse post, pois fui surpreendido esta semana com dois e-mails de pessoas que eu nunca conheci e que estavam interessadas em um trabalho que publiquei ano passado no SIBGRAPI 2009, um Simpósio Brasileiro de Computação Gráfica e Processamento de Imagens. Uma das pessoas que me procuraram é mestrando na Mackenzie e outro, para minha surpresa, é de Israel.

Dado esses fatos, eu encaminhei meu código para essas pessoas. Neste post vou falar um pouco sobre meu trabalho (apesar de já te-lo abordado em um post anterior, neste vou entrar em mais detalhes) e depois colocar o código abaixo.

Esse trabalho fala sobre o processamento que fiz para detectar pele em imagens. Usando C e uma biblioteca chamada openCV da intel, para processamento de imagens. Primeiramente entro com a imagem em RGB. É convertida a mesma imagem para HSV que é o espaço de cor em que a cor da pele é melhor especificada, mais precisamente pelo Hue, que é exatamente o canal que eu utilizo para detecção de pele. Faço uma busca neste canal pelo intervalo de 6 à 38, pois é este intervalo que caracteriza a matiz correspondente à cor de pele caucasiana.

Utilizo “Dilate”, “Erode” e “Smooth” sequencialmente para que a detecção seja aperfeiçoada. Por último comparo os pixels da minha imagem depois de processada com uma imagem chamada Ground Truth, que seria uma imagem “gabarito”, e verifico os falsos positivos, falsos negativos, verdadeiros positivos e verdadeiros negativos, para possíveis comparações com outros trabalhos. Além também de salvar em um arquivo esta imagem processada.

Eis que segue o código:


#include “stdafx.h”
#include
#include
#include
#include
#include
#include
#include

#define get_channel(i, j, frame, channel) ((uchar *)(frame->imageData + j*frame->widthStep))[i*frame->nChannels + channel]

#define set_channel(i, j, frame, channel, value) ((uchar *)(frame->imageData + j*frame->widthStep))[i*frame->nChannels + channel] = value

int _tmain(int argc, _TCHAR* argv[])
{
    //Load the image
    IplImage *img = cvLoadImage(“beckham.bmp”);
    IplImage *imgGT = cvLoadImage(“beckhamgt.bmp”);
   
    //Show the image in a window
    cvNamedWindow(“Image:”, 1);
    cvShowImage(“Image:”, img);

   
   
    int TP = 0,TN = 0,FP = 0,FN = 0;

    pHSVImg = cvCreateImage(cvSize(img->width, img->height), img->depth, 3);
    pHSVgt = cvCreateImage(cvSize(imgGT->width, imgGT->height), imgGT->depth, 3);
            
    //Convert to HSV
    cvCvtColor(img,pHSVImg,CV_BGR2HSV);
   
    
    //Write the image in a different file
    if( !cvSaveImage(“picture_HSV.bmp”, pHSVImg))
    {
        fprintf(stderr, “fail to write image file\n”);
    }
    
    //Remember to release the memory after using it
    

   
    //convert to hsv, detect hue 
    IplImage *thresholdingFrame = cvCreateImage(cvSize(img->width, img->height), IPL_DEPTH_8U, 3);
   
   
    for(int i = 0; i < pHSVImg->width; i++)
    {
        for(int j = 0; j < pHSVImg->height; j++)
        {   
            int hue = get_channel(i, j, pHSVImg, 0) * 2; //openCV divides the hue by 2 to fit in the range [0,255]

            float saturation = get_channel(i, j, pHSVImg, 1) ;

            //float value = get_channel(i, j, hsvFrame, 2) / 255;
           
            /*if (hue < minHue)
            {
                minHue = hue;
                printf(“H min: %d\n”, minHue);
            }
           
            if (hue > maxHue)
            {
                maxHue = hue;
                printf(“H max: %d\n”, maxHue);
            }*/
           
            set_channel(i, j, pHSVImg, 1, hue / 2);
            set_channel(i, j, pHSVImg, 0, 0);
            set_channel(i, j, pHSVImg, 2, 0);
            set_channel(i, j, pHSVImg, 1, saturation );

            if (hue > 6 && hue < 38 )
            {
                set_channel(i, j, thresholdingFrame, 0, 255);
                set_channel(i, j, thresholdingFrame, 1, 255);
                set_channel(i, j, thresholdingFrame, 2, 255);
            }
            else
            {
                set_channel(i, j, thresholdingFrame, 0, 0);
                set_channel(i, j, thresholdingFrame, 1, 0);
                set_channel(i, j, thresholdingFrame, 2, 0);
            }
        }
    }
   
if( !cvSaveImage(“picture_thresholding.bmp”, thresholdingFrame))
    {
        fprintf(stderr, “fail to write image file\n”);
    }

//processing to skin detection
IplConvKernel* element = cvCreateStructuringElementEx( 5, 5, 2, 2, CV_SHAPE_ELLIPSE);
    cvDilate(thresholdingFrame, thresholdingFrame, element);
    cvErode(thresholdingFrame, thresholdingFrame, element);

cvSmooth(thresholdingFrame,thresholdingFrame,CV_MEDIAN, 3);
cvSmooth(thresholdingFrame,thresholdingFrame,CV_MEDIAN, 3);

//loop to read pixel per pixel and account if they are equal
for(int i = 0; i < thresholdingFrame->width; i++)
    {
        for(int j = 0; j < thresholdingFrame->height; j++)
        {   
           
                    int imgMy = get_channel(i,j,thresholdingFrame,0);
                    int imgGround = get_channel(i,j,imgGT,0);

                   

                    if(imgMy == 255 && imgGround == 255)
                    { TP++;}

                    if(imgMy == 255 && imgGround == 0)
                    { FP++;}

                    if(imgMy == 0 && imgGround == 255)
                    { FN++;}

                    if(imgMy == 0 && imgGround == 0)
                    { TN++;}

           
        }
}
   

    printf(“TP is = %d\t”,TP);
    printf(“TN is = %d\t”,TN);
    printf(“FP is = %d\t”,FP);
    printf(“FN is = %d”,FN);

    cvNamedWindow(“threshold:”, 1);
    //cvNamedWindow(“ImageHSVgt:”, 1);
    cvShowImage(“threshold:”, thresholdingFrame);
    cvShowImage(“ImageHSV:”, pHSVImg);
    //cvShowImage(“ImageHSVgt:”, pHSVgt);
    cvWaitKey();
    cvDestroyWindow(“Image:”);
    cvDestroyWindow(“ImageHSV:”);
    cvReleaseImage(&img);
    cvReleaseImage(&pHSVImg);
    cvReleaseImage(&imgGT);
    cvReleaseImage(&thresholdingFrame);
    //cvReleaseImage(&pHSVgt);

    return 0;
}

Este trabalho pode gerar futuras implementações como por exemplo filtro para sites adultos. Podem usar o código e divulgar colocando o meu trabalho como referência. Quais quer dúvida, podem me mandar por e-mail ou deixar um comentário que assim que possível responderei.

Grande Abraço

Campus Party Ao Vivo

Primeiro post de 2010, passei um tempo sem postar e meu primeiro post de 2010 fala sobre a maior festa mundial de internet, o Campus Party.

E pra quem não foi, como eu, mas está afim de assistir as palestras da Campus Party é só clicar no link e escolher quais dos canais quer assistir. A qualidade está muito boa e ao vivo.

http://tv.campus-party.org/CP_videoplayer_16_9.swf?c=11058

Ubuntu 9.04 – HDA Intel

Resolvi escrever esse post para ajudar a vida daqueles que não sabem muito de linux (assim como eu) e estão com problemas na configuração do no Ubuntu 9.04 (microfone fica chiando, som sai pelo auto-falante e pelo fone). Eu utilizo um Dell Vostro 1320 a placa de som é HDA Intel. Para funcionar corretamente é preciso instalar o Alsa.

A primeira coisa a se fazer é resolver as dependências e os headers do kernel. Para isso é só utilizar o comando no terminal:

$ sudo aptitude install build-essential libncurses-dev gettext xmlto xmltoman linux-headers-`uname -r`

Baixe os componentes:

Driver
alsa-driver-1.0.20.tar.bz2

Bibliotecas
alsa-lib-1.0.20.tar.bz2

Utilitários
alsa-utils-1.0.20.tar.bz2

Assumindo que você fez os downloads na pasta “downloads”, deve-se fazer o seguinte:

$ sudo mkdir -p /usr/src/alsa
$ cd /usr/src/alsa
$ sudo cp ~/downloads/alsa* .
$ sudo tar xjf alsa-driver*.bz2
$ sudo tar xjf alsa-lib*.tar.bz2
$ sudo tar xjf alsa-utils*.tar.bz2

Agora, vamos configurar cada um dos pacotes:

- Driver

$ cd alsa-driver*
$ sudo ./configure –with-cards=hda-intel –with-kernel=/usr/src/linux-headers-$(uname -r)
$ sudo make
$sudo make install

- Lib

$ cd ../alsa-lib*
$ sudo ./configure
$ sudo make
$ sudo make install

Instale esta dependência:
$ sudo apt-get install libncurses5-dev

- Utils

$ cd ../alsa-utils*
$ sudo ./configure
$ sudo make
$ sudo make install

Só reiniciar o computador e o som já deve estar funcionando normalmente. Eu tentei instalar os pacotes na versão 1.0.21 utilizando os mesmos comandos e não deu muito certo, com a versão anterior funcionou normalmente.

2 vagas para estagiários na Peta5

Prezados,

Estamos selecionando 2 alunos de graduação para estágio em
desenvolvimento para TV digital na Peta5 em Niterói/RJ.
Abaixo segue uma descrição das vagas, bem como o arquivo em anexo.
Peço que nos ajudem na divulgação.

- A Peta5
A Peta5 é uma startup brasileira, sediada em Niterói/RJ, que busca
ser referência no desenvolvimento de software para propaganda na TV
digital.

- Requisitos
Estudante de graduação;
Bons conhecimentos de lógica de programação;
Capacidade de lidar com várias tarefas em simultâneo e de trabalho
independente;
Capacidade para participar de uma equipe de desenvolvimento de alto
desempenho.

- Desejável
Conhecimento e experiência nas linguagens:
XHTML
CSS
NCL
Lua
Python
Utilização de sistemas GNU/Linux;
Conhecimento de softwares livres para artes gráficas, como GIMP e Inkscape;
Conhecimento da metodologia Scrum de desenvolvimento ágil;
Conhecimento de TDD (Test Driven Development).

- Duas Vagas
Início imediato;
Dedicação semanal de 20 horas;
Aprendizado contínuo com treinamentos de qualidade e ambiente agradável;
R$300,00 de remuneração durante a fase de experiência, com
possibilidade de aumento posterior.

- Como Participar
Envie seu currículo através do endereço
www.peta5.com.br/trabalhe-conosco até 27 de novembro de 2009;
Dúvidas devem ser enviadas para rh@peta5.com.br;
Não serão aceitos currículos enviados por email.
Os currículos que se destacarem serão chamados para entrevista.

Dojo NIterói

Toda quinta está acontecendo na Universidade Federal Fluminense o Dojo Niterói, que reúne programadores para praticar a técnica de TDD (Test Driven Development), que consiste, resumidamente, em escrever testes, se o teste for aceito, o código é refatorado e testado novamente, senão o teste é reescrito até que o teste seja validado e assim por diante. Basicamente esse é o ciclo do TDD, e nem quero me aprofundar no assunto.
O Dojo em si, é a programação em par, onde quem está na frente do computador é o piloto e ao lado fica o co-piloto, e cada piloto tem 5 minutos, num sistema de rodízio com quem está na “plateia”. Enquanto o teste não passar, a plateia não pode dar opiniões. Na quinta passada (12/11/09) rolou Dojo de Java Script, e realmente foi muito boa a participação de quem estava presente. Estou postando algumas fotos, mas podem ser vistas todas as fotos aqui http://bit.ly/fU5vO

Em próximos posts pretendo falar de algumas ferramentas utilizadas para testes como Telescope(Lua), JSSpec(JavaScript).

O bom mesmo é o pós Dojo, a imagem acima já diz tudo! =]

LuaDoc

Pra você que também programa pra tv digital e quer saber como documentar seus códigos em lua, ai vai a minha sugestão. LuaDoc no linux.

Primeiro, para utilizar o LuaDoc, deve ser instalado os pacotes lua5.1, luarocks e luadoc. Depois que tiver instalados esses 3 pacotes, modifique o arquivo .bashrc, colocando no final do arquivo PATH=”$PATH:/home/seu.usuario/.luarocks/bin/”. Pronto, o LuaDoc já está pronto para ser utilizado.

A documentação do LuaDoc é bem simples e deve se seguir a seguinte estrutura:

module(“arquivo”) — a documentação é indexada por módulo ou files(“arquivo”) — a documentação é indexada pelo nome do arquivo

— Comentário inicial sobre a função
– @tag1 Texto da tag1
– @tag2 Texto da tag2
– @tag3 Texto da tag3

function sua_funcao_aqui(){}

Tags do LuaDoc ¶
@param Describe function parameters. It also requires the name of the parameter.
@see Refers to other functions or tables.
@return Describe the returning value or values of the function.
@author Provide information about the author of a JavaScript file or a function
@usage Describe the usage of the function or variable.
@description The description of the function or table. This is usually infered automatically.
@name The name of the function or table definition. This is usually infered from the code analysis, and the programmer does not need to define it. If LuaDoc can infer the name of the function automatically it’s even not recomended to define the name explicitally, to avoid redundancy.
@class If LuaDoc cannot infer the type of documentation (function, table or module definition), the programmer can specify it explicitally.
@field Describe a table field definition.
@release Free format string to describe the module or file release.

Para gerar a documentação de um arquivo .lua deverá ser utilizado o comando:

$ luadoc arquivo.lua

Comando opcional ¶

O comando luadoc possui algumas opções:
-d Defines the output directory path. Default is the current dir.
-h, –help Show help instructions.
–noindexpage Do not generate the index page.
–nofiles Do not generate documentation focused on files.
–nomodules Do not generate documentation focused on modules.
–doclet Doclet module used to generate output.
–taglet Taglet module used to parse input code.
-q, –quiet Suppress info output.
-v, –version Print version information.

OBS: Este comando só funcionará se o primeiro passo (de instalar os 3 pacotes) já foi realizado.

Após isso, na mesma pasta do arquivo.lua, será criada uma pasta com o nome files e modules. São nessas pastas que estão os documentos resultantes da documentação, indexados pelo nome ou pelo módulo.

Scrum Meeting Feedback

Apesar do evento ser bastante para promover as empresar que organizaram o evento, foram abordados assuntos interesantes envolvendo gestão. Primeiro ocorreu uma palestra mais geral, discutindo quais os motivos de stress. E um dos maiores motivos é que os requisitos são mal explicados, e realmente, deixa qualquer programador irado!

Dividindo em antes e depois, temos:

Software Development Before Agile
- Big Plans
- Big Requirements
- Big Architecture
- Big tests at the end

Papeis na gestão 1.0 e 2.0
- Trabalho 1.0

  • Produção em massa (Chaplin)
  • Fabrica de Software?
  • Trabalhador 1.0
    • Executor de tarefas
    • Seu chefe planeja taticamente
    • Executa
    • Seu chefe verifica
    • Seu chefe melhora

Trabalho 2.0

  • Trabalhador do conhecimento
  • Trabalhador do conhecimento
  • Trabalhador 2.0
    • Especialista e conhecedor profundo do trabalho
    • Planeja Taticamente
    • Executa
    • Verifica
    • Melhora seu trabalho

Software Development After Agile
- Continous Planning
- Doing Requirements
- Architecture all the time
- A lot of managed changes
- Testing all the time
- Deploying
- Blamin at start

Scrum em palavras

  • Scrum permite focar entrega do maior valor no menor tempo
  • Rápida e repetida inspeção de funcionamento
  • O próprio negócio define as prioridades
  • Auto-organização
  • 2 semanas (sprint)
  • Real objetivo: parar de entregar lixo

A segunda palestra foi bastante interessante. Mostraram um caso que se adotou scrum à distância, onde trabalhavam duas equipes distantes 600 km, utilizando ferramentas como skype, IM e webcam para manter as equipes interadas.

E porque adotar scrum?

  • Muitas Mudanças
  • Dificuldades na especificação dos requisitos
  • Resultados rapidos
  • Comprometimento da equipe
  • Desenvolvimento pessoal e técnico da equipe
  • Diminuir Dependencias
  • Diminuir Custos
  • Práticas do scrum como a Daily Scrum (reuniões diárias de 15 minutos) é essencial para um bom andamento do projeto, pois “O que fez?”, “O que vai fazer”, “Possui impedimentos?” deixam a equipe caminhar de forma uniforme, assim como no rugby, daí que surge a palavra scrum. Mas esta prática só funciona com disciplina.

    A evolução na quebra de tarefas é uma constante, à medida que a equipe e o projeto evoluem, esta quebra fica mais intuitiva. O Product Owner (PO) também deve estar presente na daily scrum, mesmo que não seja todo dia, mas afinal, ele que é o cliente e o mais interessado no resultado (mas não único). O PO está interessado em resultados, no software funcionando, não na documentação, e o scrum, por ser ágil faz com que os resultados visíveis sejam produzidos mais rapidamente e as mudanças também serem realizadas mais rapidas, fazendo que diminua a entrega de lixo no final do projeto.

    Basicamente isto que foi abordado no Scrum Meeting 2.0, e sinceramente, estou me tornando militante do Scrum. Tirem suas proprias conclusões e deixem seus comentários. Grande abraço.

    Seguir

    Obtenha todo post novo entregue na sua caixa de entrada.