António Pedro Cunha Santos

Com uma enorme paixão por tecnologia, autodidacta desde tenra idade, cresceu com o ZX Spectrum. Tem vasta experiência em implementação e integração de sistemas ERP, CRM, ERM, BI e desenvolvimento de software por medida nas mais diversas linguagens. Diplomado do Curso de Especialização Tecnológica em Tecnologias e Programação de Sistemas de Informação pela ESTG-IPVC. Membro da Comunidade Portugal-a-Programar desde Agosto de 2007, é também membro da Sahana Software Foundation, onde é Programador Voluntário. Neste momento é aluno no Instituto Politécnico de Viana do Castelo, na Escola Superior de Tecnologia e Gestão no curso de Licenciatura em Engenharia Informática.
LinkedIn GitHub Twitter Google+

04 Too many open files (no handles left)

Esta é a 26ª edição em que vos escrevo, fez este mês cinco anos e sete meses que tenho a honra e o privilégio de editar a Revista PROGRAMAR, tantas vezes lutando conta o tempo, escrevendo até altas horas, escrevendo mais do que seria “habitual”, fazendo mais um “git push”, esticando os limites, contornando o tempo, a disponibilidade, pedindo aos autores mais um esforço, para que se faça mais uma edição!

O que seriam “demasiados ficheiros abertos”? Seriam 25 demais? Seriam antes 26? Bem, não querendo fazer profecias, mas desafiando todos aqueles que participam, já foram publicadas 55 edições, esta é a 56ª! Esperemos que falamos tantas quanto o máximo número possível de ser representado em binário com 16 bits sem sinal! Seja esse o objectivo e essa a vontade, de quem escreve e de quem lê!

Num momento de “maior sanidade”, menos ousado, mas ambicionado, num lapso de tempo que se espera não seja muito alargado, chegaremos à edição 64! Pode não parecer muito mas se fossem bits, muito se poderia representar! Façamos um “git push”, tenhamos a vontade, e daqui por um ano e alguns meses, estaremos a ler a 64ª edição!

Até lá, boas leituras e muita escrita
António Santos

Os segredos do lado negro da BIOS

Introdução

A BIOS

Ao longo dos anos, muito tem sido escrito sobre possíveis vectores de vulnerabilidade utilizando a bios. No entanto, além do antigo vírus de Chernobyl, que acabou por apagar a BIOS, pouco tem sido dito.

Tal como amplamente descrito, a BIOS é um firmware de arranque designado a ser executado assim que um computador recebe corrente. A função inicial da BIOS é identificar e testar os dispositivos de sistema, como a placa gráfica, as unidades de armazenamento (disco rígido), antigamente as drives de disquetes (agora já são incomuns) e outro hardware, com o objectivo de preparar a máquina e colocá-la num estado conhecido, de forma a que os softwares armazenados nos meios de armazenamento possam ser carregados e executados, para lhes ser “entregue” o controlo do computador. Este processo é o chamado “booting”, que é a abreviatura de “bootstrapping”.

Nos computadores PC compatíveis, alguns periféricos, tais como unidades de disco rígido, placas gráficas, etc… têm a sua própria extensão da ROM da BIOS, com o objectivo de fornecer funcionalidades adicionais. Os sistemas operativos e outro software designado para o efeito, criam uma interface para as aplicações utilizarem estes dispositivos.

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

Tinker Board

Tinker BoardHoje trago até vós caros leitores, um artigo sobre a Tinker Board. Os leitores mais acérrimos certamente sabem que sou uma fã incondicional da família Raspberry Pi. Ora a Tinker Board, é uma concorrente séria ao Raspberry Pi 3. Capaz de desviar o olhar dos fãs mais convictos, como é o meu caso. De uma forma rápida e sem rodeios, esta nova aposta da ASUS desvia-nos o olhar porque apesar de ser ligeiramente mais cara que o Pi 3, as vantagens são maiores do que a diferença de preço entre os dois modelos.

Lançada em Fevereiro de 2017 (de uma forma um pouco “atabalhoada” uma vez que houve distribuidores que a começaram a vender antes da data oficial de lançamento, o que obrigou a um rápido lançamento por parte do departamento de Marketing da ASUS), está disponível na Europa por valores entre os 65€ e 70€. Este micro computador tem um processador quad-core Rockchip RK3288 e gráficos ARM Mali-T764.

Continuar a ler

/* A todos os bravos que chegaram tão longe! */

Poderia começar o editorial por escrever o resto do comentário em código, mas seria quase um “abuso” ao qual não me vou dar!

Como um dia disse, um incontornável personagem da história da tecnologia, não se conectam os pontos olhando para a frente, mas sim para traz. A tecnologia é isso mesmo, um movimento “perpétuo”, em frente, sem parar, sem esperar, sem pausas, a uma velocidade cada vez mais estonteante. Cheio de surpresas e segredos, cheio de revezes e avanços, cheio de tudo um pouco! Mas acima de tudo, cheio! Cheio porque tem um pouco de todos os que nele trabalham, participam, se envolvem! Sem distinção de géneros, classes ou outras que possam existir!

Continuar a ler

O problema do casamento estável utilizando o algoritmo Gale-Shapley

Introdução

O problema do emparelhamento estável (stable marriage problem), é de forma resumida o problema de encontrar um emparelhamento estável entre dois elementos de dois conjuntos de elementos, dada a ordem de preferências de cada elemento do conjunto.

Este problema é normalmente apresentado da seguinte forma: Dados n Reis e n Damas de um conjunto de cartas, cada Rei e cada Dama estabelece uma ordem de preferência para cada um dos elementos “opostos” (reis ou damas), com quem gostaria de estabelecer um “relacionamento”, ou por outras palavras, tomar um café e trocar uns bytes de código! Os pares são estabelecidos de forma a que os pares de elementos opostos prefiram estar “juntos” no par estabelecido, do que estar com qualquer outro elemento. Quando não existirem pares que cumpram estes requisitos o conjunto de pares é considerado estável.

Continuar a ler

O problema da falta de GPIO pins

Introdução

Numa esmagadora maioria dos circuitos usados em IoT e em automação de uma forma geral, como o caso do Arduino/Genuino, existem algumas limitações em termos de pinos analógicos, que nos podem complicar a tarefa de ligar sensores. Por exemplo, no Arduino/Genuino Uno, apenas são disponibilizados 6 pinos analógicos que vão de A0 a A5, respetivamente.

Continuar a ler

Padrão de arquitetura SOLID

Introdução

Existem diversas orientações para programação orientada por objectos, no entanto, neste artigo apenas iremos focar SOLID com exemplos em C#.

SOLID é um acrónimo dos cinco primeiros princípios da programação orientada a objetos e design de código identificados por Robert C. Martin Este mesmo acrónimo foi introduzido por Michael Feathers, após observar que os cinco princípios poderiam se encaixar nesta palavra.

O que significa S.O.L.I.D. ?

  • S – Princípio de Responsabilidade Única
  • O – Princípio Open Close
  • L – Princípio de Substituição Liskov
  • I – Princípio de Segregação de Interface
  • D – Princípio de Inversão de Dependência

Continuar a ler