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.

Trabalho Individual I

Survey, revisão de literatura, etc… entrega no final de jun/2020.

Visualização de rede, tópicos obtidos dos abstracts de arquivos .RIS de artigos selecionados no survey, imagem gerada pelo aplicativo VOSviewer.

Análise de Algoritmos

Referências:
[KT05] Kleinberg, J., & Tardos, É. (2005). Algorithm Design (1st ed.). Boston: Addison-Wesley.
[CLRS09] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to algorithms (3rd ed.). Cambridge: MIT Press.
[HF04] Harel, D., & Feldman, Y. A. (2004). Algorithmics: The Spirit of Computing (3rd ed.). Harlow: Addison-Wesley.
[T98] Taylor, R. G. (1998). Models of Computation and Formal Languages. New York: Oxford University Press.

Algoritmo de Gale-Shapley
Exemplo de binary search
Big-O cheat sheat
Grafos
Algoritmos gulosos
Divisão e conquista
Programação dinâmica
NP e intratabilidade
Teoria da computação
Distâncias: algoritmos aproximativos
Distâncias: algoritmos randomizados
Extra: IA

Exercícios:

prova

Trabalhos…

  1. (GABRIEL) Trabalho de análise de algoritmo, em Latex
    23/03 Trabalho 1
    Questao 1. Disserte sobre algoritmos aproximativos.
    Questao 2. Disserte sobre algoritmos randomizados.
    Comente sobre:
  2. A motivação por tras destes algoritmos
  3. Sua importância para a computação
  4. Suas principais características,
  5. Algumas das tecnicas para projetar estes tipos de algoritmos
  6. As diferenças deste tipo de algoritmo para outros tipos vistos em aula.
  7. Apresente um exemplo de algoritmo aproximativo e comente
  8. Em linhas gerais, sua analise de complexidade.
Trabalho1_ProfGabriel_v1

30/03 Trabalho 2 – algoritmo
Questao 1. Disserte sobre analise de algoritmos.
Sua resposta deve englobar os seguintes temas: tratabilidade, complexidade assintotica, notação Big O, e classes de função.
Para cada tema, explique: o conceito, comente sobre sua importancia, e apresente exemplos.

Questao 2. Disserte sobre tecnicas de projeto de algoritmos.
Sua resposta deve abordar as seguintes tecnicas: A) algoritmos gulosos, B) divisão e conquista, e C) programação dinâmica.
Diferenças entre as técnicas.
Situações de uso (em quais situações é mais indicada em relação aos demais).
Idéia geral de cada técnica.
Discuta a importância para a computação.
Características principais.
Forma de analisar algoritmos usando essas técnicas.
Cite exemplos de algoritmos que usam essas técnicas e que estejam alinhados com o tema de sua pesquisa.

Trabalho2_ProfGabriel_v2

Internet das Coisas e Aplicações Distribuídas

Programa de Pós-Graduação em Computação Aplicada
Disciplina: INTERNET DAS COISAS E APLICAÇÕES DISTRIBUÍDAS
Professor: Cristiano André da Costa e Rodrigo da Rosa Righi

EMENTA Aborda o paradigma da Internetdas Coisas (ou IoT, do termo em inglês Internet of Things)e suas aplicações. Inclui aspectos de middleware, sensores, arquitetura e protocolos empregados. Ainda, a disciplinatambém aborda questões como desempenho da solução, escalabilidade e interoperabilidade. Por fim, apresenta estudos de casos em diferentes áreas de aplicação, como saúde, comércio eletrônico, logística, transporte e energia.

CONTEÚDO PROGRAMÁTICO •Introdução a Internet das Coisas•Arquiteturas e Middlewares de IoT•Integração de IoT e Computação em Nuvem •Interoperabilidade, Elasticidade, Escalabilidade e Escalonamento•Computação Móvel e Ubíqua•Ciência de Contexto para IoT•Wearables e Sensores•Protocolos de Comunicaçãopara IoT•Áreas de Aplicação e Estudos de Caso

BIBLIOGRAFIA BÁSICA:
GUBBI, Jayavardhana et al. Internet of Things (IoT): A vision, architectural elements, and future directions.Future generation computer systems, v. 29, n. 7, p. 1645-1660, 2013.LI, S.; DA XU, L.; ZHAO, S. The internet of things: a survey. Information Systems Frontiers, v. 17, p. 243–259, 2015.XIA, Feng et al. Internet of things.International Journal of Communication Systems, v. 25, n. 9, p. 1101, 2012.

BIBLIOGRAFIA COMPLEMENTAR:
RIAZUL ISLAM, S. M. et al. The Internet of Things for Health Care: A Comprehensive Survey. IEEE Access, v. 3, p. 678–708, 3 jun. 2015.PERERA, C. et al. Context Aware Computing for The Internet of Things: A Survey. Communications Surveys & Tutorials, IEEE, v. 16, n. 1, p. 414–454, 2014.KELLY, Sean Dieter Tebje; SURYADEVARA, Nagender Kumar; MUKHOPADHYAY, Subhas Chandra. Towards the implementation of IoT for environmental condition monitoring in homes.IEEE Sensors Journal, v. 13, n. 10, p. 3846-3853, 2013.WANT, Roy. An introduction to RFID technology.IEEE pervasive computing, v. 5, n. 1, p. 25-33, 2006.

Trabalho 1…

IoT_Apresentacao1

Trabalho 2…

IoT_Apresentacao2

Trabalho 3…

IoT_Apresentacao3

Trabalho 4…

Trabalho de IoT/App distribuídas:
29/05 – Entrega de trabalho
Escolher middleware…. ThingSpeak ???

  1. Descrever o que faz… quais funcionalidades, como programa, prós e contras
    comparação com outros concorrentes
  2. Implementação, mostrar código, processos que se comunica na rede, como modelaram, explicar linhas do código
  3. Mostrar resultados, testes, telas do programa, tráfego de dados, dados de desempenho, tempo de comunciação, largura de banda, testes de resultados
  • Escolha um middleware IoT ou de Sistemas Distribuídos (exemplos de áreas: saúde, segurança, banco de dados, comunicação, Big Data, sistema de arquivos, sensores e atuadores, Indústria 4.0).
  • Faça um documento de aproximadamente 10 páginas utilizando o processador LATEX (recomendável usar a plataforma Overleaf) e om modelo de textos da SBC (já disponível no Overleaf) que tenha:
    1/ Análise descritiva do Middleware que você escolheu e uma comparação com os concorrentes.
    2/ Dados de Implementação, ou seja, código e algoritmos e suas descrições.
    3/ Uma seção de resultados e testes, mostrando que a sua implememntação de fato executou em um sistema distribuído: por exemplo, pensar em gráficos, latência, largura de banda, rtelas, dados numéricos, investigação de protocolos e cabeçalhos.

Artigo:

Artigo_Emiliano_Prof_Rodrigo_IoT_Middleware_v1

Figuras:

Prospecção de Dados e Extração do Conhecimento

Disciplina: Prospecção de Dados e Extração do Conhecimento

EMENTA:
Apresenta tópicos de prospecção de dados (data mining) e extração de conhecimentos em bancos de dados (knowledge data discovery), data warehouse, modelos descritivos, temporais e baseados em transações, métodos visuais, grafos, classificação, agrupamento e análise de dados multivariada. Aborda, também, métodos para extração de conhecimento de redes neurais e algoritmos genéticos.

CONTEÚDO PROGRAMÁTICO:
Introdução à descoberta do conhecimento em bases de dados (KDD) abordando questões relacionadas à Big Data;-Exploração de aspectos relacionados ao processo de pré-processamento de dados, tais como: seleção, limpeza e transformação de dados;-Seleção de características e redução da dimensionalidade;-Avaliação e interpretação dos modelos de prospecção de dados;-Exploração das principais tarefas de mineração de dados: classificação, clusterização e associação;-Aprendizado de máquina aplicado à extração do conhecimento;OBJETIVOSProporcionar aos alunos domínio sobre os conhecimentos e ferramentas necessários para prospecção de dados no contexto da Internet, especialmente envolvendo a computação em nuvem. Compreender os algoritmos, técnicas e ferramentas utilizadas para a extração do conhecimento sobre grandes volumes de dados. Entender como a inteligência artificial pode ser empregada para auxiliar no processo de mineração de dados.

METODOLOGIA
(I) aulas expositivas e dialogadas com utilização de quadro e data show;
(II) incentivo ao desenvolvimento de pesquisas através da escrita de artigos científicos relacionados aos temas abordadosem aula;
(III) incentivo à participação ativa dos alunos no processo de aprendizagem a partir de diversas apresentações durante o semestre, que podem envolver o andamento dos artigos que serão desenvolvidos, mas também outros trabalhos propostos.

BIBLIOGRAFIA BÁSICA
LESKOVEC, Jure; RAJARAMAN, Anand; ULLMAN, Jeffrey D. Mining of Massive Datasets. Cambridge University Press; 2 edition, 2014.
Christopher D. Manning,Prabhakar Raghavan,Hinrich Schütze. Introduction to Information Retrieval. Cambridge University Press, 2008.
HAN, Jiawei; KAMBER, Micheline; PEI, Jian.Data mining:concepts and techniques. 3rd ed. Waltham [Estados Unidos]: Elsevier: Morgan Kaufmann, 2012
BUYYA, Rajkumar; BROBERG, James; GOSCINSKI, Andrzej (Ed.).Cloud computing:principles and paradigms. Hoboken [Estados Unidos]: Wiley, 2011
GOODFELLOW, Ian; BENGIO, Yoshua; COURVILLE, Aaron.Deep learning.Cambridge [Estados Unidos]: MIT Press, 2016

BIBLIOGRAFIA COMPLEMENTAR
MURPHY, Kevin P.Machine learning:a probabilistic perspective. Cambridge [Estados Unidos]: MIT Press, 2012
MITCHEL, Tom. Machine Learning. McGraw-Hill, 2017.
SINGH, Chanchal; KUMAR, Manish. Mastering Hadoop 3: Big data processing at scale to unlock unique business insights. Packt Publishing, 2019.
RYZA, Sandy; LAERSON, Uri; OWEN, Sean; WILLS, Josh. Advanced Analytics with Spark: Patterns for Learning from Data at Scale. O’Reilly Media; 2 edition, 2017.
IEEE Transactions on Big Data.
IEEE Transactions on Knowledge and Data Engineering.
IEEE Big Data Mining and Analytics.
IEEE Surveys & TutorialsI
EEE Cloud Computing
ACM Computing Surveys
ACM Transactions on Knowledge Discovery from Data
ACM Transactions on Storage
ACM Transactions on the WebJournal of Data and Information Quality

Trabalho realizado…

Apresentacao_clustering_v2

Trabalho…
(RAFAEL )Trabalho de prospecção de dados e extração do conhecimento
Sobre que assunto: Data mining, big data, knowledge discovery, ML
02/03 – Vídeo de 5 minutos com a ideia do artigo e possíveis locais de publicação
23/03 – Entregar documento contendo a estrutura do texto, definição do artigo, estutura de tópicos, apresentação de como será feito o artigo, estrutura do IEEE
13/04 – Entrega parcial – texto e vídeo (ler descrição)
O documento deve conter, pelo menos:
1) Definição do problema, na seção de introdução
2) Descrição e análise de, pelo menos, 5 trabalhos relacionados
3) Overview da solução proposta
Além disso, o aluno deve postar um vídeo de 5 minutos, no máximo,
explicando a solução proposta.
8/6 – Entrega do artigo e da apresentação (15/20 minutos)

Artigo em formatação. Em breve será publicado aqui. O assunto tratado abordado será o processamento de linguagem natural (PLN).