Arquivo da categoria: Tecnologia

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.

ITG-3200 (Gyroscope) & ADXL345 (Accelerometer) – Arduino Example

Recently I got an IMU (Inertial Measurement Unit) from Sparkfun, called SparkFun 6 Degrees of Freedom IMU Digital Combo Board.

IMU Breakout Doard - 6 Degree of Freedom

This IMU has embedded a gyroscope (ITG-3200) and a accelerometer (ADXL345) in a breakout board being useful for application that requires knowledge about orientation, position, and velocity.

The gyroscope is responsible to measure angular velocity on body axes:

  • X Axis – Roll
  • Y Axis – Pitch
  • Z Axis – Yaw

Some examples:

Angular Movements - Gyro Examples

The accelerometer is responsible to measure acceleration on the body axes (x, y and z) that is useful to determine how fast a body is speeding up or slowing down.

Another point is the use of I2C (Inter-Integrated Circuit) bus that is an intra-board serial bus that uses only two “wires” for comunication: one responsible for synchronizing the devices on bus (CLOCK – SCL)  and another one responsible for data transmission (DATA – SDA).

This article aims to present a arduino implementation that simply shows output data from sensors. The references on source code are highly recommended for study before deploy this code in real application.

// SparkFun 6 Degrees of Freedom IMU Digital Combo Board
// ITG-3200 (GYRO) & ADXL345 (ACCEL) - Arduino Example Algorithm
// 
// Author: Gustavo Bertoli
//
// References:
// https://www.sparkfun.com/datasheets/Sensors/Accelerometer/ADXL345.pdf
// http://bildr.org/2011/03/adxl345-arduino/
// https://learn.sparkfun.com/tutorials/itg-3200-hookup-guide
// https://www.sparkfun.com/datasheets/Sensors/Gyro/PS-ITG-3200-00-01.4.pdf
// https://www.sparkfun.com/products/10121

#include <Wire.h>

// I2C Devices Address
#define GYRO 0x68    // ITG-3200 I2C Address - 0x68
#define ACCEL 0x53   // ADXL345  I2C Address - 0x53

// ITG-3200 (GYRO) REGISTERS
#define GYRO_X_H 0x1D
#define GYRO_X_L 0x1E
#define GYRO_Y_H 0x1F
#define GYRO_Y_L 0x20
#define GYRO_Z_H 0x21
#define GYRO_Z_L 0x22
#define DLPF_FS 0x16
#define SMPLRT_DIV 0x15

// ADXL345 (ACCEL) REGISTERS
#define ACCEL_X_L 0x32 
#define ACCEL_X_H 0x33
#define ACCEL_Y_L 0x34
#define ACCEL_Y_H 0x35
#define ACCEL_Z_L 0x36
#define ACCEL_Z_H 0x37
#define POWER_CTL 0x2D
#define DATA_FORMAT 0x31

//ITG-3200
//DLPF, Full Scale Register Bits
//FS_SEL must be set to 3 for proper operation
//Set DLPF_CFG to 3 for 1kHz Fint and 42 Hz Low Pass Filter
char DLPF_CFG_0 = 1<<0;
char DLPF_CFG_1 = 1<<1;
char DLPF_CFG_2 = 1<<2;
char DLPF_FS_SEL_0 = 1<<3;
char DLPF_FS_SEL_1 = 1<<4;

byte adxl345[6];

void setup()
{
  //Set serial communication at 9600 baudrate
  Serial.begin(9600);
  
  //Initialize the I2C communication.
  Wire.begin();

  //Set the gyroscope scale for the outputs to +/-2000 degrees per second
  writeI2C(GYRO, DLPF_FS, (DLPF_FS_SEL_0|DLPF_FS_SEL_1|DLPF_CFG_0));
  //Set the sample rate to 100 hz  
  writeI2C(GYRO, SMPLRT_DIV, 9);

  //to enable measurement mode in ADXL345 (measure bit)
  writeI2C(ACCEL, POWER_CTL, 0b00001000);
  //The DATA_FORMAT register controls the presentation of data to Register 0x32 through Register 0x37
  //writeI2C(ACCEL, DATA_FORMAT, 0b0000);
}

void loop()
{
   int data = 0;
   int x, y ,z; //acceleration - ADXL345
   Serial.println("");
   Serial.println("==============================");
   Serial.println("=ACCELEROMETER DATA (ADXL345)=");
   Serial.println("==============================");
   readI2C(ACCEL,ACCEL_X_L,6);    //ADXL345 multiple-byte read to prevent a change in data between reads of sequential registers
   // each axis reading comes in 10 bit resolution, ie 2 bytes.  Least Significat Byte first!!
   // thus we are converting both bytes in to one int
   x = (((int)adxl345[1]) << 8) | adxl345[0];   
   y = (((int)adxl345[3]) << 8) | adxl345[2];
   z = (((int)adxl345[5]) << 8) | adxl345[4];
   Serial.print("X-axis: ");
   Serial.print(x);
   Serial.print(" Y-axis: ");
   Serial.print(y);
   Serial.print(" Z-axis: ");
   Serial.print(z);
   Serial.println("");
   Serial.println("==============================");
   Serial.println("= GYROSCOPE DATA (ITG-3200)  =");
   Serial.println("==============================");
   //Angular velocity on x axis
   data = readRoll();
   Serial.print("Roll: ");
   Serial.print(data);
   
   //Angular velocity on y axis
   data = readPitch();
   Serial.print(" Pitch: ");
   Serial.print(data);

   //Angular velocity on z axis
   data = readYaw();
   Serial.print(" Yaw: ");
   Serial.print(data);
   delay(10000);
}

int readRoll (void){
  int data = 0;
  data = readI2C(GYRO, GYRO_X_H,1)<<8;
  data |= readI2C(GYRO, GYRO_X_L,1);
  return data;
}
int readPitch (void){
  int data = 0;
  data = readI2C(GYRO, GYRO_Y_H,1)<<8;
  data |= readI2C(GYRO, GYRO_Y_L,1);
  return data;
}
int readYaw (void){
  int data = 0;
  data = readI2C(GYRO, GYRO_Z_H,1)<<8;
  data |= readI2C(GYRO, GYRO_Z_L,1);
  return data;
}
// function to read from a device on I2C bus
byte readI2C(byte devAddress, byte devRegister, int numBytes){
  byte data = 0; 
  int aux = 0;
  
  Wire.beginTransmission(devAddress);   //Set device address on I2C bus
  Wire.write(devRegister);              //Set register to read from device
  Wire.endTransmission();               //Stop

  Wire.beginTransmission(devAddress);   //Set device address on I2C bus
  Wire.requestFrom(devAddress, numBytes);      //read data

  if (numBytes == 1) {
    if (Wire.available()){
      data = Wire.read();
    }
  } else {    //ADXL345 multiple-byte read to prevent a change in data between reads of sequential registers
    while (Wire.available()){
      adxl345[aux] = Wire.read();
      aux++;
    }
  }
  Wire.endTransmission();
  return data;
}

// function to write in a device on I2C bus
void writeI2C(byte devAddress, byte devRegister, byte devData){
  Wire.beginTransmission(devAddress);    //Start tx - set device address on I2C bus
  Wire.write(devRegister);               //Set register from I2C device
  Wire.write(devData);                  //Set value to register 
  Wire.endTransmission();                //Stop tx
}

Result:

IMU Output - Arduino Example
IMU Output – Arduino Example

Module GP-20U7 / GP20U7 – GPS Example with arduino

GP-20U7 is a low-cost GPS module available in SparkFun (check it here).

The GP-20U7 is useful for mobile application, autonomous vehicles and many other applications that requires geographical positioning data.

It requires a 3.3V power supply and a UART port to communicate with your processor (more details on datasheet).

This example was implemented with arduino UNO and the following pins were assigned:

  • Vcc pin from GP-20U7 to 3.3V on arduino
  • GND from GP-20U7 to GND on arduino
  • TX from GP-20U7 to PIN10 on arduino

Below is the code implemented:

// GPS Module - GP-20U7 - Arduino Example Algorithm
//
// Author: Gustavo Bertoli
//
// References:
// https://cdn.sparkfun.com/datasheets/GPS/GP-20U7.pdf
// https://www.arduino.cc/en/Reference/SoftwareSerial
// http://forum.arduino.cc/index.php?topic=288234.0
// 

#include <SoftwareSerial.h> 

SoftwareSerial GPS_Serial(10, 11); // RX, TX

void setup() {
  Serial.begin(9600);
  GPS_Serial.begin(9600); 
}

void loop() {
   char rc;

   if (GPS_Serial.available()){
        rc = GPS_Serial.read();
        Serial.write(rc);
   }
}

And the output:

GPS GP-20U7 - arduino output
GPS GP-20U7 – arduino output

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.

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.

Conhecendo o sqlmap – SQL Injection

Neste artigo vou apresentar o sqlmap (sqlmap.org).

sqlmap é uma ferramenta open-source para auditar sites com relação a sua susceptibilidade ou não a ataques de intrusão via SQL injection.  Sendo muito útil durante análises de pentest, automatizando este processo fazendo verificações para os mais diversos vendors de servidores SQL e também formas de ataque.

O requisito principal para utilização do sqlmap é que o local onde você escolher para executá-lo já tenha o Python instalado.

Sua instalação nesse caso é muito simples, basta acessar o site sqlmap.org, escolher a versão zipada ou tarball (.tar.gz), descompactar em uma pasta e então acessar através do terminal de comandos e executar o script sqlmap.py com o Python.

sqlmap "Hello World"
sqlmap “Hello World”

Para uma noção das opções, basta digitar o comando: python sqlmap.py -h

Agora um exemplo simples de avaliação de susceptibilidade a SQL Injection em um site:

Uso do sqlmap
Uso do sqlmap

Mais informações:
sqlmap Wiki: https://github.com/sqlmapproject/sqlmap/wiki
sqlmap FAQ: https://github.com/sqlmapproject/sqlmap/wiki/FAQ

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