quarta-feira, 20 de março de 2019

Sobre NodeJS

Sobre NodeJS - iniciado um breve estudo no youtube que daí surgiu alguns termos
Node funciona com event loop - que  atende com uma unica thread as requisioções e dpois compartilha a demanda

modelo tradicional (antes):
requisições ==> [threads esperando]
  • aguardando que alguma coisa aconteça
  • ao chegar faz alguma coisa (Query em banco, entregar arquivo requisitado)
  • ficam a maior parte do tempo esperando(dormindo,wait)
  • como alocar menos recurso?

Desafio do Node inicialmente, como     melhorar este I/O
  • como alocar menos memória, menos thread e ter mais cocorrencia

Solução proposta no node
  • um event-loop (EL) que roda em uma só thread (uma coisa sendo processado por vez)
  • ao receber requisição delega a tarrefa a um pool de threads (inicialmente 4 threads alocadas)
  • esse pool de threds tem a ver com I/O Assincrono (I/O não bloqueante)
  • quando o I/O é finalizadopelo no pool de threadas, isso é agendado no E.L. para ser processado
  • assim nunca se tem threads wait, mas se tiver muito requisição concorrnte este processo pode esperar para entrar no pool de threads
  • node usa LibUV para dar suporte a EL Pool de Threads
                |--> responsável pela realizaçãodo I/O assíncrono



para I/O ñ bloquante ver:
I/O assíncrono
Polling
    - programador, explicitamente, pede para saber da disponibilidade de eventos num file descriptor (fd) [3]
    - quando se pergunta: tem algum evento acontecendo?) (perguntar o status de um file-descriptor)
        =>a resposta é: eventos disposníveis nestas coisas
        =>não é comum usar polling para um fd e sim varios
    - file descriptor [3]: Every time you accept a connection with the accept system call, you get
      a new file descriptor representing that connection.
    - polling esta associado ao conceito de "readiness" Model ??
        =>vc é informado quando aquele fd está pronto para um evento   
        => mas as vezes: chega uma mensagem, o Polling avisa, pode ler desta fd mas
           por algum motivo programador não consiga ler (ou seja esta pronto mas talvez não..?)
    - servidores modernos como nGinx e Tornado usam conceito de Poling (em cima do poling o loop de eventos)_
        => ob.|:  Flask is blocking and Tornado is non-blocking.
    - no Python 3.3 poling esta no módulo select
    - no Linux se usa epoll para polling, familia BSD (e OSX) kqueue, windows usa Select
Etapas do Polling (python)
    - criar objeto poller
    - (opcional) registrar um file descriptor (fd)
    - execução do poll() => retorna os evento (o fd e o tipo de evento - leitura, escrita ou erro)
Polling é um conceito de baixo nível
    - é responsabildiade do programador ficar invocando ele (gerealmnente dentro de um while(true) )
    - responsabilidade também add e retirar eventos
        =>se um cliente desconectou devo retirar do polling (cli não envia mais nada)
    - reponsa tb iterar os eventos e ver se é leitura ou escrita e tratar cada item
Loop de Eventos [1]
    - abstração acimam do Polling
    - polling + loops + callbacks
        =>quando acontecer o evento no fd tal => quero que executa o callback tal
Pool
I/O multiplexing(event multiplexing).
    The blocking behavior of BSD Socket API means that if you invoke recv() on one connection,
    you will not be able to respond to a request on the other connection. This is where you
    need I/O multiplexing. (Scalable Event Multiplexing: epoll vs. kqueue)


Muita coisa peguei daqui Link
    TULIP - PYTHON 3, IO ASSÍNCRONO E LOOP DE EVENTOS
    https://pycursos.com/tulip-python-3-io-assincrono-e-loop-de-eventos/
        Agenda do palestrante
        - Poolig & Loop de eventos
        - I/O Assíncrono e Não bloqueante
        - Coroutinesa, Future/Tasks
        - I/O Assíncrono sem calbacks - yeld from

    o palestrante inicia falando sobre File Descriptor, ver o texto para complementar
    https://jvns.ca/blog/2017/06/03/async-io-on-linux--select--poll--and-epoll/



Como se constrói um event-loop?


Dicas Rob Pike
[1] artigo Communicating Sequential Processes (tony hoare) um dos artigos mais imprtantes da coputação
[2] concorrencia é melhor que paralelismo (Concorrência não é paralelismo, é melhor! )




Long Pollig
==============
O Long Polling é uma técnica que simula uma indisponibilidade do servidor para manter uma conexão HTTP aberta. Essa técnica foi criada a partir da necessidade de comunicação em tempo real com um servidor web.

Contexto

Com a necessidade de se obter dados em tempo real do servidor, antigamente, os desenvolvedores criavam rotinas que enviavam uma requisição de tempos em tempos (como você mesmo descreveu) para "perguntar" se havia mudanças no modelo de dados da aplicação. Caso houvesse, a resposta da requisição conteria esses dados e então os mesmos poderiam ser atualizados na aplicação.

Esse tipo de rotina consumia uma quantidade grande de recursos quando a aplicação tendia a ser escalável (crescer de forma acelerada). Vamos simular:

Imagine uma página que envia a cada 5 segundos uma requisição AJAX para um endpoint específico a fim de descobrir se houve mudanças de notificações, por exemplo. Isso não se torna um problema com poucos usuários simultaneamente conectados. Mas digamos que a aplicação cresça de 10 usuários para 100 usuários conectados simultaneamente.

Vamos pensar maior. Imagine 1.000 usuários conectados. Em 5 segundos, 1.000 requisições serão enviadas para o mesmo endpoint. Após mais 5 segundos, mais 1.000 e assim por diante. Dependendo da arquitetura da aplicação, isso começa a sobrecarregar o servidor. Especificamente aquele endpoint.

"A solução" - Long Polling

Quando um cliente faz uma requisição o servidor simula uma indisponibilidade de dados e faz com que a requisição HTTP não tenha resposta enquanto não houver mudanças no modelo dos dados da aplicação.

Isso resolve o problema? Sim e não. Sim, por que não é necessário ficar enviando requisições de tempos e tempos para checar essas mudanças. Não, por que isso causou outro problema de desempenho. As requisições HTTP não foram especificadas para isso. Estender uma requisição HTTP pode "parecer" resolver o problema da quantidade de requisição enviadas ao mesmo endpoint, mas na verdade ela também consome muito recurso justamente por que está sendo usada inadequada.

A verdadeira solução - WebSockets

Escrevi um post sobre WebSockets e sua implementação em Java (mas tem implementações pra quase todas as linguagens atuais). Sugiro que dê uma olhada por que lá eu explico com detalhes sobre a especificação e também dou exemplos práticos que da pra reproduzir ai na sua casa.

Comunicação em tempo real com WebSockets

Enfim.. Foque seu estudo em implementações WebSockets e seja feliz com a verdadeira comunicação em tempo real.

domingo, 10 de março de 2019

Discussão sobre o Limite Fundamental Trigonométrico

do video Introdução ao Cálculo Diferencial e Integral - 02.04.2016 - parte 3
prof. Cláudio Possani - Colegio Leonardo de Jundiai

tem uma discussão sobre o Limite Fundamental Trigonométrico, foi este a razão histórica da invanção  dos radianos...
\(=\lim_{t \to 0}\frac{sen(t) }{t}=1\)   mas este limite só é 1 em radianos...

O radiano foi inventado no renascimento por causa do cálculo... depois de 1650
é pos isso que na trigonometria derrepente muda para adianos .. pq a trig. esta migrando parao cálculo, e em cálculo tudo é em radianos, por conta dessa derivadas
\(=\lim_{t \to 0}\frac{sen(t) }{t}=1\)

ver ótima explicação de radianos no Betre Explained, tem versão emportugues

Guia Intuitivo para os Ângulos, Graus e Radianos
https://goo.gl/qbPcs9

Sobre funções exponenciais

do video Introdução ao Cálculo Diferencial e Integral - 02.04.2016 - parte 3
prof. Cláudio Possani - Colegio Leonardo de Jundiai
(11:30)
de onde vem a imporancia das funçõa exponenciais tipo f(x)=a^x:
derivada é taxa de variação (quanto que varia uma grandeza)
ao observar o mundo físico(ao se estudar fenomenos reais): se observa que
-> grtandezas em que a variação da grandeza é proporcional a propria grandeza
   isto é muito frequente na natureza, coisas em que a variação de um fenomeo, depende
   do quanto aquele fenomeno já existe
ex.:
1) Medicos estudando epideomologia, pessoas passa para pessoas
     a avariação de pessoas infectadas, de pende do quanto já tem
     quanto mais pessoas infectadas, mais contatos uma com as outras, logo mais infecções
     ou seja o fenomeno cresce, quando cresce o nº pessoas infectadas
     ou, a velocidade de propagação da doença, aumenta quando tem muita gente infectada
     (a taxa de variação é maior pq a população infectada é maior-> taxa de variação é
     derivada, população é a função)
neste caso para os médicos que estudam propagação de doenças interessa as funções cuja
derivada é proporcional a propria função => que é a função exponencial..
     não é uma função x^2 ou x^3
2) Crecimento de popuilação mesma coisa (maior a população, mais encontros=>mais acasalamentos)
     quanto maior a população mais a taxa de crecimento cresce
3) Decaimento radioativo: maior a qtdade de material radioativo=> maior a taxa de emissão
de particulas radioativas, e maior é a taxa de decaimento (porque esta emitindo mais) e a medida
que vai diminuindo vai emitindo menos
é um monte de fenomenos emque a derivada é proporcional a função

terça-feira, 19 de fevereiro de 2019

Projeto Reconhecimento de Imagem do RBP

só guardando os links
equipamentos todos ok

YOLO: Real-Time Object Detection



Adicional
OgmaNeo Overview and Video Prediction
https://github.com/ogmacorp/OgmaNeoDemos

quarta-feira, 5 de dezembro de 2018

Boa introdução ao Algoritmo RSA

Entendendo (de verdade) a criptografia RSA
Achei uma boa apresentação da aritmética modular e porque de seu uso.

Encontrei o link a partir da sequência de leituras:
1. Sliding Right into Information Theory no Planet Debian (by Joachim Breitner )
2. Sliding right into disaster: Left-to-right sliding windows leak - Artigo
3. Analysis of Sliding Window Techniques for Exponentiation - Artigo

O artigo 2 é referenciado no post do Debian  Planet. Lendo este artigo fui atrás do termo Sliding Window Techniques que é uma tecnica para calcular a potência de um número (x^E) com expoente gigante (E) sendo E inteiro e positivo, usado no algoritmo RSA.O algoritmo é descrito no artigo 3.

Outros termos pesquisados
-  Exponentiation by squaring

[12.02.2019]
Gerar o hash de uma letra
echo -n "a"  | md5sum

o "-n" elimina a nova linha adicionada pelo comando echo, o que altera a saída do comando md5sum
ver Why does `md5sum` not give the same hash as the Internet does?




DRfddSufdi8PR6Wj8Bj1c71x8rxP3Gewna (DOGE)
16FFpSdBThTKrQv4miBso8DrDRocyXjwft (bitcoin BTC)
45nCBgYZHHz83U4tdnxAfm4w4KGgs4f8XL9wbcPX8QZTMvExysktkD598NuDfLPEmXfSNvhu58CsBTfWofXj2TgR3WfTX3m (Monero XMR)
0x8C095453569A443ef8B854B5BaA0000b347d9803 (Ethereum ETH)
RChBPGktHhEPsCBRH6Yzr4Higq7fPr5a6d (Ravecoin RVN)
0x8C095453569A443ef8B854B5BaA0000b347d9803 (Shiba)


segunda-feira, 19 de novembro de 2018

Teste com Hamlib e Icom

Teste de conexão serial com radio icom 7000  (cabo CI-V)
usei o tutorial HOWTO: Configure Hamlib for Linux Hams

rigctl é a implementação Hamlib (rigctld é  a versão daemon que aceita comandos via TCP)


Comandos
rigctl -l  (lista todos os modelo suportados, código 360 é icom)
rigctl -m 360 -r /dev/radio -s 9600 -c 0x70
No shell do rigctl: comando "f" retorna (get) a frequencia atual do radio, "F" seta uma fequência.

mas não funcionou possivelmente problemas no cabo ci-v, foi usado um conversor usb<=> serial que veio no kit mas pela documentação o cabo usa um conector stereo que é para ser usado em radios HT, para usar em radios desktop tem de usar um plug adaptador mono.
[atualização] testei com o cabo LD-C101 USB to CI-V  e funcionou normalmente
Provavelmete a configuração ali da foto funcione ligandodireto DB9<=> DB9 (sem o adaptador USB-serial)


Conectado no conector adequado conforme manual




Compilado ainda software wsjtx-1.9.1 para testes em modos digitais, ver modos FT8, JT65
diretório de instalação:
~/programas/icom/wsjtx-1.9.1
executável em:
./build/wsjtx-prefix/src/wsjtx-build/wsjtx

Sobre modo JT65 ver
Configurando IC-7100 para JT65 e JT65Alert modos digitais
Equipamento usado antena g5rv w8am e radio icom 7100

Sobre WSPR ver (sobre problemas)
https://www.george-smart.co.uk/wspr/2m_wspr/

Sobre cabo CI-V
como fazer um usando conexão bluetooth
https://www.george-smart.co.uk/scrapbook/bluetooth_radio_interface/
não funcionou..

Pacotes instalados
Flrig
Grig
Fldigi
Icom

Atualização [04/2020]

Dois chips
- BC417 - módulo Bluetooth<=> RS232. (HC-06 somente slave)
- MX29LV800 - memória flash

Sobre o módulo Bluetooth testado, o modelo que tenho é o HC-06 (somente slave) o HC-05 é master/slave, este foi utilizado no projeto Bluetooth Radio Interface

Consegui setar os parâmetros do HC-06 somente com o comando Picocom, tentado sem sucesso no Debian com GtkTerm, Minicom, Cutecom
Comandos utilizados:

picocom -b 9600 --omap crcrlf --echo /dev/ttyUSB0
AT
AT+VERSION       (retorna VERSION:3.0-20170609)
AT+NAME=PU5BIT
AT+PSWD:"1234"  (AT+PIN=1234,não funciona como HC-06)


Conexão Módulo Bluetooth <=> Usb Serial com PL2303 usando pino 3.3v

Links consultados
https://wiki.kewl.org/dokuwiki/interfaces:bt0417c
https://www.aranacorp.com/en/arduino-and-bluetooth-module-hc-06/

sexta-feira, 12 de outubro de 2018

Cursos Udemy

Infra
  1. Ansible para SysAdmin
  2. Certificação Amazon AWS Solution Architect + 3 Cursos EXTRAS
  3. Computação em Nuvem: aprenda Amazon AWS com a mão na massa
  4. DevOps For Beginners - Docker, Kubernetes and Azure DevOps
  5. DevOps: AWS com Terraform Automatizando sua infraestrutura
  6. Docker: Ferramenta essencial para Desenvolvedores
  7. Simulados para Certificação EXIN Cloud Computing Foundation

IoT

  1. Primeiros passos com o FreeRTOS e ESP32


Web

  1. Criando Páginas Web com o GitHub Pages
  2. Crie sites Wordpress hospedados gratuitamente na Amazon
  3. Curso Completo Criar Sites com Design Profissional WordPress
  4. Curso Completo de PHP 7
  5. Curso Completo do Desenvolvedor NodeJS e MongoDB
  6. Curso React + Redux: Fundamentos e 2 Apps do Absoluto ZERO!
  7. Do Zero à Nuvem: API Restful com NodeJS, Restify e MongoDB
  8. Introdução à linguagem CSS
  9. Introdução à linguagem JavaScript

IA
  1. Formação Cientista de Dados com Python e R
  2. Introdução à Estatística para Data Science em R
  3. Machine Learning e Data Science com Python de A a Z
  4. Machine Learning in R: Curso Completo de Regressão Linear
  5. Statistical Modeling for Data science
  6. Super Formação Inteligência Artificial e Machine Learning
  7. Unsupervised Machine Learning Hidden Markov Models in Python

Música
  1. Aprenda a Improvisar na Guitarra
  2. Curso de Flauta Doce Prática

Linux
  1. Iptables - O Firewall do Linux
  2. Linux Kernel System Programming
  3. Preparatório para Certificação Linux LPIC-1
  4. Git para iniciantes

Mercado Financeiro
  1. Python para Finanças: Investimentos & Análise de Dados

Diversos
  1. Curso de ESP8266
  2. Go (Golang): Explorando a Linguagem do Google
  3. Learning Data Structures in JavaScript from Scratch
  4. LGPD - Lei geral de proteção de dados para leigos
  5. Nanodegree Digital Marketing - Launch Formula