Tipos em Python

Python sempre foi uma linguagem fortemente tipada, para surpresa de muitos que confundem a tipagem dinâmica com a ausência de tipos. Na realidade, os tipos em Python funcionam tão bem e de forma tão automática que muitas vezes esquecemos que eles existem.

Mas nem tudo é perfeito. Hoje existem programas gigantescos escritos em Python e os programadores precisam de ferramentas poderosas para entender e navegar neste código. Aí tínhamos um problema, pois ferramentas de edição mais avançadas com recursos de autocomplete (intellisense), refactoring e simplesmente de navegação no código fonte se tornaram extremamente complexas. Dadas as propriedades dinâmicas da linguagem, escrever este tipo de ferramentas para o programador Python se tornou uma tarefa complicada. Cada ferramenta era responsável por inferir o tipo de cada método ou função sendo chamada e esta não é uma tarefa simples, uma vez que temos poucas indicações de tipo no programa em si.

Continuar a ler

Gerir a Qualidade do Código

Vamos dar uma martelada? Quem nunca ouviu esta expressão enquanto trabalhava numa aplicação, quer seja no seu desenvolvimento, quer seja na sua manutenção. Este tipo de prática não abona em nada as nossas aplicações e com o tempo acaba por ser um procedimento, uma feature da aplicação que não nos conseguimos livrar.

Este simples exemplo, é apenas um num enorme lote de más práticas que são realizados ao longo dos tempos em muitos projetos. Como fica a nossa aplicação, a sua performance, o seu grau de manutenção, de legibilidade? Podemos dizer que a aplicação tem qualidade?

Quando falamos de qualidade, do que nos estamos a referir? O que é a Qualidade? O que é a Qualidade de uma aplicação? Como podemos medir? Como a podemos gerir?

Continuar a ler

Cifra Feistel

Nesta edição decidimos trazer até si, caro leitor, um artigo sobre uma cifra que data ao ano de 1973. Criada por Horst Feistel enquanto trabalhava na IBM, este algoritmo pertence à criptografia simétrica.

Para os leitores que não estão tão habituados a este tema, existem dois tipos de cifras. A simétrica e a assimétrica. Em termos práticos, a criptografia simétrica tende a ser mais rápida uma vez que exige menos capacidade computacional. Contudo é considerada menos segura uma vez que a mesma chave é usada para encriptar e desencriptar a informação é partilhada pelos diversos intervenientes (na criptografia assimétrica são usadas duas chaves distintas – a chave privada para desencriptar e a chave pública para encriptar a informação – apenas a chave pública é partilhada entre emissor e receptor sendo que a chave privada é usada para decifrar a informação).

Continuar a ler

NodeMCU e Telegram Bots

Introdução

Existem imensas formas interessantes de colocar um equipamento a comunicar, de forma mais ou menos simples. Na edição 51, foi abordada esta temática mais focada na utilização de sockets, para comunicar com o dispositivo. Continuando um pouco a temática, desta feita, é sobre a utilização do popular software de chat Telegram, utilizando chatbots, para comunicar com o circuito.

O Telegram, é um popular serviço de mensagens instantâneas, baseado na nuvem, disponível para a esmagadora maioria dos sistemas operativos, bem como em formato de aplicação web. Entre as muitas características que o podem destacar, convém realçar o facto de ser de código aberto, possuir criptografia ponto-a-ponto, e um serviço de APIs independentes. Além de tudo isso, existem bibliotecas para o uso do telegrama na internet das coisas (IoT), como é o caso da Universal Telegram Bot Library.

Continuar a ler

Introdução aos testes Unitários em C# com MS Unit Test

Introdução

Neste artigo será apresentada uma introdução básica aos testes unitários exemplificando como os escrever na linguagem C#, usando as ferramentas que acompanham o Visual Studio Community. Escrever testes de caso é uma parte importante do teste de software. Testar software é sempre um “quebra-cabeças” para programadores e testadores pois existem imensos tipos de casos de teste possíveis. Os testes unitários são um método pelo qual pedaços de um programa, módulos ou até conjuntos de módulos, são testados por forma a determinar se estão em condições de serem utilizados.

Para escrevermos bons testes unitários, devemos entender como é que um caso de teste funciona, e porque precisamos de o testar!

Continuar a ler

Depois da casa roubada, trancas na porta!

Muito se tem falado desde a passada sexta-feira sobre cyber-segurança, mas antes disso pouco se dizia. Isso faz lembrar o ditado português, “depois da casa roubada, trancas na porta”. Ora bem, na passada sexta-feira, um ransomware, infectou imensos sistemas, colocando os dados reféns de um resgate a ser pago aos criadores do malware. Até aqui, nada de inédito, este tipo de ataques tem sido cada vez mais co- mum! O estranho é o “pânico” gerado em volta da situação e mais estranha será a falta de uma política “pró-activa” de prevenção!

Um ransomware, encripta os dados contidos nos discos rígidos e solicita um pagamento de um resgate! Bem, se existirem cópias de segurança, para quê pagar resgate? Restaura-se a cópia de segurança e recomenda-se aos “autores” do “dito cujo” que vão “plantar nabos num qualquer deserto”, porque os dados continuam disponíveis e o ataque foi apenas mais um fracasso! Situação em que se poderia dizer que “venha de lá o assalto” que as trancas estão na porta! Mas infelizmente numa grande quantidade de situações tal não aconteceu!

Continuar a ler

Android com C# – Introdução ao desenvolvimento

Nesta edição vamos fazer a review do Livro Android com C# – Introdução ao Desenvolvimento escrito por Henrique Loureiro.

O livro introduz o programador que tem conhecimentos em .NET, nomeadamente em C#, ao paradigma de desenvolvimento em mobile, utilizando o Visual Studio com plataforma de desenvolvimento e utilizando o Xamarin para o desenvolvimento mobile.

O livro está organizado em duas partes, a primeira mais teórica com alguns exercícios para consolidar os conhecimentos no final de cada um dos capítulos e uma segunda parte com alguns projetos completos mais abrangentes.

Continuar a ler

Internet das Coisas – Introdução Prática

Desde há anos que se têm vindo a desenvolver equipamentos e soluções com ligação à internet e intranets, para as mais diversas funcionalidades. Muito do que anteriormente era conhecido como automação agora é chamado de internet das coisas.

Neste livro o autor apresenta a temática da internet das coisas (IoT), mantendo um foco bastante prático ao longo dos capítulos. Começa com uma introdução, que incluiu uma breve história da internet das coisas, e procede apresentando algumas das tecnologias disponíveis, abordando alguns pontos de maior interesse, como o caso de machine learning.

Continuar a ler

A interface humano-computador e a sua relação com o conceito de qualidade no desenvolvimento de software e sua percepção aos olhos do usuário (parte II)

Apesar do conceito de qualidade poder ser “mensurado” este é, em essência, abstrato. A mensuração da qualidade depende do nível de satisfação que se deseja atingir junto ao cliente. Um produto de qualidade, aos olhos do cliente é aquele que atende suas expectativas e necessidades e não necessariamente se este produto é ou não durável aos olhos de outrem.

O desenvolvimento de melhores interfaces desde o início da era da computação eletrônica com o advento do computador ENIAC de 1945/46 construído para o exército Norte-Americano com o objetivo de ser usado no seu laboratório de pesquisa balística (MORENO, 2011) tornou-se matéria de estudo, mais aprofundada, aos longos dos anos sub- sequentes na medida em que a computação passou a ser mais popular e acessível a seres humanos comuns da sociedade. Ao longo dos anos posteriores a partir de meados da década de 1940 nota-se que há uma maior preocupação com as questões de usabilidade dos computadores.

Continuar a ler

Videochamada/videoconferência: o projecto SeeMe

A Gateway SeeMe pretende apresentar uma solução de baixo custo para a obtenção de videochamada, videoconferência de qualidade. No decorrer do artigo mostra-se que uma solução IP é independente das características de rede, tanto corre sobre uma rede de pacotes, como sobre uma rede de circuitos. Explicam-se as diferenças entre a comunicação de voz e a de videoconferência.

Continuar a ler