Técnicas de Programação

Apresentação da disciplina:

aula_00_apresentacao

Exercício de Implementação: Python Básico
Implemente dois scripts utilizando a linguagem Python. Utilize a ferramenta web repl.it para realizar o desenvolvimento.

O primeiro script deve gerar um arquivo de texto com 100 valores inteiros aleatórios, no intervalo entre 1 e 100.
O segundo script deve abrir o arquivo de texto gerado, ler todos os valores, calcular a média e a mediana dos valores lidos, e imprimi-las na tela.
Submeta como solução (i) os dois scripts gerados, e (ii) uma captura de tela do repl.it mostrando o código fonte e a saída do segundo script.

Outros exercícios serão postados aqui em Dezembro/2020.

Trabalho final:

trabalho_tecnicas_programacao

Resolução do trabalho: Montagem de protótipo de dApp para acesso a blockchain de testes, envio de valores e recuperação dos mesmos.

Resumo:
Foi desenvolvido um protótipo de software para simular a recepção de dados, envio de dados para blockchain e exibição dos mesmos. A blockchain escolhida foi o Ethereum rodando em um nó privado. O nó privado foi configurado usando TestRPC1. O código gerado para a blockchain Ethereum foi escrito em Solidity.

Arquitetura do protótipo

O protótipo foi construído para permitir testar conceitos. O principal era a troca de dados entre aplicação cliente e a blockchain. A aplicação cliente é também chamada de dApp (ou aplicação descentralizada), esta aplicação pode rodar em qualquer dispositivo geralmente em um navegador. Por outro lado (server side) temos a aplicação “servidor”, no caso a blockchain que atende as requisições dos clientes (dApps). A ligação entre cliente e servidor se dá por chamadas RPC (Remote Procedure Call). A arquitetura do protótipo foi configurada em uma máquina local para testes, porém como o servidor escuta portas RPC um ambiente de rede com máquinas virtuais ou reais também poderia ter sido utilizado para testes. O lado cliente é composto por uma simples interface com o usuário feita em HTML e Jquery. O cliente deve ter no seu código javascript um Provider, que é o responsável por criar a ligação com o servidor e um código ABI (Application Binary Interface). A ABI é responsável pela padronização, para interações com o contrato, esta é descrita em JSON (JavaScript Object Notation). O nó necessita da biblioteca web3.js, o qual permite que o nó Ethereum possa interagir via Http (Hypertext Transfer Protocol) ou RPC com os clientes. A biblioteca web3.js deve ser instalada via node.js2 e deve estar presente no lado cliente. O nó Ethereum necessita ter a uma porta TPC (Transmission Control Protocol) disponível (geralmente é a 8545) e um local em disco para guardar os blocos que compõe a blockchain. A blockchain utiliza no armazenamento “trie” (digital tree ou prefix tree) como estruturas de dados, é uma estrutura de árvore. A rede Ethereum é uma rede pública na qual são necessários Eth (dinheiro) para processar transações, por isto não foi utilizada. Apesar de existirem redes Ethereum públicas para testes como Ropsten, Kovan, Rinkeby e Goerli, neste cenário foi optado pela configuração de um nó privado local. A figura 1, apresenta a arquitetura.

Estrutura do protótipo:

Arquitetura do teste:

Blocos no disco:

Contrato em Solidity:

Testrpc rodando:

Exemplo código js com web3js:

Formulário simples:

O trabalho final foi postado no git hub.