Todos os posts de Cabelo

Avatar de Desconhecido

Sobre Cabelo

Sócio fundador da empresa OITI/NETi TECNOLOGIA fundada em 1996, teve seu primeiro contato com tecnologia em 1983 com 11 anos de idade na cidade de Bebedouro (interior de SP). Leva o Linux a sério, pesquisa e trabalha com biometria e visão computacional desde 1998. Experiência com biometria facial desde 2003, redes neurais artificiais e neurotecnologia desde 2009. Inventor da tecnologia CERTIFACE, da imagem Linux LiMobile e OSAR, mais de 79 palestras ministradas, 14 artigos impressos publicados, mais de 8 milhões de acessos nos 113 artigos publicados no Viva O Linux. Mantendor de projetos opensource, rpm oficiais e o guia FOCA Linux mobile (ePUb) desde 2010, Embaixador openSUSE, membro oficial: Viva O Linux desde 2003, openSUSE desde 2010, OWASP desde 2016 e Mozillians desde 2017.

Artigo de Natal: Liberte o seu Motorola Atrix, e o transforme no desktop perfeito!

Conforme o prometido, disponibilizo neste artigo como transformar o seu Atrix com o Lapdock no perfeito desktop. Com Gimp, Editor de texto, Planilha de cálculo e outros. Acredito que com o lançamento do modelo RAZR da Motorola, talvez o modelo Atrix apresente um preço mais acessível.

Ressalto que danos causado ao equipamento devido à utilização deste texto, não é de responsabilidade do autor. Sendo assim, o proprietário do aparelho deve estar ciente de todos os riscos antes de proceder.

Leia AQUI o artigo na íntegra!

Synergy no openSUSE, Atrix e iPAD.

O mouse quase deu a volta completa no meu quarto com o pacote Synergy. Para quem não conheçe, é um software que permite que o usuário compartilhe um único teclado e mouse com vários computadores conectados por uma rede TCP/IP. Você poderá simplesmente mover o mouse para o canto da tela para que o mouse passe pro computador secundário configurado. Enquanto seu mouse está na tela do outro computador tudo que o usuário digitar no teclado irá para o mesmo computador.”

Abaixo a configuração exemplo do arquivo /etc/synergy.conf no servidor:

section: screens
lapdell01.neti:
Atrix:
vostro200-01:
philco01.faria:
iPad-do-CABELO:
end

section: links
lapdell01.neti:
left = Atrix
right = vostro200-01
Atrix:
right = lapdell01.neti
left = philco01.faria
vostro200-01:
left = lapdell01.neti
right = iPad-do-CABELO
philco01.faria:
right = Atrix
iPad-do-CABELO:
left = vostro200-01
end

Execute o seguinte comando no servidor:

# synergys -f --config /etc/synergy.conf

E abaixo a linha de comando para executar na máquina clientes.

$ synergyc --no-daemon [IP-SERVIDOR]

Veja o vídeo a seguir:

Pôlemica: Celular e cancer.


Hoje a minha Cunhada perguntou se eu queria um tipo de protetor para celular (logo imaginei a polêmica de radiação que causa cancer). Deixo neste post a minha opinião particular sobre este assunto. Em primeiro lugar se você estiver realmente incômodando, sugiro utilizar os fontes de ouvido cabeados presente atualmente em quase todos os modelos de equipamento e/ou smartphones.

Porém vamos aos fatos:

Em 31 de maio de 2011, a OMS publicou um documento (Clique aqui para obter o relatório) que contrasta com as publicadas anteriormente. Atualmente não existem estudos suficientemente esclarecedores para se afirmar que os efeitos desse tipo de exposição são totalmente seguros para a saúde.

Em pleno século 21 somos bombardeados com radiação e não é possível fugir dela. A maior fonte é o sol. Não podemos esquecer das antenas de rádio,TV e celulares que também emitem radiação. As redes de transmissão sem fio, telefones sem fio também emitem algum tipo de radiação.

Radioatividade Ionizante:

Esta sim é nociva e sabemos muito bem, pois vem da tecnologia nuclear, pode matar e realmente provoca câncer. Em contra-partida é utilizada para tratar o câncer (radioterapia). Esta radiação é denominada INOZANTE, tem ondas de alta frequência que chegam até o átomo, altera a estrutura molecular, provocando a formação do câncer.

Radioatividade Não-Ionizante:

Esta radioatividade é de baixa freqüência, agita os átomos, produz calor, mas não altera a matéria. Nenhum membro da OMS deixou de utilizar aparelhos celulares apesar de seus estudos.

Resumidamente todo este barulho é derivado do fato que os celulares emitem radiações classificada em nível 2B em uma escala de risco que vai de 1 a 4. O 4 indica nenhum risco. No nível 2B, não há evidências de perigo. Nos próximos dez anos, os cientistas terão muito trabalho até conseguir chegar a uma conclusão com embasamento técnico sobre as consequências do uso do celular na saúde do ser humano.

Um pesquisadora Dinamarquesa de Câncer diagnosticou as taxas de câncer foram quase as mesmas das que não faziam uso do aparelho.  “Até agora, o único uso de celular que certamente faz mal para a saúde é no trânsito. Dirigir falando ou mesmo lendo e escrevendo mensagem, aumenta em quatro vezes o risco de acidente. “

ATENÇAO: Crença é algo muito poderoso. Se você realmente acredita que algo pode causar algum mal à sua saúde, então isso vai acontecer, confirma professores da Universidade de Essex que lidera este tipo a pesquisa.

openSUSE 12.1 64 bits, CUDA 4.1 RC2 com openCV e programação multi-nuclear.

Após os testes com o a biblioteca CUDA 4.1 RC 2 GPU conforme o post anterior, agora compilei a openCV também com a lib TBB e CUDA. Resultado: Performance computacional além da imaginação. Tudo isto em função da programação paralela. Escrito em C++.O TBB se encarrega na adaptação do software, ou seja determinando o número ideal de threads e tornando uma realidade a programação multinúcleo.

Deixo neste post, as alterações necessárias no código fonte da bibliotec openCV 2.3.1 para compilara com o gcc 4.6.2 no openSUSE 12.1 e com a biblioteca CUDA 4.1.

No arquivo  modules/gpu/src/imgproc.cpp:

Linha 762:
Trocar:
    ppSafeCall( nppiRectStdDev_32s32f_C1R(src.ptr<Npp32s>(), static_cast<int>(src.step),
   sqr.ptr<Npp32f>(), static_cast<int>(sqr.step), dst.ptr<Npp32f>(), 
    static_cast<int>(dst.step), sz, nppRect) );
Por:
    nppSafeCall( nppiRectStdDev_32s32f_C1R(src.ptr<Npp32s>(), static_cast<int>(src.step),
   sqr.ptr<Npp64f>(),   static_cast<int>(sqr.step), dst.ptr<Npp32f>(), 
    static_cast<int>(dst.step), sz, nppRect) );

No arquivo modules/gpu/src/graphcuts.cpp

linha 80

Trocar:

    nppSafeCall( nppiGraphcut_32s8u(terminals.ptr<Npp32s>(), leftTransp.ptr<Npp32s>(), 
 rightTransp.ptr<Npp32s>(), top.ptr<Npp32s>(), bottom.ptr<Npp32s>(), 
 static_cast<int>(terminals.step), static_cast<int>(leftTransp.step),
   sznpp, labels.ptr<Npp8u>(), static_cast<int>(labels.step), buf.ptr<Npp8u>()) );

Por:

    nppSafeCall( nppiGraphcut_32s8u(terminals.ptr<Npp32s>(), leftTransp.ptr<Npp32s>(),
   rightTransp.ptr<Npp32s>(), top.ptr<Npp32s>(), bottom.ptr<Npp32s>(), 
 static_cast<int>(terminals.step), static_cast<int>(leftTransp.step), 
 sznpp, labels.ptr<Npp8u>(), static_cast<int>(labels.step), pState) );

Inserir na linha 67
    NppiGraphcutState *pState;
    Npp8u *pDeviceMem;

Adicionar o linha 75 abaixo da funcao nppSafeCall
    cudaSafeCall( cudaMalloc((void **)& pDeviceMem, bufsz) );

Comentar a linha 78
    //if ((size_t)bufsz > buf.cols * buf.rows * buf.elemSize())
    //    buf.create(1, bufsz, CV_8U); Inserir na linha 80 após o comentário.

    nppSafeCall( nppiGraphcutInitAlloc(sznpp, &pState, pDeviceMem) );

No final do metodo cv::gpu::graphcut, linha 91 inserir

    nppSafeCall ( nppiGraphcutFree(pState));
    cudaSafeCall( cudaFree(pDeviceMem) );

No arquivo modules/gpu/src/element_operations.cpp 

Comente as linhas 297 ate a 304
    //    case CV_8UC4:
    //        nppSafeCall( nppiAbsDiff_8u_C4R(src1.ptr<Npp8u>(), static_cast<int>(src1.step), src2.ptr<Npp8u>(), static_cast<int>(src2.step), 
    //            dst.ptr<Npp8u>(), static_cast<int>(dst.step), sz) );
    //        break;
    //    case CV_16UC1:
    //        nppSafeCall( nppiAbsDiff_16u_C1R(src1.ptr<Npp32s>(), static_cast<int>(src1.step), src2.ptr<Npp32s>(), static_cast<int>(src2.step), 
    //            dst.ptr<Npp32s>(), static_cast<int>(dst.step), sz) );
    //        break;

No arquivo modules/gpu/src/matrix_reductions.cpp 

Inserir na linha 117
     int nBufferSize;
    nppiMeanStdDev8uC1RGetBufferHostSize (sz, &nBufferSize);
    Npp8u * pDeviceBuffer;
    cudaSafeCall( cudaMalloc((void **)& pDeviceBuffer, nBufferSize) );

Modificar a linha 124 

Trocar:
    nppSafeCall( nppiMean_StdDev_8u_C1R(src.ptr<Npp8u>(), static_cast<int>(src.step), sz, dbuf, (double*)dbuf + 1) );
Por:
    nppSafeCall( nppiMean_StdDev_8u_C1R(src.ptr<Npp8u>(), static_cast<int>(src.step),  sz, pDeviceBuffer, dbuf, (double*)dbuf + 1) );

Modificar a linha 126 

Trocar:
    cudaSafeCall( cudaDeviceSynchronize() );
Por:
    cudaSafeCall( cudaFree(pDeviceBuffer) ); 

Lançado CUDA 4.1 RC2! Instalando no openSUSE 12.1

A NVidia acaba de disponibilizar o seu pacote para desenvolvedores CUDA 4.1 RC2. Ou seja uma arquitetura de computação paralela da NVIDIA que possibilita aumentos significativos na performance de computação pelo aproveitamento da potência da GPU (unidade de processamento gráfico).

A computação está evoluindo de um “processamento central” na CPU para um “coprocessamento” na CPU e na GPU. Para permitir esse novo paradigma em computação, a NVIDIA inventou a arquitetura de computação paralela CUDA, que agora vem inclusa em GPUs GeForce, ION, Quadro e Tesla, representando uma base instalada significativa para os desenvolvedores de aplicativos. O download pode ser efetuado AQUI, já estou baixando e em breve novidades…

A seguir, disponibilizo passo-a-passodeixo de como utilizar a GPU aplicada aos recursos de visão computacional utilizando a tecnologia NVIDIA CUDA, uma arquitetura de computação paralela de propósito geral que tira proveito do mecanismo de computação paralela das unidades de processamento gráfico (GPUs) NVIDIA para resolver muitos problemas computacionais complexos em uma fração do tempo necessário em uma CPU.

Download:

O primeiro passo foi baixar o arsenal de pacotes do SDK da NVIDIA, ou seja o Developer Drivers for Linux (285.05.23), o CUDA ToolKit e para finalizar o GPU Computing SDK. Tudo isto esta disponível AQUI.

Sequência de instalação:

Após a instalação do drive com CUDA, execute o CUDA ToolKit , CUDA Tools SDK e para finalizar o GPU Computing SDK:

# ./cudatoolkit_4.1.21_linux_64_suse11.2.run

Crie as variáveis ambientais:

#! /bin/sh
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
PATH=$PATH:/usr/local/cuda/bin
export PATH LD_LIBRARY_PATH

Execute o pacote GPU Computing SDK:

# ./gpucomputingsdk_4.1.21_linux.run

OBS1: Insira a linha a seguir no arquivo ~/NVIDIA_GPU_Computing_SDK/C/common/common.mk na linha 173

NVCCFLAGS   += --compiler-options -fno-strict-aliasing --compiler-options -fno-inline

OBS2: Durante a compilação no openSUSE 12.1, obtive o seguinte erro: “unsupported GNU version! gcc 4.6 and up are not supported!”

A solução foi ignorar o erro comentando as sequintes linha a seguir no arquivo /usr/local/cuda/include/host_config.h

//#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5)
//#error -- unsupported GNU version! gcc 4.6 and up are not supported!
//#endif /* __GNUC__> 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 5) */

Pronto neste etapa o NVIDIA CUDA foi instalado com sucesso!