sábado, 11 de julho de 2020

Visualização de Dados - Princípio de Pareto aplicado no Calc (LibreOffice)

Existe uma lei natural que foi descoberta por Vilvredo Pareto (1848-1923) que é verdadeira por natureza, denominada a lei do desequilíbrio. Essa lei diz que uma determinada produção é produzida por um pequeno número de partes. Ou com estatísticas mais detalhadas: 80% dos resultados da produção são criações de 20% de certas partes.

Podemos criar um diagrama de Pareto com três elementos básicos:
  • Os fatores, classificados pela magnitude de sua contribuição;
  • Os fatores expressos numericamente; e
  • O efeito cumulativo da porcentagem total dos fatores classificados.
Vamos com calma que na prática isso se traduz de forma muito mais fácil, logicamente devemos começar pelos nossos dados. Vamos imaginar que nossa Organização possua um registro dos erros no Sistema de Sustenção e são apresentados da seguinte forma:

Tipo ErroQuantidade
A143
B34
C230
D42
E28
F58
G8
H3

Uma vez que montamos uma planilha com esses dados, para fins de entendimeto consideremos que a Coluna A contém o Tipo do Erro e B a Quantidade (a linha 0 o cabeçalho). Ordenamos descendentemente pela quantidade: selecionar a coluna B e a partir do Menu selecionar a opção: Data | Sort Selection, na janela que é mostrada pressionar o botão Extend Selection.

Precisamos do somatório da quantidade, posicionar em B10 (considerando esses dados) e pressionar o botão com o símbolo de SOMATÓRIO.


Agora vamos criar uma terceira coluna que representa o percentual de contribuição de cada elemento (sendo este acumulativo) - iremos considerar que esta foi criada na coluna C. Na célula C2 aplicamos a fórmula: =B2/$B$10. Porém para C3 aplicamos a fórmula: =(B2/$B$10)+c2. A diferença está pois desejamos que seja acumulativo, copiar o conteúdo dessa célula para todas abaixo. Selecionar todas essas células e clicar no botão com o símbolo %.


Está pronto mas como ver os dados assim não tem graça, criaremos um gráfico. A partir do Menu selecionar a opção: Insert | Chart, selecionar o tipo Column and Line. Pressionar Next. Nossa seleção de dados vai de A1 a C9. Pressionar Next. Nenhuma troca em Data Series. Pressionar Next. Colocar as descrições das colunas. Pressionar Finish.


Observamos que a linha do Percentual está estranha, dar um duplo-clique nessa para abrir a janela "Data Series". Na aba Options marcar Secondary Y axis e pressionar o botão OK. E agora temos o gráfico visualizado de forma correta.


Porém ainda observamos um pequeno erro que pode comprometer toda uma apresentação 120%. Dar um duplo-clique nessa coluna para abrir a janela "Secondary Y Series". Na aba Scale desmarcar a opção Automatic de Maximum e acertar para 100%.


E agora podemos mostrar claramente que os erros tipo C e A devem ser combatidos primeiro pela Organização.

Obrigado e até a próxima
Fernando Anselmo





domingo, 1 de março de 2020

Robótica - Sensores 4 de 37

No artigo anterior falamos sobre os módulos de Som, nesse vamos para o nosso quarto módulo denominado KY-033 Hunt sensor module/Tracking sensor/Infrared Tracking Sensor, lembra daquele sonho de construir um carrinho que pode seguir uma linha?


04. Módulo Sensor de Trilha

A primeira coisa que pensei quando vi esse módulo foi: "Existe alguma coisa errada", se parar para analisar o sensor consta de dois LEDs, um que emite uma luz infravermelha (o azul) e um que a recebe (o preto), só que o botão de ajuste está do mesmo lado para o qual os LEDs estão apontados, e é isso que parece estranho.

Além disso é um sensor extremamente sensível a mudança de luz, pessoalmente não o utilizaria em um projeto de um carro segue trilha (vai ter que adiar o sonho para mais tarde), existem soluções muito melhores com um FotoResistor.

A ligação é extremamente simples:
  • GND para o GND (Ground) do Arduino
  • OUT para uma porta Digital PWM (estão identificadas com um ~) usaremos a porta 10.
  • VCC para o 5V

Regular a emissão do LED Infravermelho é a parte mais importante do seu funcionamento, para isso utilize a câmera de um celular e coloque em modo filmar, apague as luzes do quarto e regule até ver a luz emitida, que será roxa.

Vamos criar um "Pulsômetro", em uma folha branca, desenhe uma grande linha preta (com 1 cm de largura) de uma ponta a outra do papel com um pincel atômico (ou algo do gênero), pode ter algumas curvas sem problemas (desde que seja mantida a largura). E vamos para a programação:

int sensorPin = 10;
int ledPin = 13;
int sensorValue = 0;

void setup() {
  pinMode(sensorPin, INPUT);
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  sensorValue = analogRead(sensorPin);
  Serial.println(sensorValue, DEC);
  if (sensorValue >= 280) {
    digitalWrite(ledPin, LOW);
  } else {  
    digitalWrite(ledPin, HIGH);
  }
  delay(200);
}

Carregue o programa e coloque os LEDs na linha (ou seja o sensor vai ficar de cabeça para baixo) e tente seguí-la, devagar. Se sair da linha ou se o sensor notar alguma mudança brusca de cor acenderá o LED padrão (Pino 13) da placa.

Obrigado e até a próxima
Fernando Anselmo

segunda-feira, 24 de fevereiro de 2020

Robótica - Sensores 3 de 37

No artigo anterior falamos sobre o módulo Relay, nesse vamos para o nosso terceiro módulo denominado KY-038 Microphone sound sensor module, prepare a garganta e vamos ver como usar este módulo.

 03. Módulo Sensor de Som por Microfone

Nesta categoria temos 2 módulos quase idênticos, pelo menos na programação, a diferença entre eles está na sensibilidade de detecção do som.

Estes sensores podem detectar som e emitem um sinal analógico ou digital que pode ser usado, por exemplo, para criar um interruptor de luz ao bater palmas. No lado analógico mede a intensidade sonora do ambiente e do lado digital varia o estado caso seja detectado um sinal sonoro.

As ligações com o Arduino são:
  • A0 - Para o pino analógico
  • G  - Negativo do Arduino (ou GND)
  • +  - Positivo do Arduino (ou 5V)
  • D0 - Para o pino digital
Porém o mais importante desse módulo é o parafuso amarelo no topo da caixinha azul, o limite de detecção deve ser ajustado através desse potenciômetro presente no sensor, para regular a saída. Um simples programa para analisar a saída analógica, como:

#define SOM_AN A5;
 
void setup () {
  pinMode(ruido_an, INPUT);
  Serial.begin (9600);
}
void loop () {
  Serial.println(analogRead(SOM_AN), DEC);
  delay (100);
}

É o suficiente para procedermos os ajustes que deve estar com o valor em torno dos 500. Agora podemos realizar um projeto mais interessante, observe a figura com as ligações:


Temos 4 LEDs ligados nas digitais 3 a 6, todos estão em linha com o polo negativo juntamente com um resistor de 220Ω. A ligação com o sensor está ligado na porta analógica A5 e digital 7, além do GND e 5V.

Para a programação temos:

#define SOM_AN A5
#define SOM_DG 7
#define VERM 6
#define AZUL 5
#define AMAR 4
#define VERD 3

int ruido_an = 0;
int ruido_dg = 0;
int liguei = false;

void setup() {
  pinMode(SOM_AN, INPUT);
  pinMode(SOM_DG, INPUT);
  pinMode(VERM, OUTPUT);
  pinMode(AZUL, OUTPUT);
  pinMode(AMAR, OUTPUT);
  pinMode(VERD, OUTPUT);
}
 
void loop() {
  digitalWrite(VERM, LOW);
  digitalWrite(AZUL, LOW);
  digitalWrite(AMAR, LOW);
  digitalWrite(VERD, LOW);
  
  ruido_an = analogRead(SOM_AN);
  ruido_dg = digitalRead(SOM_DG);
  if (ruido_dg == 0) {
    liguei = true;
    digitalWrite(VERM, HIGH);
  }
  if (ruido_an > 510) {
    liguei = true;
    digitalWrite(AZUL, HIGH);
  }
  if (ruido_an > 520) {
    liguei = true;
    digitalWrite(AMAR, HIGH);
  }
  if (ruido_an > 530) {
    liguei = true;
    digitalWrite(VERD, HIGH);
  }    
  if (liguei) {
    delay(100);
    liguei = false;
  }
  delay(10);
}

Primeiro definimos e habilitamos todas as portas usadas, no método setup() indicamos quem são as entradas e as saídas. No método loop(), apagamos todos os LEDs; obtemos os valores da porta analógica e digital; se houver variação na digital acendemos o LED Vermelho, se a porta analógica ultrapassar os 510 acendemos o azul, se ultrapassar 520 o amarelo e se ultrapassar 530 o verde; caso qualquer LED tenha sido ligado aumentamos o tempo de espera.

Pronto, acabamos de criar um sequenciador de som, agora basta falar um pouco mais alto para ver os LEDs acendendo e apagando.

Obrigado e até o próximo sensor
Fernando Anselmo

domingo, 16 de fevereiro de 2020

Robótica - Sensores 2 de 37

No artigo anterior falamos sobre o módulo Joystick, nesse vamos para o nosso segundo módulo denominado KY-019 5V relay, um nome bem complicado para este interessante e útil módulo.

ATENÇÃO - Usaremos uma corrente de 110/220 Voltz todo cuidado é pouco - De maneira alguma isso deve ser usado por crianças (com ou sem supervisão de adultos).

02. Módulo Relé

Segundo a eletrônica sabemos que um Relé (ou Relê) é um interruptor eletromecânico que é acionado quando uma corrente elétrica passa por suas bobinas, isso cria um campo magnético, o resultado e a atração (ou repulção) de uma alavanca.

Traduzindo isso para o bom português quer dizer que podemos ligar ou desligar determinado componente elétrico (lâmpadas, alarme anti-roubo, controlar a abertura/fechamento de uma torneira, brinquedos ou uma tranca elétrica de porta) através do Arduino. Comumente isso é muito usado em circuitos de controle de automação, ou seja, uma pequena corrente para controlar uma grande operação através de um "interruptor automático".

Observe que o módulo possui 2 partes: um circuito de entrada (do lado esquerdo da figura) que permite uma corrente de 30V a 250V e 10A e um circuito de saída (que é ligado ao Arduino) com 3 pinos.

O esquema de ligação é o seguinte:



São três conectores de ligação de entrada do Relé, porém somente os dois primeiros são utilizados, um dos fios da tomada segue para essa entrada e outro fio vai para o dispositivo (que nesse caso é uma lâmpada de bancada). Do outro lado a entrada para o Arduíno é bem simples (boa parte dos outros sensores seguirá o mesmo padrão):
  • - para o GND (ou terra)
  • + para a 5V
  • S para a digital (que iremos ligar no pino 10)
 Feita as ligações vamos para o programa:

#define RELAY 10

void setup() {   
  pinMode(RELAY,OUTPUT);
} 

void loop() {   
  digitalWrite(RELAY,HIGH);
  delay(5000);      
  digitalWrite(RELAY,LOW);
  delay(5000); 
} 

Se alguma vez já viu um programa para acender e apagar um LED verá que não existe a menor diferença. Estabelecemos uma constante RELAY com o valor 10 (isso é realizado somente para dar melhor clareza ao código), no método inicial (setup) definimos a pino 10 como saída. Durante o tempo de vida do programa (loop) ligamos o pino 10, esperamos 5 segundos, desligamos o pino 10 e esperamos mais 5 segundos.

Ou seja, se tudo estiver correto a lâmpada será ligada por 5 segundos e ficará apagada por 5 segundos, e essa ação será repetida. Esse é um componente muito utilizado (pessoalmente tenho mais alguns) principalmente em projetos que necessitam trabalhar com correntes bem mais altas que 5V (que é o padrão do Arduino).

Obrigado e até o próximo sensor
Fernando Anselmo

Dica: Se possui uma impressora 3D existe uma caixinha bem interessante para este módulo disponível gratuitamente na Thingverse.

sábado, 8 de fevereiro de 2020

Robótica - Sensores 1 de 37

Essa semana chegou pelo correio um pequeno pacote que tinha comprado mês passado da Ali Express, veio um Kit com 37 Sensores. O único problema básico quando se compra esse tipo de produto é que pode esquecer a documentação (é muito raro que exista alguma e se existir estará em Mandarim.

Então tive que correr atrás e localizar um jeito de fazer cada um dos meus novos bebês funcionar e pretendo compartilhar aqui como consegui com cada um deles (incluindo todo o código do Arduíno).

01. Módulo Joystick

O primeiro da lista é o KY-023 XY-axis joystick module, ou seja, um joystick  com 2 eixos e 1 botão. Este é um modelo analógico que pode ser usado para controlar qualquer coisa que se mova como um carrinho ou um robô articulado. O joystick é uma combinação de 2 potenciômetros analógicos e um interruptor digital.

Sua conexão com o Arduíno conta com 5 entradas:
  • GND - Esse é o fio negativo
  • +5V - Fonte de alimentação até 5 volts
  • URx - Pino analógico para o eixo X (ligamos no pino A0)
  • URy - Pino analógico para o eixo Y (ligamos no pino A1)
  • SW - Switch, quando se presiona o botão (ligamos no pino 2)

Feita as ligações a programação é bem simples:

const int URx = 0;
const int URy = 1;
const int pres = 2;
 
void setup() {
  pinMode(pres, INPUT);
  digitalWrite(pres, HIGH);
  Serial.begin(9600);
}
 
void loop() {
  Serial.print("Pressionado: ");
  Serial.print(digitalRead(pres));
  Serial.print("\n");
  Serial.print("Eixo X: ");
  Serial.print(analogRead(URx));
  Serial.print("\n");
  Serial.print("Eixo Y: ");
  Serial.println(analogRead(URy));
  Serial.print("\n\n");
  delay(500);
}

JoySticks analógicos basicamente são potenciômetros, portanto retornam os valores que podem ser visualizados na janela do Serial Monitor (Ctrl+M). Os valores de X e Y vão de 0 a 1.023 (sendo o meio 503) e o pino Switch trará 1 ou 0 (quando pressionado).

Ao clicar no monitor serial, veremos os valores. Ao mover o JoyStick ou pressiná-lo, verá os valores sendo alterados.

Obrigado e até o próximo sensor
Fernando Anselmo

terça-feira, 15 de outubro de 2019

Ciência de Dados - Python e não Python

Com o advento da Ciência de Dados o mundo agora está redescobrindo a linguagem Python, e isso pode ser bem caótico para ela (assim como foi a explosão de Java). Calma que explico, existem muitas pessoas que fazem aqueles cursos de 6 hrs ou leem livros tipo "Python Fluente" e já se acham os donos da linguagem e que conseguem fazer relativamente TUDO. Isso é bem verdade pois o Google, fóruns e livros tipo "Cookbook" ajudam muito.


Com Java acontece muito disso (o mesmo ocorre com JavaScript), basta ver os modelos propostos e os que sumiram com uma velocidade assustadora, um pseudo Arquiteto leu uma trabalho de Pós Graduação, achou interessante e resolveu implantar isso sem fazer um estudo de caso, uma análise de impacto ou nada do gênero e pronto está criado aquele sistema com Wicket + Vue.js + MongoDB.

Em Ciência de Dados e Python penso que a coisa irá acontecer a nível de Modelos Implementados, veremos modelos que irão demorar horas (ou dias) para serem executados e ninguém se incomodará pois o "Cientista" falou que isso se deve por causa da quantidade de dados analisados que são enormes (pelo menos dessa vez ninguém culpará a linguagem, mas sim os dados ou as máquinas).

Falar Pythonico ou Não

Se Python é uma linguagem então devemos falar Pythonico, normalmente para aprendermos algo usamos a "Comparação", fazia assim, agora faço assim. A língua inglesa é difícil de aprender (para os brasileiros) pois sua estrutura gramatical muda. Em linguagens de programação isso também acontece (não, não existe uma Gramática de Python), calma não estou falando de tempos verbais, mas sim de formas no modo de programar.

Vamos falar do método zip() por exemplo, esse é quase exclusivo de Python, Java não isso (e se tem serve para aquilo que provavelmente você deve ter imaginado). Este método serve para iterar duas ou mais listas ao mesmo tempo, como por exemplo:
first = [1, 3, 5, 7, 9]
second = [2, 4, 6, 8, 10]
for x, y in zip(first, se0cond):
  print(x + y)
Ou seja, em a cada iteração um valor de cada uma das listas é puxado, outro método pouco conhecido é o map(), que serve para iterar métodos e listas, vamos imaginar que exista um método criado para calcular a Raiz Quadrada de um número (ou outro mais complexo que deseje):
def raiz(x): 
    return x**0.5
Simples assim, e se vem de outras linguagens provavelmente escreverá algo assim para iterar esse método com elementos de uma lista e colocá-los em outra lista:
raizes = []
nums = [4,9,27,32,78,98,45,22]
for num in nums:
    raizes.append(raiz(num))
Quando na verdade isso deveria ser escrito da seguinte forma:
nums = [4,9,27,32,78,98,45,22]
raizes = map(raiz, nums)

Não estou aqui para condenar ninguém ou qualquer curso ou livro, estou apenas chamando a atenção para um fato que vai ocorrer (sim, rodei um Modelo Preditivo para descobrí-lo) muito em breve, se já não está ocorrendo. Ou seja, não é necessário diminuir sua amostra, não é necessário aumentar seu cluster de máquinas apenas melhorar um pouco seu código. Não Fernando, você está falando besteira e sou EXCELENTE. Muito bem, vamos a um pequeno desafio, veja esse código:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def pares(x):
    return x % 2 == 0

numsPares = []
for num in nums:
    if even(num):
        numsPares.append(num)
Como conhece bem a linguagem sabe que esse código está pegando somente os pares da lista de nums e jogando-os na lista numsPares. Suas opções são:
  1. O código está bom do jeito que está.
  2. Deve ser reescrito para ...
  3. Esse corpo não me pertence.
Como disse não quero condenar ninguém, só quero apenas alertar para um fato e isso pode causar a decadência da linguagem em relação a outras que se mostram mais performáticas (mesmo usadas errôneamente).

Obrigado pela atenção
Fernando Anselmo

Spoiler.

O código em questão deveria ser reescrito usando o método filter(), da seguinte forma:
numPares = filter(pares, nums)

domingo, 6 de outubro de 2019

Ciência de Dados - Matematicamente Falando

Quando comecei a estudar as matérias de "Ciência de Dados" percebi algo bem simples e ao mesmo tempo bem complexo. A cadeira envolve 3 áreas de conhecimento:


Ciência da Computação, Conhecimento de Negócios e Matemática (e Estatística). Possuia as duas primeiras porém me faltava a terceira. E minha pergunta era: Como obter o conhecimento matemático necessário que me falta?

Existem milhares de respostas válidas bem como:
  1. Estudar por conta própria.
  2. Achar um bom curso (tipo Udemy).
  3. Fazer uma Pós em Estatística. 
Optei pela terceira, já tinha feito vários cursos mas nenhum deles me trouxe um conhecimento muito profundo e apenas arranhavam a superfície do que planejava. Antes de continuar devo dizer que a segunda área do conhecimento cristalizei ela através de uma Pós em "Gestão Empresarial Avançada" que é totalmente voltada a problemas de negócio. Então nada mais lógico que procurar uma Pós que fosse totalmente prática e aplicada a problemas do dia a dia através de resoluções matemáticas.

Não pretendo fazer propagando de cursos, não é esse meu objetivo. Meu objetivo é que compreenda que para adquirir determinado conhecimento não basta apenas estudar por conta própria (pois o mercado infelizmente não reconhece esse tipo de ação e exige diplomas de formação acadêmica) ou realizar simples cursos de arranham a superfície (quando o que o mercado exige é que o profissional consiga se virar nas 11, ser o técnico e de preferência o Juiz).

Minha recomendação para essa terceira área do conhecimento é, comece com bons livros e ferramentas, três são essenciais para quem gosta do mundo livre:

PSPP

É uma alternativa ao IBM SPSS, pessoalmente diria uma cópia tipo Ctrl+C e Ctrl+V, tanto que houve a brincadeira das letras, para se ter uma ideia do que estou falando não existem muitos livros de PSPP então utilizo os livros de SPSS para estudar, a sintaxe é exatamente a mesma. Na essência é um software para Análise de Dados que permite análises descritivas e o uso de inferência.

Scilab

Esse é uma alternativa para o famoso Matlab e basicamente trata-se de um ambiente computacional para aplicações científicas totalmente orientado a análise numérica.

Octave

Esse é outra alternativa para o Matlab. Dos três é o mais conhecido e usado por quem conhece matemática, basicamente é quase uma linguagem tanto que é possível usar o Jupyter Notebook para executar seus comandos que podem envolver soluções lineares e não-lineares.

Dica: Se usa o Ubuntu o primeiro e o terceiro vem instalado por padrão (se não estiver procure na Loja com o nome GNU PSPP e GNU Octave - Isso mesmo ambos fazem parte do Projeto GNU) e quanto ao segundo utilize uma AppImage (que facilita muito o processo) através de dois comando no terminal:

$ wget https://github.com/davidcl/Scilab.AppDir/releases/download/6.0.2-1/Scilab-x86_64.AppImage
$ chmod +x Scilab-x86_64.AppImage

Ou baixe a imagem no endereço indicado e forneça permissão de execução no Nautilus.

Esses são apenas 3 dos vários softwares que passei a utilizar quando ingressei nesse mundo de ciência de dados, são gratuitos, leves e qualquer um pode ter no computador. E mais uma dica comece adquirindo um bom livro de Matemática:


E lembre-se que conhecimento nunca é demais.

Obrigado e até a próxima
Fernando Anselmo


sábado, 31 de agosto de 2019

Ciência de Dados - Fatos e Verdades da Tecnologia

Nesses anos todos que estou na área de Informática ouço muitas opiniões pessoais, que não passam disso: "opiniões pessoais". Por exemplo: "A linguagem  Java não é usada para Data Science", só que a verdade é que pode-se dizer que a linguagem não é usada pelos profissionais de Data Science, mas é fortemente usada na construção das ferramentas de Data Science, tais como, Weka, Hadoop e Pentaho.

Outra opinião: "Python está subindo muito, logo, será a linguagem mais usada no mundo", verdade o Python já atingiu a 3ª Posição no Ranking do TIOBE porém a anos fica bringando para se manter nessa posição (que foi a mais alta que conseguiu atingir) nunca chegando nem perto das linguagens Java e C que lideram o ranking. Não se iluda, Python é uma linguagem de Script, não é compilada e sim interpretada e não possui capacidade nem corpo para ser performática, porém é muito fácil de aprender, por esse motivo é usada por Cientistas de Dados, que só precisam de uma linguagem para simular seus modelos.


Outra opinião: "Bancos não relacionais estão tomando a preferência do mercado", sim os bancos não relacionais estão se tornando bem populares porém não chegam nem perto dos grandes líderes como Oracle, MySQL, MS-SQL e Postgres. O mais bem colocado no ranking do DB-Engines é o MongoDB na 5ª Posicão.

Mais uma opinião: "O Cassandra, em breve, deve dominar o mercado", bem como disse anteriormente a preferência continua com os bancos relacionais e acredito que por muitos anos veremos algo híbrido surgir, o Apache Cassandra é um excelente banco, livre e já possui uma excelente maturidade, mas para que isso aconteça terá de vencer bancos como MongoDB, Postgres ou Oracle e mostrar para que veio.

Continuando com outra opinião: "Ferramentas de Análise de Dados deveriam ser feitas somente no Excel", se estamos falando realmente de "Análise de Dados" isso envolve o processamento de muitas informações e não uma simples amostra. Além disso, não se engane, o Excel (ou o Calc - do LibreOffice) são excelentes ferramentas mas de longe conseguem se manter com grandes cargas de dados, inclusive uma boa alternativa a ambos é o Open Refine que possui filtros para limpeza dos dados.

Por favor, não interprete que estou recriminando essas pessoas ou suas opiniões, como disse no começo são "opiniões pessoais" e acredito que cada um tem direito a sua. Porém, devemos sempre saber discernir o que é verdadeiro ou não atrás dessas opiniões.

Obrigado e até a próxima
Fernando Anselmo

quarta-feira, 7 de agosto de 2019

Ciência de Dados - Pacote Inicial

Vamos começar uma nova trilha aqui no blog com o foco totalmente voltado para Ciência de Dados, bom se viveu em Marte nos últimos 4 anos provavelmente não deve ter ouvido nada sobre o que é Ciência de Dados, Big Data, Aprendizado de Máquina, Deep Learning, Internet das Coisas, Estatística Aplicada e Análise Aplicada. Caso contrário notou que esses temas abarrotam a média escrita, falada e solidificada (como diria Odorico Paraguassú).

Por Onde Começo?

Essa é a principal pergunta que todos me fazem, Neste caso mostrarei o ferramental básico para se usar o Aprendizado de Máquina (Machine Learning) com Python. Consideremos o Python 3.6 que é o mais utilizado então já vai de pré-requisito, porém existem outras bibliotecas para se intalar. Considere que o software principal é o Anaconda, que além de empacotar tudo de uma maneira muito funcional, ainda tem um painel de controle para instalações de outras bibliotecas: https://www.anaconda.com/download/.

Se desejar uma IDE (além do Jupyter que já vem com o Anaconda), atualmente usa-se muito o Visual Studio Code, recomendo: https://code.visualstudio.com/. Não sabe Python? Siga o tutorial básico desse site: https://www.tutorialspoint.com/python/index.htm.

Algumas bibliotecas podem ser adicionadas de acordo com a necessidade. Lembrando que é sempre preferível verificar se a biblioteca já não está disponível no Anaconda, para evitar maiores dores de cabeça. As básicas e já instaladas são:
Essas são as básicas e não é apenas necessário conhecê-las deve-se comê-las com farinha (ou açaí), temos mais três softwares para formar um bom conjunto:

Para quem pretende lidar com Redes Neurais e Deep Learning, existem quatro grandes frameworks: TensorFlow, Keras, PyTorch e Theano. Mas antes é bom ler um material introdutório sobre Redes Neurais. Na disciplina de Psicologia Conexionista e Psicobiologia do professor Antônio Carlos Roque: http://sisne.org/Disciplinas/PosGrad/PsicoConex/. Deseja entender como essas redes funcionam através uma explicação visual? Enão visite o "parquinho" do TensorFlow em: http://playground.tensorflow.org.

Depois de ler agora é hora de instalar o TensorFlow. A instalação é um pouco enjoada, então todo cuidado é pouco. Siga os seguintes passos:
  • Instalar o CUDA Toolkit, e cheque se as variáveis do sistema estão corretas (cheque mesmo, existe chances de não terem sido colocadas corretamente pela instalação)
  • Instalar os drivers do CUDA Toolkit
  • Instalar o cuDNN
  • Instalar o TensorFlow, versão CPU ou GPU (de preferência tenha só uma instalação)

É sempre recomendável seguir o passo-a-passo do próprio TensorFlow. Até o link do Stack Overflow dos erros mais comuns tem lá: https://www.tensorflow.org/install/. Ou use o Docker que é bem mais tranquilo. Veja mais em https://www.tensorflow.org/install/docker.

Instalou? Testou? Rodou? Agora não sabe pode onde começar? O próprio TensorFlow tem bons tutoriais para começar a lidar com ele. Recomendo dois tutoriais:

Quer mais tutoriais? Tem também: https://www.tensorflow.org/tutorials/. Nos tutoriais isso fica claro: aprenda a usar o TensorBoard, gerenciador e visualizador das redes neurais do TensorFlow. Até salvar o estado atual da rede para recarregar depois é possível: https://www.tensorflow.org/learn ou quer sentir alguns exemplos na prática? Visite o GitHub do Imanol Schlag em
http://ischlag.github.io e clone alguns projetos. Outras opções?


Achou uma base que deseja trabalhar? Quer sabe como o pessoal anda resolvendo um determinado problema? Então prepare-se para ler artigos, prepare-se para ler MUITOS ARTIGOS e que provavelmente estarão postados aqui: https://arxiv.org/.

Não gosta de ler é prefere vídeos? Vamos a eles, ficou com alguma dúvida em relação a como alguma rede funciona? Provável que o Siraj Raval já tenha explicado: https://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A. Quer alguma inspiração de que problema atacar? Deseja saber o que está sendo feito academicamente e comercialmente na atualidade da área? O canal do Deep Learning Brasil, produziu uma playlist com aulas do curso de Deep Learning, com listas de exercícios e até arquiteturas avançadas já implementadas: https://www.youtube.com/channel/UCWg0CObS-JnEtjW69eGh89A. Por fim, na UFG temos a matéria Redes Neurais Profundas, incluídas semestralmente na pós-graduação do Instituto de Informática, onde você pode acompanhar tanto presencialmente quanto remotamente, pois todas as aulas são gravadas. Acompanhe o cronograma da próxima turma pelo site: http://www.inf.ufg.br/mestrado/

Deseja mais alguns sites confiáveis para explicações sobre qualquer problema, O'Reilly Media (https://www.oreilly.com/) e o Medium (https://medium.com/). Não gostou dessa lista e quer um curso próprio para a área? Tem lista disso também:

Esse é apenas uma recomendação básica para ferramentas iniciais na área (existem muitas dessas listas por aí). Usando isso você poderá dar o pontapé inicial e começar a experimentar o que Ciência de Dados pode trazer de novidade.

Obrigado e até a próxima
Fernando Anselmo

quinta-feira, 9 de agosto de 2018

Empregabilidade - Big Data e eu com isso

Até 2003 conseguimos em toda a história da humanidade produzir 5 Exabytes de informação, exatamente apenas 5 (ou alguns podem pensar tudo isso?). Pois saiba que atualmente produzimos isso a cada 2 horas. Antigamente lotar um disco de 1 Terabyte de dado era uma coisa imaginável, hoje compramos um HD com essa quantidade e achamos pouco. O processamento usado na Apolo 11 poderia rodar facilmente em 2 Nitendos.


Isso quer dizer que estamos crescendo exponencialmente nossa capacidade e em breve como daremos conta de tudo isso? A resposta é simples "Novas Tecnologias de Base". Para quem não é da área quando um site Web demora mais de 5 segundos para ser carregado o site é rotulado como lento. 5 segundos (basta contar de 1 a 5 devagar). O maior culpado dessa "demora" está em sua base HTML, JavaScript e CSS.

Com o tempo vimos que surgiram HTML 5 e CSS 3. O JavaScript começa a sofrer mudanças agora com a chegada (em 2017) com o WebAssembly. Linguagens como Java, C++, Python e Assembly ganham cada vez mais espaço pois se mostraram eficientes no tratamento de dados, outras como C# e PHP vem continuamente caindo nas pesquisas. Sinto muito aos fãs mas não sou eu que estou falando isso, basta uma consulta em listas em institutos como Tiobe para verificar a veracidade dessas informações.

Estamos, graças a quantidade de dados que produzimos chegando em um novo patamar porém serão necessários profissionais que lidem com isso. Novos bancos que manipulam Exabytes de informação precisam ser gerenciados e manipulados para que se extraia conteúdo útil disso e pessoas precisam estar dispostas a entender todo esse novo conceito (e não se agarrar aos antigos).

O maior problema como sempre são as pessoas que não desejam a mudança (mesmo ela estando na porta) e acham que o velho SQL conseguirá manipular toda a carga de informação existente. Não vai. Novas máquinas tem surgido a cada dia, mais rápidas, mais eficazes. Novos softwares tem surgido para acompanhá-las basta ver a evolução de sistemas como o Android 9 (que emprega Inteligência Artificial para melhor gerenciar a bateria) ou das distribuições Linux (que abandonaram totalmente o conceito de tela preta e se tornaram páreo para o Windows e o MacOs).

Facebook já possui o reconhecimento automático de fotos e pode prever com 70% de acerto quem é a pessoa, o Google e a IBM investem pesado em AI. Faça uma pesquisa no Mercado Livre sobre algum produto que este aparecerá como destaque em muitos outros sites.

As minhas questões para uma reflexão são: O que estou aprendendo agora que pode me ajudar a entender esse panorama? Fico me amarrando a velhos conhecimentos aprendidos ou pretendo aprender novos? Consigo jogar na lixeira todos os anos de conhecimento para criar novos? Ou vou ficar dizendo para mim mesmo: Isso não vai afetar nada, vai apenas agregar.

A empregabilidade tem a ver com essas coisas, tem a ver o quão rápido você consegue se adaptar a novas tecnologias e não tentar bater de frente a elas simplesmente porque a linguagem que você amava está morrendo. Quer saber o que penso se Java morrer? Foi bom enquanto durou, o que tenho que estudar agora? Xiblots? O Rei está morto, vida longa ao Rei.

Bem vindo a nova Era da Informação.

Obrigado e até a próxima
Fernando Anselmo

sábado, 23 de junho de 2018

Empregabilidade - Do you speak english?

Como está seu nível de Inglês? Para algumas empresas isso pouco importa entretanto em um mercado globalizado como está se tornando o nosso isso será essencial. Nas grandes empresas (ou Multinacionais) existem os chamados "empregados chaves", são aqueles que dominam outros idiomas e conseguem conversar fluentemente com os clientes mais importantes. Em caso de uma promoção adivinhe qual funcionário será escolhido?


Falando francamente permita-me lhe expor, por experiência própria, o que aprendi sobre o estudo de um novo idioma: Primeiro, considere-se uma criança de 2 anos de idade que está começando a aprender a falar, então use livros de inglês nessa faixa etária, sim aqueles bobinhos mesmo. Segundo, uma criança vive em um mundo rodeada da língua que está aprendendo, ou seja, rádio, TV, amigos, leitura está tudo naquele idioma então o máximo que puder se acercar a isso melhor. Terceiro (e o mais importante), uma criança não tem vergonha de falar errado, falou "ome" ao invés de "róm" (Home) para ela pouco importa desde que se faça entender.

Agora vamos para a segunda fase, seu vocabulário está "very good" porém não consegue escrever um texto. Uma dica para isso é: Simplifique. Traduza rapidamente a frase para o inglês: Está tudo caminhando conforme o planejado. Muitas pessoas já se perdem na primeira palavra "Está", seguindo para a tradução literal de "caminhando" para "walking" (devia aproveitar e colocar um "dead"). O Português tem sua origem no "Latim" que era uma língua dos "Nobres" apenas pessoas muito refinadas usaram a língua dos Romanos. O Inglês tem sua origem nas Línguas Nórdicas, usadas pelos "Bárbaros" e comerciantes, esses caras possuiam zero de cultura e falavam apenas o necessário para se fazerem entender, então: "As planned, everything is OK".

Então seu nível agora é "Read and Write" porém ainda falta o "Listen" e como resolver esse problema? O telefone tocou e do outro lado é um "gringo" que fala a terrível palavra: "Hello?", você relaxa e respira fundo e timidamente solta: "Hello!", sabendo que em seguida vai ter que soltar um bolo de frases do tipo: "I'm sorry mas no ti compreendo, not iudestend, veja bem, see well,..., Goodbye". Voltando a criança, como disse ela está imersa no mundo da língua que está aprendendo, calma não vou dar o conselho que você deva ir para os EUA ou Inglaterra, o que vou lhe dizer é, pare de ouvir música.

Quantas horas tem seu dia de atividades? E nessas quantas horas de música ouve (para lhe ajudar a distrair dos ruídos)? Multiplique isso por 365 dias, e é esse total de horas que está desperdiçando por ano. Mas estou aprendendo inglês, não está, está se enganando como se engana tentando fazer dieta (já que você não vai viver assim). Vamos lá, a menos que pegue a letra da música e se sente com um dicionário e traduza-a, pegue as frases e as defina seu tempo verbal, veja os verbos e as palavras usadas talvez estará aprendendo algo, tipo: o que nunca falar para sua paquera se está ouvindo algo do tipo "Every breath you take... I'll be watching you" - sim, você e o Governo Americano (sai fora chiclete).

E se não fizer nada disso e só escutar a música? Primeiro seu cérebro guardará a melodia da música, segundo ele guardará a batida e terceiro analisará a quantidade de "dopamina" (prazer) que isso lhe proporciona (criando uma escala se vale a pena o gasto ou não). E quanto a letra? Prá quê ele vai perder esforço nisso? Já ouviu uma música Árabe ou Japonesa? Seu nível desses idiomas deve ser bom, não? Fala pelo menos uma palavra? Você pode passar (inclusive já passou) anos fazendo isso e não entender absolutamente nada.


O que quero lhe propor é algo diferente. A "Penguin Books" possui uma série de livros, que são divididos por níveis: Easystarts - 200 palavras-chaves, Beginner - 300, Elementary - 600, Pre-Intermediate - 1200, Intermediate - 1700, Upper - 2300 e Advanced - 3000. Além disso os livros acompanham um CD contendo a leitura deste. Essa leitura do livro é chamada de "Audiobook" (ja falei sobre isso aqui). E esse considero o melhor método para romper a última fase do "Listen", abaixo você encontra uma amostra de um AudioBook contendo o clássico Rapunzel.



Por fim, te aconselho que descarte a legenda (pelo menos em português, se quiser usar em inglês sem problemas) de filmes e seriados, assine a CNN ou a BBC e passe a ver as notícias em Inglês (na Internet existe a "Rádio Livre"). Use o máximo de horas para melhorar seu vocabulário, aprimorar seu ouvido e falar, mesmo que seja apenas lendo um livro em voz alta para você mesmo (mas garanto que seu(ua) filho(a) vai adorar lhe ouvir).

Thank's and until next time
Fernando Anselmo

domingo, 10 de junho de 2018

Empregabilidade - Perguntas na era do Blockchain

Adoro as coisas da tecnologia principalmente no que diz quisito a moda, coloquei a palavra "Blockchain" no título porém este texto trata da "nova geração de perguntas realizadas por entrevistadores". Ou seja, "Blockchain" está adquirindo o significado de mudança (perdendo, ainda bem, aquele sentido de algo relativo a bitcoin) - Prometo uma nova postagem para falar sobre blockchain.

Vamos ao que interessa, você se prepara completamente para fazer uma entrevista, certo? Pesquisa a empresa que deseja trabalhar, manda o currículo personalizado e adequado para a empresa (não algo genérico - pois ninguém gosta de genéricos), certo? No dia da entrevista prepara-se para não chegar de modo algum atrasado, certo? E chega lá dança nas 5 primeiras perguntas que são as seguintes:
  • Nos conte o que você aprendeu e como fez para aprender qualquer nova tecnologia este ano?
  • Participa de algum grupo de tecnologia?
  • Além da área de tecnologia, quais são "as outras" áreas que você detém alguma espécie de conhecimento?
  • Participa de algum projeto de contribuição a sistemas comunitários? Quais?
  • Possui algum projeto de sistema publicado em algum repositório publico? Possui contribuições?
Aquelas perguntinhas básicas sobre: conhece linguagem X ou sistema Y já deveriam ter a resposta no currículo. Nenhum empresa atual faz uma entrevista para saber o que já está escrito no currículo (para isso que ele está personalizado e não genérico), elas querem é saber o que você faz da sua vida. Não, ninguém quer lhe espionar. Deixe-me colocar assim, ao adquirir um bem desejamos saber qual a vantagem que aquele bem nos proporcionará. Quantas vezes já ouviu a frase: "O maior bem de uma empresa são os seus funcionários".

Então o RH agora quer saber o quão valioso você será para a empresa, uma pessoa que não se interessa em mais nada a não ser criar o ABC diário da empresa vale muito menos que um profissional que vai muito além das espectativas. Alguém com iniciativa própria, que estuda porque sabe que lá na frente terá a recompensa, que faz muito além do que lhe foi pedido e que propõe soluções que aumentarão a eficiência e o lucro da empresa.

Você não é contratado para realizar o "espetacular", você é contratado para fazer bem um determinado trabalho. Quem faz um trabalho "espetacular" é valorizado. É isso que muitos trabalhadores não entendem. Existe dentro da empresa uma grande diferença entre estar contratado e ser valorizado. As pessoas me criticam quando falo isso, mas uma Empresa não é uma República, alí é uma Ditadura. Você não faz seu horário (isso pode até ser discutido), você está ali porque recebe benefícios para estar (não faz isso porque ama o local), existem regras rígidas (por mais que se digam que são flexíveis) e sempre existe alguém que dá as ordens (que não serão contradizidas).

Então para de "choradeira" (principalmente) em grupos de discussão dizendo que não existem vagas para profissionais, existem sim, o que não existem são profissionais. Para de dizer que não recebe aumento a X tempo se você faz exatamente o que foi contratado para fazer com o salário estipulado para isso.

Agora vamos a um segundo fator: "Criatividade" ou "Pensar fora da Caixinha", se conseguir passar pela primeira fase da entrevista (com as perguntinhas) vai ter que encarar a segunda fase que é algo realizado com o que você tem de criativo. Veja bem, a criatividade está em todos nós, assim como a lógica, para novamente  de dizer que você não tem lógica (você não conseguiria realizar nenhuma tarefa básica sem ela) ou que você não é criativo (já criou algo? Um brinquedo, uma maneira nova de sair de um problema, fez algo que ninguém pensou?). Você pode é dizer que tem um nível baixo de criatividade ou lógica.

Por que estou falando sobre "criatividade" e "lógica", porque são elementos contrários, a "lógica" tem a ver com a "racionalidade das ações". Observe a frase: Coloquei fogo na minha mão pois ela estava gelada e queria aquecê-la rapidamente, não pensei que doesse tanto. Essa frase foi dita com extrema lógica, a pessoa (ou criança) que fez isso não fez sem motivo, tinha um motivo e o raciocínio correto (o fogo esquenta). Se deu errado ou a solução foi idiota (programadores é que o digam de alguns sistemas) é outro problema.

Criatividade, o início da palavra já dá a dica "Criação", ato de conceber algo jamais imaginado ou, como prefiro, "pensar fora da caixinha". Calma, nessa segunda parte as empresas também usam testes criativos. Observe a imagem abaixo:


Uma resposta possível coloquei de cabeça para baixo. Como assim "uma resposta possível"? O ato de ser criativo envolve várias respostas para uma mesma pergunta, não existe a resposta pronta existe é seu nível de imaginação. É como um bom filme que podem existir milhares de finais possíveis.

Mas pode ficar aliviado pois várias empresas usam esse segundo teste apenas para descobrir um potencial candidato acima da média pois o primeiro já é o suficiente para a contratação.

Obrigado e até a próxima
Fernando Anselmo






sábado, 2 de junho de 2018

Mercado - Comprei um computador Ultra Moderno e agora?

A primeira coisa que tive que aguentar com o novo Inspiron 22 3000 foi a assistente Cortana do Windows que não me deixava entrar no sistema enquanto não configura-se tudo e tudo o que eu queria era baixar a ISO do Ubuntu 18.04 e um programa para gerar um PenDriver bootável.


Muita gente me perguntou, mas o computador tem som embutido, HDMI, além do mais é touchscreen e será que isso tudo vai funcionar com o Ubuntu? Sim vai, primeiro não teria porque não funcionar e segundo que mesmo que não funcionasse não queria mais saber de Windows.

Depois de muitas telas de configuração da Cortana finalmente já estava acessando a Internet através da Wifi, exigência mais do que idiota que achei foi ser obrigado a criar uma conta na Microsoft senão não conseguiria prosseguir. Baixei a imagem e gerei o PenDriver sem problemas (o Edge até que tava bem colaborativo, eu acho que ele pensou: "Enquanto ele não acessar o site do Chrome ou do Firefox para me trocar está tudo de boa", mal sabia ele das minhas intenções). Mais um boot no computador e agora apertando F12 para escolher a entrada pelo PenDrive e partia para a instalação do novo sistema, que levou exatos 15 minutos.

Gravei um vídeo para mostrar as novas funcionalidades em tempo real e para você possa sentir que não perdi absolutamente nada de todos os recursos que a máquina tinha a me oferecer:

 

Um detalhe que achei bem estranho foi o tamanho que o Windows ocupava originalmente no HD de 1 TB, exatos 230 GB não sei se era por causa da Cortana ou de outra coisa só sei que absolutamente sem nenhum software instalado e só de Sistema Operacional "perdia" todo esse espaço. Agora já tenho por padrão instalado com o sistema LibreOffice, Editor de PDF, Loja de aplicativos, Python 2 e 3, player de MP3 e Vídeo e mais os seguintes softwares:
  • Java
  • R Studio
  • Kile - LaTex
  • Gimp
  • Octave
  • Calibre
  • Atom
  • OpenShot Video e SimpleScreenRecorder
  • Code::Blocks
  • PyCharm
  • Idea e Eclipse
E não chego a 120 Gb.

Não estou querendo dizer que o Windows é ruim estou dizendo que como desenvolvedor sei que o espaço no computador é algo essencial, sei que um sistema operacional é o coração de tudo o que estou fazendo e sei que sinceramente prefiro o Ubuntu, mesmo que perca qualquer nova funcionalidade no meu Computador Ultra Moderno. Coisa que não aconteceu.

Obrigado e até a próxima
Fernando Anselmo

domingo, 13 de maio de 2018

Sistema Operacional - Vírus no Linux isso existe?

Desde que comecei a usar o Linux dois tipos de softwares nunca mais tive notícias, primeiro aqueles softwares de organizar arquivos, não que o Linux não tenha (inclusive existe uma versão muito parecida com CClean para Linux) mas é que raramente nos preocupamos com isso o Kernel gerencia muito bem essa parte. E o segundo tipo são os anti-vírus. Peraí então o Linux não tem vírus? Vamos acertar a pergunta pois nenhum sistema tem vírus. OK, então não existe vírus criado para Linux? Sim, eles existem.

A diferença aqui é que você tem que ser muito ingênuo para pegá-los ou eles são muito mais expertos. Deixe-me contar um caso que ocorreu essa semana. Existe um jogo chamado 1024, foi criado um clone dele chamado 2048 só que o autor (espertamente) usava a máquina que estava instalado o jogo para realizar a mineração de moedas digitais (veja a matéria completa aqui).


Uma vez que foi descoberto, já que a diferença que para publicar um pacote na loja Snap obrigatoriamente é necessário mostrar o código-fonte, o autor da façanha, Nicolas Tomb, foi banido da loja juntamente com todos seus aplicativos.

Nesse caso me pergunto o seguinte: Em qual sistema operacional, esse tipo de vírus não conseguiria penetrar? Entendeu, essa é a diferença. São milhares de programadores analisando e investigando o sistema. Deixou passar batido um código pois nem te interessa ou mesmo não tem conhecimento? Sem problemas, seu vizinho que é um investigador por natureza, não roda nada sem antes dar uma olhada no código e caso encontre algo estranho reporta (e é atendido) e ações são rapidamente tomadas.

Não é que o Linux não deixe passar vírus, ou que não existem vírus criados para ele, é que para executá-los é necessária a permissão do "Super Usuário (SUDO)" e o consentimento do usuário humano. Só que uma vez que o problema é descoberto, rapidamente a solução é encontrada e disponibilizada assim o dano atingido torna-se mínimo e não compensa o esforço ou a criação de um vírus. Entendeu agora porque 100% dos Top 500 Supercomputadores mais rápidos do mundo rodam Linux?

Obrigado e até a próxima
Fernando Anselmo

domingo, 29 de abril de 2018

Empregabilidade - Pensar fora da caixinha

Sempre detestei rótulos, você é da "Geração X", aqueles alí são de "Capricórnio", sou "Ateu - Graças a Deus". Desde que a sociedade se modernizou precisamos nos rotular para sermos encaixados em algum meio, tipo: Você é Branco, Pardo ou Negro? Você é Rico, Classe Média ou Pobre? Quando crescemos os rótulos também vão se tornando mais especializados.

Primeiro ato que ocorre na nossa vida de brasileiro é escolher um time do coração - o segundo ato é ser avesso a qualquer um que não torça para o mesmo time - e pouco importa se o time ganha ou perde sempre devemos estar a favor (e desejar a morte por ácido do outro time que por azar do destino jogar CONTRA o nosso) e achar que se ganhou é porque jogamos bem demais e se perdeu foi por culpa de fatores externos do tipo: o Juiz roubou, o Bandeirinha é cego, foi impedimento naquele gol de falta, jogaram uma "urucubaca" no nosso goleiro que amanheceu indisposto e por aí vai.

A medida que o tempo vai passando mais rótulos vão se formando, seu "Partido Político", sua "Igreja" (não, não é sua Religião), seu "Contexto Social" ou seu "Círculo de Amigos", novamente tudo o que estiver fora disso não nos serve. Afinal de contas batalhamos muito por causa do "Partido X" (perdemos horas defendo-o nas redes sociais), sem aquela "Igreja da Novena dos 7º Dias que teremos a Revelação Sagrada das Velas Coloridas do Nosso Senhor" faz parte da minha existência (raramente apareço para o culto ou mudou algo na minha vida religiosa - mas isso não é importante) terrena e sem ela não sobreviveria ao cataclisma que vai acontecer em 2182 (pouco importa se estarei vivo ou não até lá), o "Contexto do Clube dos Programadores Analistas de Computadores" afinal de contas uma vez que foi promovido tudo abaixo não existe e meu círculo de amizades só pode ser formados por pessoas que possuam os mesmos rótulos que tenho qualquer outra pessoa está completamente errada.

OK já entendemos, mas o que é "Pensar fora da caixinha"? Permita-me propor-lhe o seguinte desafio (AVISO DE SPOILER: não prossiga a leitura):


O que mais adoro nesse desafio é que rótulos não contam, não serve ser um grande matemático, ou péssimo em português, não resolve ser evangélico, espiritualista ou umbandista. Pouco importa se torce para o Flamengo ou o XV de Jaú, se é a favor ou contra o Lula, para resolvê-lo a única coisa que deve fazer é pensar fora da caixinha.

A resposta é muito simples, o espaço é completado com a letra "R", esse desenho é apenas o conjunto de marchas de um carro e a marcha que falta é a "Ré". Não me importa ser rotulado, sei que sou, mas tenho o total direito de não gostar deles (dos rótulos) afinal um rótulo não permite que vejamos o quanto aquela outra "igreja", "time", "partido" ou qualquer outra coisa pode estar mais certo ou errado na que escolhemos para seguir.

Obrigado e até a próxima
Fernando Anselmo

quinta-feira, 30 de novembro de 2017

Tecnologia - O que esperar em 2018

Final do Ano está na porta e é hora de começar as previsões tecnológicas para 2018. Antes de começar devo dizer que sou um simples desenvolvedor que lê e acompanha blogs de tecnologia. Tudo o que escrever nesta postagem está relacionado a uma simples percepção (é como olhar para um céu cheio de nuvens negras e dizer que vai chover) que obviamente pode estar errada e não acontecer.


Essas são minhas apostas para as 5 tecnologias que mais vão aparecer em 2018, traduzindo escolha uma delas, estude e se aprofunde para não ficar fora do mercado:

1ª Crescimento acelerado da Machine Learning. Neste ano esta tecnologia deu seus primeiros passinhos tímidos, mas em 2018 parece que a coisa vai finalmente deslanchar, grandes empresas como Amazon, Google e IBM estão jogando muitas fichas nisso. Esta tecnologia permite o reconhecimento de objetos e ações através de uma câmera. E o que isso vai mudar minha vida? Simples, imagine você chegar em casa e a porta lhe reconhece e abre para você, ao chegar perto do computador ele mostra as notícias que mais lhe interessam, se seu gato (ou cachorro) estiver passando ele pode analisar e verificar se está com fome ou com alguma doença através da identificação de um determinado padrão.

2ª Mais Mundos Virtuais. A um bom tempo atrás surgiu o SimLife, foi um fracasso generalizado pois as pessoas ainda não estavam preparadas para aquilo. Os novos "Mundos Virtuais" estão mais ligados a tecnologia de Realidade Aumentada. Então pense que você pode estar em um apartamento que ainda nem foi construído, ou em uma sala na qual é possível trocar os móveis de lugar apenas mechendo as mãos. Ou participar de um congresso estando presente virtualmente. Os óculos 3D que permitem tal nível de interação tem se tornado cada dia mais baratos (com R$ 50,00 é possível adquirir um) e com eles podemos interagir profundamente com esses mundos.

3ª Descobertas e análises da Ciência de Dados. Data Science veio para ficar e os analistas dessa tecnologia estão se tornando cada vez mais procurados. Neste campo um revolução está acontecendo pois linguagens como R e Python estão se destacando e não irá me supreender em nada que listas como a do Tiobe indique mais crescimento para ambas até o final de 2018 (atualmente R é a 11ª e Python a 4ª).

Chatbot ou Chatterbot. Tem coisa mais chata que ligar para uma empresa e ser atendido por um robô? Disque 1 para fazer tal coisa, disque 2 para outra... Agora imagine ser atendido e você nem saber que se trata de uma máquina. "Serviço de atendimento em que posso lhe ajudar?" acha isso muito futurista? Pois saiba que muita gente está treinando esses robos com Teras de informação para que possam substituir completamente os atendentes humanos de 1º e 2º nível das grandes empresas. Quando você for transferido para um "humano" raramente perceberá a diferença.

5ª Revolução dos Aparelhos Eletrodomésticos. Calma, sua geladeira não vai dominar o mundo, nem se apaixonar pelo forno de Microondas, basicamente isso tem a ver com uma tecnologia chamada IoT (Internet das coisas), demos passos tímidos este ano através do crescimento de placas como Arduíno e Raspberry. Acredito que o próximo ano é que veremos como essas placas vão influenciar aparelhos eletrodomésticos criando a tal "Cozinha do Futuro", imagine chegar em casa e sua cozinha preparar sozinha o seu jantar com aquela receita que sua avó costumava fazer. Acredita que estou viajando muito? Pois saiba que já é possível ter uma horta totalmente automatizada (ver FarmBot), além disso, uma empresa japonesa iniciou a primeira fazenda totalmente operada por robôs industriais que são responsáveis pelo cultivo até a coleta das hortaliças.


E aonde fica o Ser Humano nisso tudo? Simples nas questões de Inovação e Criatividade, "ainda" não conseguimos ensinar uma máquina a criar algo que não existe, essa é uma característica única do Ser Humano, além disso por mais perfeita que seja uma máquina ela sempre precisará de manutenção ou de inovações para adaptar a sua programação. Apesar de já existir um termo chamado "Singularity" isso ainda não passa de mera ficção.


A próxima geração de desenvolvedores deve contar com esses dois fatores para se destacar neste crescente mercado.

Obrigado e até a próxima
Fernando Anselmo

quinta-feira, 19 de outubro de 2017

Ubuntu - Não me arrependo

A três anos atrás fiz uma troca de Sistema Operacional, o Windows pelo o Ubuntu (por favor, Linux é apenas o Kernel), tive que realizar muitas adaptações nesse tempo. Porém, olhando para trás paro e penso que só tenho um arrependimento não ter feito isso mais cedo. Nessa postagem quero explicar os motivos, não se preocupe pois não pretendo convertê-lo nem dizer que a Microsoft é a vilã na face da terra, aprendi que liberdade é exatamente respeitar as escolhas.



80% do que faço com meus computadores (tenho 3 deles) é desenvolvimento de sistemas, o resto dos 20% é uma distração como assistir filmes ou jogar alguns games (no estilo RPG ou tiro no estilo Doom). No primeiro quisito terei que explicar que como desenvolvedor preciso testar muitos softwares principalmente versões betas de aplicativos e que muitas vezes conseguem danificar o Sistema Operacional, o que mais fazia com o Windows era usar o comando "format c:" (estava tão acostumado que trimestralmente fazia isso).

O Windows foi criado para usuários comuns que compram aplicativos em lojas e essas são versões sólidas e estáveis. Não estou denegrindo o sistema, mas nenhum "usuário avançado" usa ele, é só você assistir a vídeos no YouTube dessas pessoas e reparar que normalmente ou estão usando o MacOS ou alguma distribuição Linux. Pelo simples motivo que citei anteriormente, é muito chato ter que ficar formatando constantemente o sistema.

Optei pelo Ubuntu pois foi a distribuição (ou distro como todo mundo chama) que mais fácil me adaptei (já tinha tentado a Red Hat, a Fedora e o Debian). Não quero dizer que é a melhor, apenas foi a que me adaptei e penso que as pessoas deveriam parar com isso de ficar rotulando se essa é boa ou ruim.

Se tive problemas? sim vários, porém consegui resolver todos eles. Já tive placas de vídeo que não funcionava, vídeo que não tocava, som que não saia, certa vez depois de uma palestra minha resolução de vídeo não retornava e fique um bom tempo em 800x600, entre outras coisas que me aconteceram. E é por essas e outras que penso: "nesse quisito o Windows é bem mais tranquilo, principalmente para um usuário iniciante".





Como disse estou com o Ubuntu a 3 anos, comecei com a versão 14.04 e exatamente hoje mudei o sistema para a versão 17.10. E disse que só me arrependo por não ter trocado mais cedo de sistema foi que, mesmo com todos os problemas que passei, nesse tempo não tive mais que formatar meus computadores uma única vez. Só para que você entenda, até o processo de troca de versão no Sistema Operacional no Ubuntu é feita da seguinte forma: o Sistema me avisa que tem uma nova versão disponível e me pergunta se quero atualizar, digo que sim e pronto começa todo o processo de troca (enquanto ele ocorre continuo trabalhando normalmente).

Toda vez que instalo um aplicativo no sistema por mais beta que seja ele não consegue danificar o sistema, por quê não? Simples, porque ele não tem acesso a isso. Não é que as distros do Linux sejam a prova de vírus, é apenas que o vírus não pode chegar no Kernel do Sistema. No Windows seu usuário é Deus e ali é seu Paraíso, nas distros seu usuário é seu usuário e Deus é o "sudo", ou seja, apenas o "sudo" é que tem permissão de machucar o sistema. E você só usa ele em caso de necessidade.

No Windows você tem duas pastas importantes: "Program Files" e "Windows", a primeira é onde estão os programas instalados e a segunda aonde está o Sistema Operacional em si. Nas distros, existem várias pastas importantes, mas você tem beeeeeemmmm delimitado onde é sua casa, e tudo o que instala com seu usuário está limitado a ela. Ou seja, como corromper um sistema que para ser corrompido tenho que querer isso?

Dois programas que são quase nativos do Ubuntu e que agradam a maioria dos desenvolvedores (não que eles não possam ser instalados em outras distros), o Git e o Docker. O primeiro para publicar seus códigos na Internet e o segundo para a criação de contâineres. Resultado, quero testar um banco novo, como o  RethinkDB (um NoSQL), em pouquíssimos passos tenho um contâiner criado com ele e numa área totalmente delimitada, sendo impossível que faça algo no meu sistema que não permita (não me agradou? Mato o contâiner e pronto). Meus códigos? Boa parte está no Git assim não tenho como perdê-los. Outro aplicativo que o Ubuntu interage muito bem é com o Dropbox. E isso porque não estou tratando que linguagens como Python, Perl, Java e Assembly já fazem parte do pacote básico do sistema e que o npm é possível instalar com uma única linha de comando.

Então pergunto, o que mais posso querer como desenvolvedor?

Obrigado e até a próxima
Fernando Anselmo

Deseja saber mais sobre o sistema? Então baixe aqui meu livro gratuitamente "Instalei o Ubuntu e agora?" e talvez você veja que a mudança pode ser algo muito proveitoso.

quinta-feira, 12 de outubro de 2017

Aprendizado - Sabe programar em BASIC?

Neste "Dia das Crianças" queria lembrar um pouco minha infância, me tornei programador por paixão, na verdade foi depois de ter visto no cinema ao filme "Tron" (1982). Meu primeiro computador veio apenas alguns anos depois através de um TK-83C que era um clone do ZX81, resultado a primeira linguagem que aprendi foi Basic (como muita gente da minha geração).

Meu desejo de consumo sempre foi o de comprar um ZX Spectrum oficial, mas as finanças não me permitiram tal luxo. O tempo passou, as máquinas evoluiram, tive vários computadores e o desejo ficou guardado na gaveta.

Em 2014 comecei a usar o Ubuntu e através dele descobri várias coisas que podia fazer, entre elas retornar a meu antigo desejo. Então neste artigo você descobrirá como ter um ZX Spectrum (muita coisa que fizer aqui poderá ser adaptada para outros Sistemas Operacionais) que a partir de agora vou abreviar para ZX.

Instalação do Emulador

O ponto mais importante é o Emulador que é um programa que traduz as instruções para o sistema operacional, escolhi o FUSE por ser gratuito e bem compatível com o ZX. No Ubuntu existem os pacotes oficiais através dos seguintes comandos:
$ sudo apt install fuse-emulator-common
$ sudo apt install libspectrum
O primeiro comando instala o FUSE propriamente dito e o segundo a biblioteca necessária para executar o ZX.

+3 BASIC

Próximo passo é achar o programa para excutar a linguagem BASIC (Beginners All-Purpose Symbolic Instruction Code), escolhi o compilador +3 BASIC.

Para isso baixe o disco aqui e com o FUSE instalado basta clicar neste para que o +3 Basic seja executado e carregado. Na primeira vez pode apresentar um erro, não se preocupe basta esperar um pouco e quando aparecer a mensagem do Loader: "To cancel - press BREAK twice" pressione a Barra de Espaços duas vezes para entrar no menu.


Agora basta selecionar a opção +3 BASIC para entrar no editor. No menu principal do FUSE selecione "Machine | Reset" (ou pressione F5) e devemos voltar para o mesmo Menu. Saia e entre novamente do FUSE e verá que este programa será carregado por padrão.

Passos Iniciais


Primeiro detalhe que devemos conhecer é que o teclado possui algumas teclas completamente diferente do teclado tradicional do PC (principalmente os brasileiros), então veja a seguinte imagem:


Observe que a aspas duplas (") se encontra em cima da letra P, ou os dois pontos (:) na letra Z, para conseguí-los use a combinação Ctrl+P ou Ctrl+Z.

Segundo detalhe é como criar, salvar e ler um programa?

Precisamos criar um drive de disco, no menu superior do FUSE acesse "Media |  Disk | +3 | Drive A: | Insert New...", agora precisamos formatá-lo, para fazer isso no editor digite o seguinte comando:
format "a:" 
Se tudo ocorrer bem receberá a mensagem "No data, 0:1" (aperte barra de espaço para retornar ao editor), digite o comando "cat" para ver os arquivos existentes no disco. Agora vamos proceder um pequeno teste digite a seguinte codificação:
10 LET a = 10
20 PRINT a
Para executar digite o comando "run", se tudo der certo verá o valor 10 na tela e a mensagem "0 OK, 20:1". Conseguiu perceber o que o programa faz? A linha 10 cria uma variável a com o valor 10 e a segundo mostra o valor dessa variável.

Pronto agora que temos nosso programa devemos salvá-lo, para isso digite o comando:
save "prog01.bas"
E após receber a mensagem de OK digite novamente o comando "cat" para verificar que está tudo OK.


Agora pressione F5 para "resetar" o editor. Entre novamente no editor e digite o comando:
load "prog01.bas" e o programa salvo retornará ao editor.

Indo mais além

Em 1985 surgiu uma das melhores revistas de informática para minha geração, na verdade eram livrinhos, chamada Micro Aventura.


Para minha tristeza só durou 10 edições. Cada edição além da história trazia vários programas a serem executados e ao final a explicação de cada um. E foi assim que me aperfeiçoei com o BASIC e realmente comecei a me tornar um programador. É possível baixar os livros neste site (ou comprá-los no Mercado Livre como Edição de Colecionador) e aproveitar tudo o que essa linguagem tem para oferecer.

Quer explorar mais? Então veja esses dois livros:

Understanding Mathematics and Logic Using BASIC Computer Game
Basic Computer Games - Microcomputer Edition

Obrigado e até a próxima
Fernando Anselmo

Dica, quer mais programas para esse emulador? Então não deixe de visitar esse site.


segunda-feira, 2 de outubro de 2017

Divertimento - Brincando com Papel

Uma das artes que mais adoro é chamada de Papercraft (acredito que a palavra japonesa para isso seja Pepakura), e realizar objetos nessa técnica envolve os seguintes passos: Criar (ou localizar) um modelo em 3 dimensões, imprimir, recortar e montar. Ou seja, não é preciso de nenhum material ou habilidade especial apenas tesoura, cola e um bom nível de paciência.

Assim como o Origami (que é a arte dobradura em papel) essa arte teve sua origem no Japão (ou China - existe uma boa discussão sobre isso) e foi popularizada após a II Grande Guerra trazida para os EUA. É diferente no que se refere ao uso de tesoura ou cola. Mas ambos surgiram como um passatempo que virou arte na mão de modelistas profissionais.

Para introduzí-lo nessa arte escolhi um modelo que me apaixonei a primeira vista, assistindo a um documentário sobre o Festival das Lanternas de Peixes Dourados de Yanai.


Fiquei louco com esse peixe e corri atrás até conseguir o modelo em PaperCraft para montá-lo. Até que finalmente encontrei.


Recomendo-lhe apenas 2 coisas, primeiro imprima em uma boa impressora colorida e segundo não use uma folha A4 comum e sim um papel de gramatura maior (mais grosso, preferencialmente entre 120 a 200 grs - O papel normal tem 75) que pode ser encontrado em qualquer boa papelaria.

Aqui está o modelo para impressão: Baixe aqui o PDF

Bom Relaxamento e até a próxima
Fernando Anselmo

PS. Já falei sobre Papercraft nesse blog em um outro artigo.