Você está na página 1de 83

EDITORIAL

EQUIPA PROGRAMAR
Coordenador
Antnio Santos
Editor
Antnio Santos
Design
Srgio Alves
Twitter: @scorpion_blood
Redaco
Andr Loureno
Antnio Santos
Fernando Martins
Igor Nunes
Miguel Lobato
Miguel Oliveira
Nelson Lima
Nuno Santos
Paulo Morgado
Ricardo Amaral
Ricardo Castro
Rita Peres
Srgio Ribeiro
Tiago Henriques
Staff
Antnio Santos
Fbio Domingos
Fernando Martins
Gil Sousa
Jorge Paulino
Sara Santos
Contacto
revistaprogramar@portugal-aprogramar.org
Website
http://www.revista-programar.info

Em movimento
Vivemos num mundo em movimento, onde tudo est em constante evoluo, onde
o que hoje um facto, amanha um mito, onde a tecnologia muda e transforma-se
constantemente!
Ainda h pouco tempo me ri um pedao ao ler o que escreviam crticos sobre uma
apresentao de um sistema operativo que por incidente, crashou. Diziam os crticos
mais um sistema sem qualidade, outros questionavam em tom de ironia ser isto
mais uma manobra de marketing?, outros sem qualquer conhecimento apenas
diziam, j habitual.
Ora pensando bem, h bastantes anos atrs, os sistemas operativos crashavam, e
pouco se dizia. O Disk Operating System, nem sequer funcionava em protected
mode, mas no se dava a importncia que agora se d a essa funcionalidade. H
10 anos atrs os smartphones no tinham um decimo das funcionalidades dos
modelos de entrada de gama actuais, mas na altura maravilhavam muita gente e
eram alvo de criticas severas de quem dizia que eles nunca iriam singrar no
mercado das Tecnologias de Informao. Parece que o tempo provou que todas as
criticas de ento estavam erradas!
Num mundo em constante mudana e evoluo, a nica certeza que havia que os
programadores continuariam a evoluir, a tecnologia tambm, algumas tecnologias
iriam vencer, outras no! A evoluo traaria a linha que separaria aquilo que iria
continuar e aquilo que iria ficar pelo caminho.
H 10 anos atrs, muita gente nem sequer sabia que existiam processadores ARM,
hoje toda a gente os usa nos tablets, smartphones, etc A mudana e a evoluo
assim traaram o rumo!
H 30 anos atrs, programava-se em Basic , os PCs tinham 1MB de Ram, os Macs
eram um pequeno nicho, e no se liam grandes criticas aos produtos tecnolgicos.
H 30 anos atrs o PC foi considerado a pessoa do ano pela revista Times e nos
dias que correm, ns vivemos todo o dia agarrados a gadgets vrias vezes mais
capazes que o PC de ento, igualmente programados por Humanos, feitos e
desenhados por Humanos, e com uma mesma coisa em comum! Os que hoje so de
topo amanha estaro obsoletos.
Uma grande parte dos programadores formados agora no sabe sequer que existiu
uma era em que no existiam GUIs, em que as IDEs no eram to bonitas e
apelativas, eram mais um editor de texto em modo de texto, e se programava com
as preocupaes de manter o cdigo limpo, organizado, a economizar recursos de
sistema. Nos dias de hoje, mais do que nunca existe tendncia a escrever spaghetti
-code sem grande qualidade, consumidor de enormes recursos de hardware, muitas
vezes usando e abusando de cdigo gerado automaticamente pelas IDEs, etc
Parece que todas as lies aprendidas nos anos anteriores, foram esquecidas, como
se fosse esquecida uma parte da histria e da evoluo, da tecnologia. Felizmente
ainda existe muita gente interessada em fazer um bom trabalho e no apenas em
produzir trabalho, a tecnologia continuar a evoluir e o mundo a girar!

ISSN
1 647-071 0

Antnio Santos
<antonio.santos@revista-programar.info>

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.

NDICE
TEMA DE CAPA
6

As Novidades do Visual Studio 2012 RC (Srgio Ribeiro)


Conhea as novidades da ultima verso deste IDE.

A PROGRAMAR
14

Pascal - Construo de uma Calculadora Grfica (Igor Nunes)


Veja como construir uma calculadora Grafica em Object-Pascal

28

Formulrios em HTML5 (Nelson Belo Lima)


Aprenda a criar formulrios em HTML5 com validao em Javascript

34

SEO: Search Engine Optimization - Introduo Parte II (Miguel Lobato)


A segunda parte do intrigante artigo sobre Search Engine Optimization, do mesmo autor

39

Implementao da Cifra ARSD em Ambiente Emulado Windows Azure (Rita Peres e Andr Loureno)
Veja como implementar uma cifra em ambiente Windows Azure

50

Estao de Controlo de Temperaturas Usando Arduno e Texas Instruments LM335A (Nuno Santos)
Aprenda a construir uma estao de controlo de temperaturas com a famosa board, Arduino

COLUNAS
56

Enigmas de C#: Avaliao da Lista de Argumentos (Paulo Morgado)


Mais um enigma da linguagem de programao C#, desta vez envolvendo Lista de Argumentos.

57

Core Dump: Podemos Continuar a Acreditar nas TIC? (Fernando Martins)


Ser que os podemos continuar a ter acreditar nas Tecnologias de Informao hoje em dia? Conhea a opinio deste
autor.

ANLISES
60

Fundamental do MAC OS X (Miguel Oliveira)

61

Microsoft SQL Server 2012 Integration Services: an Expert Cookbook (Antnio Santos)

COMUNIDADES
63

PtCoreSec - Segurana na WEB (Parte 3) (Tiago Henriques)


A terceira parte do artigo sobre segurana na WEB, do mesmo autor da parte II.

NO CODE
69

Plano Tecnolgico da Educao: Seis Anos Depois (Ricardo Castro)

78

O Empreendedorismo Como Uma Opo de Auto-emprego e Inconformismo (Marisa Almeida)

81

Projeto em Destaque na Comunidade Portugal-a-Programar: Notification Agenda

EVENTOS
25 Ago 2012
13 Out 2012
15-17 Nov 2012

32 Reunio Presencial da Comunidade NetPonto em Lisboa


UploadLisboa 2012
Sapo CodeBits VI

Para mais informaes/eventos: http://bit.ly/PAP_Eventos

NOTICIAS
Jelly Bean disponvel para todos os
programadores

Investigadores portugueses ganham


prmio da Google

O anncio foi feito num frum Google, pelo programador Jean


Baptiste Queru: a verso 4.1 est AOSP (de Android Open
Source Project). O Jelly Bean traz algumas novidades, nomeadamente no que diz respeito s interfaces tteis e a nvel do
desempenho, noticia o Ars Technica.

Investigadores da Universidade do Minho e do Inesc Tec ganharam o Google Research Award pelo trabalho que tm levado a cabo na rea do cloud computing. O prmio da Google
pretende distinguir o contributo dos investigadores do HASLab
- Laboratrio de Software Confivel (que tem investigadores
da Universidade do Minho e do Inesc Tec) para o desenvolvimento de ferramentas que facilitam a produo de software
para ambientes de Cloud Computing.

As novas verses do sistema operativo so


desenvolvidas pela Google e depois libertadas para a comunidade poder programar as
suas aplicaes. Com esta abertura possvel ainda desenhar imagens ROM de cada verso para as instalar em diversos dispositivos.

De acordo com um comunicado da Universidade do Minho, o


prmio foi atribudo ao projeto Minha, por ter criado plataformas que permitem testar o desempenho das pesquisas do
Google e do portal de vdeo YouTube a partir de um nico
computador.

O novo tablet Nexus 7 j utiliza esta verso.


Escrito ao abrigo do novo Acordo Ortogrfico

Atravs da tecnologia Java, os investigadores nortenhos desenvolveram, no mbito do projeto Minha, uma plataforma
que simula a atividade de vrios computadores e permite apurar em que condies funcionam algumas das principais redes
e servios que operam na Internet.

Fonte: exameinformtica.sapo.pt

TMN aposta em plataforma de empreendedorismo

A soluo permite fazer testes e observar os resultados na


prpria hora, e est tambm preparada para ensaios em sistemas que ainda no esto completos, permitindo analisar
eventuais lacunas antes do lanamento comercial de um servio.

Chama-se Projector a nova aposta da TMN que quer dar continuidade ao mote lanado h 100 dias, "Vamos l". A operadora decidiu dar um empurro aos empreendedores e lanou
um portal interativo onde pretende que os portugueses divulguem as suas ideias e projetos, angariando o financiamento e
os meios necessrios para as pr no terreno.

No site www.minha.pt , pode descobrir mais detalhes sobre


este projeto que mereceu o apoio da Fundao para a Cincia
e Tecnologia e fundos comunitrios do Compete/QREN.

No site j h ideias e projetos de negcio, mas a TMN quer


que este nmero cresa. E h espao para a oferta e procura,
podendo ser colocadas iniciativas de quem procura meios de
as concretizar mas tambm de quem tem recursos para aplicar e est a tentar encontrar os parceiros certos. O site est
alojado no portal "Vamos L", que a operadora lanou quando
mudou a assinatura da marca, j teve mais de 100 mil visitantes e recolheu mais de 100 histrias de portugueses que
"fizeram acontecer" as suas ideias.
A tecnologia apenas um meio para esta iniciativa de proximidade, mais relevante na atual conjuntura de crise que impede muitos jovens e empreendedores de porem em prtica o
conhecimento adquirido e encontrarem um emprego ou uma
forma de implementarem as suas ideias.
Escrito ao abrigo do novo Acordo Ortogrfico
Escrito ao abrigo do novo Acordo Ortogrfico

http://projetor.vamosla.pt/
Fonte: exameinformtica.sapo.pt
Fonte: TEK Sapo

NOTICIAS
Microsoft mostra "segredos" da velocidade do Windows 8

Novo sistema operativo para Mac


disponvel para download

Enquanto o novo Windows 8 no chega s lojas, a Microsoft


vai revelando novas razes para apostar no sistema operativo, deixando para trs a performance do Windows 7.

Ficou hoje disponvel para download a partir da loja de


aplicaes para Mac a mais recente verso do sistema operativo que equipa os computadores da Apple. Designada Mountain Lion, fica acessvel a ttulo de upgrade, (apenas) para
utilizadores do OS X Lion e do Snow Leopard, por 15,99 euros.

No blog Building Windows 8 - da autoria da equipa de engenheiros envolvidos no desenvolvimento deste sistema operativo - a Microsoft explica a importncia do processamento grfico no novo Windows, bem como das novas ferramentas de
acelerao por hardware que o Windows 8 inclui.

Apresentada a 11 de junho tinha


estreia agendada para julho e o
calendrio cumpriu-se com o lanamento mundial na Mac App Store
da nova verso - que segundo a
Apple traz mais de duas centenas
de novidades, entre novas funcionalidades e melhorias a j existentes.

O post comea por explicar como o Windows 8 se baseia no


"sucesso" da utilizao dos grficos DirectX no Windows 7,
referindo que foram adicionadas novas capacidades de visualizao durante a interao do utilizador, no s com o prprio
Windows, mas tambm com as Apps especficas desenvolvidas.

Da lista de alteraes que chegam boleia daquela nona


verso principal do software (que o TeK detalhouaqui), a fabricante destaca pontos como a integrao com a iCloud e o
Facebook, a aplicao Messagens, o Notification Center,
Sharing para todo o sistema, acesso ao Game Center, Dictation e AirPlay Mirroring.

De acordo com o post, as novidades introduzidas pelo Windows 8 a nvel grfico centram-se sobretudo em quatro reas:

Otimizao da utilizao do DirectX no IE 9, pegando nos


exemplos da sua utilizao com o Windows Live Mail e
Messenger para aplicar no desenvolvimento de novas
Apps;

"As pessoas vo adorar as novas funcionalidades no Mountain Lion, bem como a facilidade com que este pode ser
descarregado e instalado a partir da Mac App Store", afirma o
vice presidente de marketing da Apple, Philip Schiller, citado
num comunicado enviado aos meios de comunicao.

Acelerao do processo de "rendering" do texto em pginas Web, mensagens instantneas e programas de email;

Melhorias no "rendering geomtrico" 2D, usado para a

A nova forma de comercializao do sistema operativo, atravs da loja online, foi introduzida com a verso anterior do
software, o OS X Lion, e ao que tudo indica tem estado a ser
bem recebida. Quando este foi lanado, em julho de
2011, foram registados 1 milho de downloads logo nas
primeiras 24 horas. A novidade permite tambm disponibilizar
a soluo a um preo mais baixo, o que apontado como um
fator a seu favor.

criao de tabelas, grficos, quadros, diagramas e em


outro tipo de interfaces de utilizador. Neste caso, as alteraes espreitam quer a utilizao mais fluda e compatvel
de apps online, quer no prprio desktop do PC;

"Grande quantidade" de melhorias na "renderizao" de


imagens vdeo e fotos nos formatos JPEG, GIF e PNG, de
modo a aproveitar a arquitetura dos CPUs para descodificar mais rapidamente as fotos, bem como melhorar a gesto do DirectX na reproduo de vdeos online.

vs do endereo http://blogs.msdn.com/b/b8_br/.

De acordo com os ltimos nmeros fornecidos pela empresa


de Cupertino, h 66 milhes de clientes Mac, um nmero trs
vezes maior que o registado h cinco anos. A ltima verso
do OS X foi descarregada 26 milhes de vezes, fazendo com
que 40% dos utilizadores de computadores da marca tenham
a verso mais recente do sistema operativo instalada.

Escrito ao abrigo do novo Acordo Ortogrfico

Escrito ao abrigo do novo Acordo Ortogrfico

Fonte: TEK Sapo

Joana M. Fernandes

Para conhecer em pormenor as justificaes da Microsoft


poder ler o post oficial no blogue Building Windows 8, atra-

Fonte: TEK Sapo

TEMA DA CAPA
As novidades do Visual Studio 2012 RC (Visual Basic)

TEMA DA CAPA
As novidades do Visual Studio 2012 RC

Desaparecem todos os indcios de curvas e at os rtulos


dos itens de menu foram colocados em maisculas, semelhana da experincia Metro nos dispositivos que j a implementam.

mais que oficial. Foi j desde dia 31 de Maio que ficaram


disponveis para download as verses RC (Release Candidate) do novssimo Visual Studio 2012 (tambm conhecido
por Visual Studio 11.0) e da .NET Framework 4.5
Como sempre, uma nova verso, implica um reforo de funcionalidades e ferramentas com o intuito de nos facilitar o
trabalho e melhorar a produtividade. O novo Visual Studio
2012 (que vou abreviar para VS11 daqui em diante) no
excepo. Alis, o VS11 diferente o suficiente para dar que
falar, talvez at muito mais do que alguma verso que j
tenha sido libertada desde o Visual Studio 7 (tambm conhecido simplesmente por Visual Studio .NET). A verso 4.5
da .NET Framework conta com a verso 11 da linguagem
Visual Basic, verso 5 de C# e verso 3 de F#.

Todos os cones foram tambm eles redesenhados para a


nova realidade. Os mesmos cones so igualmente usados
no novo tema nativo: dark, tal e qual como a experincia
Metro do Windows Phone 7 prev: light e dark.
possvel observar que os cones so rigorosamente os
mesmos, quando deveriam ter invertido a cor. possvel que
seja temporrio.

J todos ouvimos falar do interface Metro, e j todos percebemos o esforo imenso que a Microsoft tem vindo a empregar para uniformizar a experincia de todos os seus produtos
para o novo interface. A maior mudana do VS11 passa precisamente por a. Quer se goste, quer no, o Metro veio para
ficar.
As influncias Metro comeam-se a notar logo desde o novo
logtipo do IDE.

Este interface j foi retocado desde o release Beta, onde


existiam indcios mais fortes do Metro, mas que foram fortemente criticados, por a negativa, por a maioria dos utilizadores. Existiam, por exemplo, muito mais stios onde se usavam as letras maisculas.

Os complexos gradientes e transparncias, bem como as


curvas perfeitamente calculadas do lugar cor slida e
forma simples e limpa.
Na nova interface predominam os contrastes.

Mas, felizmente, a verso 11 no s uma cara lavada.


Existem algumas melhorias que vale a pena destacar, no
s directamente do ambiente de desenvolvimento, mas relacionadas tambm com a nova verso da Framework.

Ao nvel do IDE
Vou comear por focar alguns dos pontos mais relevantes a
nvel do IDE.

A leveza que se nota


No novidade se disser que o VS10 j rendia algumas
coisas por via de acelerao grfica por hardware, e no

TEMA DA CAPA
AS NOVIDADES DO VISUAL STUDIO 2012 RC
A partir deste Quick Launch convenientemente colocado
em espao antes intil, podemos aceder a qualquer item que
exista na rvore de menus e tambm lista de documentos
abertos.

VS11 essa presena reforada. No s o interface se tornou mais limpo e mais fludo, como o desempenho geral do
IDE est significativamente melhorado. A resposta do interface foi muito favorecida e os recursos utilizados muito melhor
geridos, mesmo ainda se tratando de um candidato a release.

Hierarquia de chamadas
Mais do que apenas encontrar referncias de uso de determinado membro, o VS11 disponibiliza uma verso reforada
da Call Hierarchy que nos premite no s encontrar referncias de determinado membro, mas tambm perceber de
imediato a partir de que posio hierrquica chamado e
que chamadas subordinadas pode despoletar.

O lento assassnio do rato


Um dos pontos que mais me agradou na nova verso, e notei praticamente de imediato, um pormenor, do qual j tive
oportunidade de discutir com outros colegas de ofcio.
Pode parecer irrelevante, mas algo que pode poupar muito
tempo quando estamos a desenhar o nosso interface, (nos
tipos
de
projectos
que
implicam
interface).
Falo do separador da caixa de ferramentas, ou dos separadores da consola inferior.

Para efeitos de teste, vamos considerar o seguinte bloco de


cdigo:
Private Sub Chamada1()
Chamada2()
Chamada3()
End Sub
Private Sub Chamada2()
Chamada4()
End Sub
Private Sub Chamada3()
Chamada2()
Chamada4()
End Sub
Private Sub Chamada4()
Chamada1()
Chamada2()
End Sub

Nas verses anteriores, s existiam duas formas de aceder


caixa de ferramentas, ou consola inferior: ou se afixava,
sacrificando espao, ou se passava o cursor do rato por cima, o que as fazia surgir. Para poupar espao til, afixar
sempre esteve fora de questo, e o surgir torna-se verdadeiramente irritante quando no temos inteno de as abrir.
A aproximao experincia Metro obriga quase inevitavelmente a ter de pensar nos interfaces como sendo exclusivamente desenhados para o toque, em detrimento do rato.
Assim, a nica forma de fazer surgir estas janelas atravs
de um toque, quando realmente as queremos abrir.

Poder ser fcil de rastrear, porque pequeno e no contm


nada, mas at aqui se consegue demonstrar a utilidade da
hierarquia de chamadas.

O sentido de acessibilidade permanente


semelhana de vrios produtos Microsoft, o VS11 possu
uma vasta seleco de opes e menus que se podem tornar verdadeiros labirintos onde acabamos sempre por perder
mais do que tnhamos pensado perder s para encontrar
determinada funcionalidade. O VS11 conta com uma barra
de pesquisa rpida, como a que foi introduzida no menu Iniciar do Windows Vista.

TEMA DA CAPA
AS NOVIDADES DO VISUAL STUDIO 2012 RC
Quando executamos determinadas operaes de forma assncrona, como se o nosso condutor agora viajasse tambm com a sua mulher. Enquanto ele se focava nica e exclusivamente conduo, e com o carro em marcha permanente, basta indicar ao passageiro que abra o vidro, ou que
ligue o rdio. Independentemente do tempo que este demorar, foi ordenado algures no tempo, e vai surtir um efeito,
quando o tiver de surtir. No interessa quando. E o carro
continua a andar.

Como se observa, conseguimos de imediato uma representao visual das chamadas aos membros que so feitas, at
um passo antes da recurso.
Os projectos orientados para a Web tambm receberam
vrios brinquedos novos no interface, sendo o mais significativo a opo de poder escolher o browser a testar naquela
execuo, poupando minutos preciosos, mas no na Web
que me quero focar.
Existem, naturalmente, muito mais pormenores e diferenas
que se vo notar com o uso. No posso enumerar tudo.

Ainda que vaga, esta analogia pode sensibilizar, no s para


a importncia da thread do interface (a responsvel por desenhar o que vemos no ecr), mas tambm no que isso significa para a experincia do utilizador.

Ao nvel da linguagem
Ao nvel da linguagem tambm encontramos melhorias significativas, que provm da novssima .NET 4.5.

A maioria das pequenas operaes podem ser executadas


logo na thread do interface (UIT a partir daqui [User Interface
Thread, ou Thread da interface do utilizador] ), e muitas fazem todo o sentido que l sejam executadas. Todas as outras, que exigem poder de processamento ou que so demoradas, devem ser executadas por todos, excepto a UIT, que
tem de se mostrar sempre responsive.

Programao Assncrona
A .NET 4.5 disponibiliza um novo modificador Async que
est intrinsecamente ligado com a nova palavra-chave
Await.
Este novo conjunto de recursos permitem-nos realizar operaes assncronas, em diferentes threads, de uma forma to
natural e fluida como se tratasse de fluxo sncrono.

Peguemos num exemplo bsico onde a execuo assncrona faz todo o sentido: download da resposta a um pedido a
um webserver. Se feito sem ser assincronamente, o UIT teria
de esperar por a resposta completar, o que poderia demorar
vrios segundos, dependendo da capacidade de resposta do
servidor. Em verses anteriores da .NET, poderia fazer-se da
seguinte forma:

Para dar o devido valor a esta nova funcionalidade, h que


entender qual a vantagem em executar operaes assincronamente ou esperar que uma termine para completar outra.
Vamos pensar na execuo da thread do interface como um
carro em marcha, numa linha recta. Vamos tambm considerar que o condutor algo limitado em termos de execuo de
tarefas.
Durante o percurso, queremos executar duas operaes
muito bsicas: abrir um vidro e mais frente ligar o rdio e
s voltar conduo quando o vidro terminar de abrir ou
quando
o
CD
do
carro
carregar
as
pistas.
Ao ocupar o condutor de forma a que seja necessrio aguardar que o vidro desa ou que o leitor de CDs carregue as
pistas, teramos obrigatoriamente de parar o carro, esperar
por o fim da operao e s depois arrancar.
Isto moroso, e afasta o condutor do que realmente deveria
estar a fazer: a conduzir.

Private Sub Button1_Click(sender As Object,


e As EventArgs) Handles Button1.Click
Dim tmpURI As Uri = New Uri("http://
www.portugal-a-programar.pt")
Dim WC As New Net.WebClient
AddHandler WC.DownloadStringCompleted,
Sub(sender As Object,
e As Net.DownloadStringCompletedEventArgs)
Trace.Write(e.Result)
End Sub
WC.DownloadStringAsync(tmpURI)
End Sub
O handler de um evento tinha sempre de ser registado, o
que se traduz em mais um membro, neste caso annimo,
mas sempre mais um membro. Para alm disso, o fluxo do
cdigo torna-se algo confuso e difcil de acompanhar.
Agora possvel escrever o mesmo da seguinte forma:
Private Async Sub Button1_Click(sender
As Object, e As EventArgs) Handles Button1.Click
Dim tmpURI As Uri = New Uri("http://
www.portugal-a-programar.pt")
Dim WC As New Net.WebClient
Dim tarefaAsync As String = Await

TEMA DA CAPA
AS NOVIDADES DO VISUAL STUDIO 2012 RC
Existem 3 possveis:

WC.DownloadStringTaskAsync(tmpURI)
Trace.Write(tarefaAsync)
End Sub

Atributos

Descrio

Tipo de
dados

O modificador Async na definio do membro indica que


aquele mtodo poder fazer chamadas assncronas.
Quando essas chamadas forem necessrias, devem ser
acompanhadas por a keyword Await que indica que aquele
um ponto de execuo onde o fluxo deve resumir dentro
daquele mtodo, assim que a chamada assncrona terminar.

CallerFilePathAttribute

Caminho complete do

String

ficheiro fonte onde o


membro pertence
CallerLineNumberAttribute

Este um exemplo com um mtodo conhecido, onde a tarefa assncrona j est implementada, mas perfeitamente
possvel implementar as nossas prprias tarefas.
O seguinte bloco de cdigo representa um mtodo pesado
que devolve uma Task.
Qualquer devoluo de Task elegvel para processamento
assncrono.

Nmero da linha no

Integer

cdigo do ficheiro
fonte onde o membro
pertence
CallerMemberNameAttribute

Nome do membro em

String

questo

Private Function MetodoPesado() As Task(Of Integer)


Dim RT = New Task(Of Integer)(Function()
Dim c As Integer = 0
For i As Integer = 0 To Integer.MaxValue / 2
c += 1
Next
Return c
End Function)
RT.Start()
Return RT
End Function

Private Sub btCallerInfo_Click(sender As Object,


e As EventArgs) Handles btCallerInfo.Click
CallerInfo()
End Sub
Public Sub CallerInfo(
<CallerMemberName> Optional nomeMembro As String =
Nothing,<CallerFilePath> Optional ficheiroFonte
As String = Nothing,<CallerLineNumber> Optional
numeroLinha As Integer = 0)
Trace.Write("Chamada disparada de " & nomeMembro
& vbCrLf)
Trace.Write("Do ficheiro " & ficheiroFonte &
vbCrLf)
Trace.Write("Na linha " & numeroLinha & vbCrLf)
End Sub

O nosso mtodo pesado implica uma contagem desde o


zero at metade do limite mximo que um integer pode representar.
Uma tarefa to simples como esta, poderia pendurar o UIT
por alguns segundos, sem necessidade nenhuma.

O que produz algo assim:

Para executar este mtodo assincronamente bastaria:

Chamada disparada de btCallerInfo_Click

Private Async Sub Button2_Click(sender As Object,


e As EventArgs)
Handles Button2.Click
Trace.Write("A comear o mtodo pesado..." &
vbCrLf)
Dim num As Integer = Await MetodoPesado()
Trace.Write("Resultado do mtodo pesado: " &
num.ToString)
End Sub

Do ficheiro C:\Users\Sergio Ribeiro\Documents\Visual Studio


2012\Projects\Testes2012RC\Testes2012RC\Form1.vb
Na linha 51
Esta passagem de informao assegurada por o namespace Compiler Services, onde pertencem os 3 atributos usados.
Para que a informao seja correctamente atribuda, os parmetros precisam de ser opcionais, e consequentemente de
possuir um valor por defeito. Caso contrrio, faziam parte da
assinatura obrigatria.

Onde se podem identificar novamente o Async e o Await


Caller information
semelhana do que j acontece em outras linguagens,
agora possvel extrair informaes do membro que foi chamado.
Isto perfeito se pensarmos em mais-valias de depurao,
relatrio de erros e bugs vindos do outro mundo.

Iteradores
Os iteradores, apesar de relativa novidade, j foram abordados na edio 33 da revista, pelo que no vou aprofundar.
So basicamente a disponibilizao de novas keywords que
nos permitem criar os nossos prprios tipos iteradores.

Para receber essas informaes, basta acrescentar assinatura do mtodo a monitorar as propriedades que se pretendem recolher identificadas por o seu atributo.
10

TEMA DA CAPA
AS NOVIDADES DO VISUAL STUDIO 2012 RC
Num projecto Windows Forms, criamos uma suposta instncia desse objecto:

Sempre que utilizamos a keyword Yield dentro de um mtodo assinalado com o modificador Iterator estamos a instruir
uma nova iterao.

Dim T As New TextBox

Com esta lgica, podemos construir coleces iterveis, com


qualquer regra de iterao que precisemos de empregar.
Dois exemplos simples, iterar os nmeros 1,5,8,11,57,12,
que no seguem uma lgica de incremento, e iterar todos os
nmeros pares dentro de um dado alcance, como exemplo
de implementao de regra de iterao:

Mas o compilador no d sinal de erro. Deveria dar porque a


assinatura do meu objecto obriga a um parmetro.
O problema, que o nosso objecto tem um nome que j
existe
num
namespace
preferencial.
O objecto que estamos na verdade a instanciar o System.Windows.Form.TextBox

Private Sub btIteradores_Click(sender As Object,


e As EventArgs) Handles btIteradores.Click
For Each number As Integer In ParesEntre(5, 18)
Trace.Write(number & ",")
Next
For Each number As Integer In Simples()
Trace.Write(number & ",")
Next
End Sub
Private Iterator Function Simples() As IEnumerable
(Of Integer)
Yield 1
Yield 5
Yield 8
Yield 11
Yield 57
Yield 12
End Function
Private Iterator Function ParesEntre(ByVal primeiro
As Integer, ByVal ultimo As Integer)
As IEnumerable(Of Integer)
For numero As Integer = primeiro To ultimo
If numero Mod 2 = 0 Then Yield numero
Next
End Function

Para contornar isto, teramos de fazer a instncia com o nome completamente qualificado:
Dim T As New Testes2012RC.MeusObjectos.TextBox(1)
Assim j temos a certeza a que objecto nos estamos a referir, e j precisamos de especificar o parmetro do construtor.
Estamos de facto a instanciar o nosso objecto em detrimento
do outro.
Isto faz sentido, mas se imaginarmos que sempre que nos
quisermos referir ao nosso objecto, temos de fornecer o nome completamente qualificado, o cdigo vai-se tornar desnecessariamente extenso e cada vez menos legvel.
Como tambm no podemos fazer Imports de ambos, por
terem o mesmo nome, nos possvel criar um Import especial, em referncia:
Imports TextBoxNativa =
System.Windows.Forms.TextBox
Imports MinhaTextBox =
Testes2012RC.MeusObjectos.TextBox
Com estes Imports j nos permitido usar a referncia da
seguinte forma:

O cdigo acima produzia o seguinte output:

Dim T1 As New TextBoxNativa


Dim T2 As New MinhaTextBox(1)

6,8,10,12,14,16,18,1,5,8,11,57,12,
Namespaces ambguos

Este tipo de referncia um excelente atalho e uma maisvalia para a legibilidade do cdigo.

Tambm os namespaces receberam algum foco nesta nova


verso, nomeadamente ao que toca a ambiguidade dos nomes.

Existem outros casos de ambiguidade mais graves, que geram quebras em namespaces importantes. Por exemplo,
vamos alterar a nossa TextBox para a seguinte:

Um dos grandes focos, que no so novidade para o VS11,


so
as
referncias
a
nomes
fully
qualified.
possvel fazer objectos referncia a determinado namespace, e usar a referncia para definir os tipos durante o projecto.

Namespace System.MeusObjectos
Public Class TextBox
Sub New(Linhas As Integer)
End Sub
End Class
End Namespace

Vamos imaginar que temos um projecto onde precisamos de


chamar a determinado objecto nosso, TextBox, que vamos
definir da seguinte forma:

Ao usarmos o namespace System, estamos a impedir que


nos possamos referir ao namespace System nativo. Por
exemplo, se eu quiser instanciar uma TextBox nativa, vou ter
problemas porque os namespaces de System passam a ser
apenas o MeusObjectos.

Namespace MeusObjectos
Public Class TextBox
Sub New(Linhas As Integer)
End Sub
End Class
End Namespace

Para contornar a situao, existe um namespace Global.


a partir dele que recuperamos novamente a referncia ao

11

TEMA DA CAPA
AS NOVIDADES DO VISUAL STUDIO 2012 RC
mento que tem vindo de verso para verso mostrar a quo
sria a atitude da empresa com os programadores.
Cada nova verso faz passar a noo de que o programador
sempre colocado no topo de todas as novas tecnologias
Microsoft e de que tem mesmo de experimentar um bocadinho de todas para descobrir as necessidades dos seus projectos.

System que queremos.


Isto levanta outra questo: e se eu quiser chamar Global ao
meu namespace?
No possvel. Podemos sim incluir o nosso namespace no
namespace Global:
Namespace Global.MeusObjectos
Public Class TextBox
Sub New(Linhas As Integer)
End Sub
End Class
End Namespace

A Microsoft consegue assim, andar mais um passo em direco da completa convergncia para um excelente ecossistema, onde existe uma nica ferramenta, um nico ambiente,
para todas as mainstream platforms no mercado.

Mas no possvel aninhar namespaces com o nome Global, por motivos bvios.

Julgo que as verses Express no estejam oficialmente confirmadas, mas so tidas quase como certas. As iniciativas
Express so a forma perfeita de viver a experincia Microsoft, gratuitamente, uma vez que no existe limitao a nvel
da Framework.

Em suma
No universo Microsoft (e a chave aqui universo Microsoft), o Visual Studio sempre foi um companheiro de todos
os programadores. Um excelente ambiente de desenvolvi-

AUTOR
Escrito por Srgio Ribeiro

Curioso e autodidacta com uma enorme paixo por tecnologias de informao e uma saudvel relao com a .NET framework. Moderador global na comunidade Portugal@Programar desde Setembro de 2009.
Alguns frutos do seu trabalho podem ser encontrados em http://www.sergioribeiro.com

12

A PROGRAMAR
Pascal construo de uma calculadora grfica
Formulrios em HTML5
SEO: Search Engine Optimization Introduo parte II
Implementao da Cifra ARSD em Ambiente Emulado Windows Azure
Estao de Controlo de Temperaturas Usando Arduno e Texas Instruments LM335A

A PROGRAMAR
Pascal construo de uma calculadora grfica
Muitos acharo que Pascal e as suas variantes, com a excepo para o Delphi, mais no fazem se no programas
para consola, ou seja, Console Applications. Isso seria verdade no fosse o facto do Turbo Pascal ter dado h vrios
anos, ainda na dcada de 80, um grande passo para a criao de ambientes grficos mais apelativos.

Ou seja, esperamos que o resultado final da utilizao da


unidade por ns criada para este feito seja semelhante ao da
Figura 1.

Tinha surgido, ento, a unidade Graph. Esta nova unidade


traz consigo uma panplia de mtodos que nos permitem
criar desenhos pixel a pixel, ou seja, criam ambientes para
alm da tradicional e velhinha consola.
Na sua essncia mais simples, esta unidade detecta as caractersticas grficas do computador onde corre o programa
e cria uma rea grfica onde se podem criar os mais variados desenhos e textos.
Para quem est familiarizado com Visual Basic .NET, a classe Graphics bem como as namespaces Drawing e Drawing2D so os exemplos com termo de comparao mais
prximo.
Para auxiliar o programador, alguns novos tipos de dados
foram includos na unidade types, sendo de enfatizar as
duas mais simples e usuais, TPoint e TSize.
O objectivo deste artigo no ser, contudo, dar noes introdutrias desta unidade de um ponto de vista puramente terico. Esta unidade to nica e to diferente de qualquer
outra que o Free Pascal oferece que merece uma abordagem totalmente diferente.
Para dar a conhecer devidamente o poder desta unidade, o
objectivo do artigo ser a construo daquilo que a base
de qualquer calculadora grfica: uma Plotter.
Para quem no est familiarizado com o termo, uma Plotter
no mais do que uma calculadora grfica. As suas capacidades so diversas, consoante as funcionalidades que o seu
programador lhe coloque. Contudo, qualquer Plotter ter de
receber uma funo, calcular os seus valores, que sero
pontos no grfico, e unir esses mesmos pontos com linhas
de forma a dar uma visualizao contnua e no picotada.
Assim sendo, neste artigo ser criada uma pequena unidade
que ter um novo tipo de dado que conter as propriedades
e os mtodos bsicos de uma Plotter uma classe, portanto,
bem como um pequeno programa de teste que ir usar essa
unidade para representar graficamente a seguinte funo:

Figura 1 Exemplo de output esperado com a construo da Plotter.

Logo com esta imagem denotamos as diferenas entre a


rea grfica criada pela unidade Graph e a consola a que
estamos to acostumados: a personalizao colorida pixel a
pixel.
Portanto, em suma, os objectivos para este artigo so os
seguintes:
Dar a conhecer a unit Graph no seu conceito geral;

Criar uma classe que permita gerar e personalizar


uma Plotter bsica;

Conceber uma unit que tenha esta classe como um


novo tipo de dados, bem como inclua os tipos de dados auxiliares que sejam necessrios formar;

Criar um pequeno programa de teste desta nova unit


que permita experimentar a Plotter;

Mais uma vez, a par dos meus artigos anteriores, identificarei


sempre a linguagem de programao por Pascal e no por
Object Pascal por uma questo de simplificao. Ser usada, doravante, as notaes unit ou unidade, e no mdulo.
Todos os mtodos e propriedades, tipos de dados e constantes sero nomeados em ingls.
Por fim, o cdigo aqui presente foi todo feito para ser compilado no Free Pascal 2.6.0 em Windows. Algumas adaptaes podero ter de ser feitas para Mac OS e para GNU/
Linux.
A unit Graph noes e conceitos

14

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
bvio que no faria muito sentido comear a construir a
Plotter sem antes ter algumas noes introdutrias sobre a
unit na qual nos vamos basear.

pondo que tem o Borland Pascal instalado na raz da unidade C.


Por fim, antes do programa ser terminado, ou quando a rea
grfica j no for necessria, esta deve ser encerrada atravs do seguinte procedimento:

A unit Graph uma unidade que contm uma srie de mtodos e constantes que permitem criar um ambiente grfico
numa janela parte da consola e que permite o desenho de
formas avanadas.

CloseGraph;

Para se ter uma noo geral da imensido desta unit, esta


contm:

Em princpio no devero ocorrer erros no decorrer destes


processos j que, segundo a documentao do Free Pascal,
estes no devolvem quaisquer erros na sua execuo. Contudo, outros mtodos da unit Graph podero gerar erros, e,
por este motivo, a parte do programa que estiver a trabalhar
com esta unidade dever estar enquadrada numa estrutura
de tentativa. Como em Pascal esta no inclui os blocos Except e Finally numa s estrutura e devem estar sim encadeadas, recomendo a seguinte:

Mais de 70 mtodos de desenho e personalizao;


Mais de 200 constantes;
Mais de 20 tipos de dados.
A criao do ambiente grfico (Figura 2) feita custa de
um procedimento, InitGraph, que ir receber por parmetro
a resoluo e a driver. Contudo, como estes valores fazem
parte das mais de 200 constantes da unidade, um outro procedimento, DetectGraph, oferece a possibilidade de detectar
automaticamente estes parmetros.

try
try
DetectGraph(Driver, Modus);
InitGraph(Driver, Modus, '');
// cdigo...
except
ON ex:exception do begin
// em caso de erro
end
end
finally
CloseGraph;
end;
Ou seja, qualquer excepo que ocorra dever ser detectada
e, caso o programador assim o deseje, informada. Por fim,
aquando o final de todas as aces, a rea grfica encerrada (CloseGraph), e como este processo no sofre erros,
ficar no bloco Finally.
Para a possibilidade de utilizar esta estrutura, dever-se-
incluir, no Free Pascal, a directiva de compilao {$mode
objfpc} na primeira linha do cdigo-fonte. A unit sysutils
dever ser igualmente includa caso se queira apanhar e
tratar as excepes ocorridas no decorrer do programa.

Figura 2 A rea grfica criada pelo InitGraph com a tradicional consola


sobre ela.

Assim sendo, e sabendo que os valores obtidos so do tipo


SmallInt, necessria a declarao de duas variveis que
iro receber atravs do DetectGraph os valores a utilizar no
procedimento InitGraph:

A unit Graph permite, ento, desenhar e preencher objectos


variados (Figura 3), tais como:

var Driver, Modus : SmallInt;


// ...
DetectGraph(Driver, Modus);
InitGraph(Driver, Modus, '');
Como podero ter reparado, o procedimento InitGraph recebe um terceiro parmetro, do tipo String, e que, neste caso,
recebeu uma String vazia. Este procedimento para ser,
regra geral, ignorado, a no ser que utilize o Borland Pascal
nesse caso, ter de passar a String C:\PP\BGI, isto su-

15

Pontos;

Linhas;

Rectngulos;

Polgonos;

Elipses;

Crculos;

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA

Queijos (pies);

Para facilitar o programador que utilizar a classe, podemos


incluir valores padro, isto , constantes, na unidade que ir
conter a nova classe:

Zoom padro;
Estilos de linha padro para os eixos, a grelha e a
funo;

Cor de fundo padro.


Deveremos, ento, comear a definir os mtodos e propriedades da classe. Por conveno, novos tipos de dados iniciam-se com a letra T. Para a nossa classe, os valores privados tero a letra inicial v, de value (valor), e os parmetros
das funes e procedimentos tero a letra inicial c, de
constant (constante), de forma a poder distinguir devidamente os valores dos parmetros e das propriedades sem ter de
diferenciar em demasia os nomes.

Figura 3 Exemplo muito simples da utilizao das capacidades da unidade


Graph.

A unit Graph permite tambm usar preenchimentos que no


sejam slidos mas que tenham no seu lugar um padro
(pattern), sendo mesmo possvel criar padres personalizados, entre muitas outras capacidades.
Dada esta muito breve introduo genrica unidade sobre
a qual vamos trabalhar, chegado o momento de iniciar a
construo da Plotter, mas sem antes definir o que esta far.

A nossa classe ser, ento, a TPlotter e esta ir herdar daquela que classe principal do Object Pascal: a TObject.

A Plotter funcionalidades e personalizaes a incluir

TPlotter = class(TObject)

A nossa Plotter, como calculadora grfica que , de-

Como propriedades e respectivos tipos de dados, a classe


TPlotter incluir:

ver incluir:

Grelha, do tipo Estilo de Linha, a definir mais frente;

Uma rea de trabalho, rea esta que tem um tamanho (Size);

Eixos e Estilo da Funo, do mesmo tipo de dado;

Eixos das abcissas (XX) e das ordenadas (YY)

Posio, do tipo TPoint;

(Axes);

Dimenso, do tipo TSize;

Uma grelha que marca os pontos relevantes do zoom

Zoom, do tipo Zoom, igualmente a definir mais frente;

actual (Grid);

Cor de fundo, do tipo Word;

Um Zoom;

Outras propriedades podero ser necessrias e definidas ao


longo da construo da Plotter, mas estas so as essenciais.
Por fim, os mtodos da classe sero, essencialmente:

Para a personalizar, poderemos incluir as seguintes opes:

Cor de fundo;
Estilo de linha dos eixos;

Criar (construtor);

Estilo de linha da grelha;

Libertar (destrutor);

Estilo de linha da funo.

Mostrar;
Apagar;

Para esclarecer bem o que so a grelha, os eixos, a funo e


a rea de trabalho segue-se uma imagem elucidativa (Figura
4).

Relocalizar;
Redimensionar;
Redefinir Zoom;
Carregar funo;
Desenhar funo;
Apagar funo;

Figura 4 Estrutura bsica da Plotter a ser criada.

Libertar funo;

16

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
Iremos definir os novos tipos de dados quanto a classe for
construda, j que, desta forma, se tornar mais bvia a necessidade no s da sua existncia mas tambm da sua
estrutura final.

Em cdigo, teremos o seguinte:


PRIVATE
vPosition : TPoint;
vSize : TSize;
PUBLIC
property Position : TPoint read vPosition;
property Size : TSize read vSize;

Devido s dificuldades que se colocam em explicar a construo de uma classe destas, iremos construi-la por passos
segundo a ordem lgica de construir primeiro os alicerces e
s depois o telhado todos estes passos sero, doravante,
numerados para uma melhor interligao entre estes.

Caso utilize outro compilador e necessite de declarar estes


dois tipos de dados devido inexistncia da unit types, segue-se a sua definio segundo a documentao do Free
Pascal, pronto a implementar:

1. Declarao da nova unidade e definio da classe


Como estamos a criar uma pequena calculadora grfica,
vamos denominar a nossa unidade de GraphCalc, que ao
mesmo tempo aluz ao facto de se utilizar a unit Graph.

TYPE
TSize = packed record
cx: LongInt; // largura em pixis
cy: LongInt; // altura em pixis
end;

Como vamos necessitar dos tipos de dados TPoint e TSize,


necessitaremos igualmente da unit types.

TPoint = packed record


X: LongInt; // posio horizontal
Y: LongInt; // posio vertical
end;

UNIT GraphCalc;
INTERFACE
uses graph, types;
// declarao
IMPLEMENTATION
// implementao
END.

3. Estilos das linhas da grelha, dos eixos e da funo


definio do tipo de dados TLineStyle

A nossa classe TPlotter herda da classe genrica TObject,


e ter valores privados e mtodos e propriedades pblicas:

Os estilos de linha da grelha, dos eixos e da funo podem


ser alterados e lidos a qualquer momento. Para que as alteraes sejam aplicadas, o mais fcil ser criar um procedimento genrico de actualizao (Refresh) que ir limpar a
rea da Plotter e redesenh-la. Por este motivo, os estilos de
linhas sero de acesso geral, sem qualquer restrio na leitura ou na escrita:

TYPE
TPlotter = CLASS(TObject)
PRIVATE
// privado
PUBLIC
// pblico
END;

PUBLIC
Grid : TLineStyle;
Axes : TLineStyle;
FunctionLine : TLineStyle;

2. Propriedades de localizao, tamanho e cor de fundo


A cor de fundo no necessita de nenhum mtodo especial
de escrita nem de leitura basta-lhe atribuio directa ,
nem necessita de ser s de leitura ou s de escrita (ou seja,
ReadOnly ou WriteOnly). Dado isto, podemos declarar a cor
de fundo directamente como uma varivel na seco pblica
da classe:

Como constatvel, este tipo de dados no existe, pelo que


ser criado por ns. Seguindo a mesma estrutura dos tipos
TPoint e TSize, iremos criar o TLineStyle como um Packed
Record, ou seja, este ocupar em memria nica e exclusivamente o espao necessrio.

Este tipo de dados incluir as seguintes definies de


linha:

Cor;

Espessura;

Estilo (contnua, tracejada);

Visibilidade.

PUBLIC
BackColor : Word;
Por sua vez, a posio e a dimenso podem ser lidos, mas
a sua alterao implica que o desenho da Plotter mude a
escrita destas duas propriedades dever ser controlada.
Para relocalizar e redimensionar a Plotter iremos usar dois
procedimentos separados. Ou seja, teremos estas propriedades como ReadOnly e a sua alterao dar-se- com mtodos independentes destas propriedades e que sero implementadas mais frente.

17

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
TYPE
TLineStyle = PACKED RECORD
Color : word;
Thickness : word;
Style : word;
Visible : boolean;
END;
A visibilidade fica definida pois tornar-se- fcil controlar
quais as linhas que aparecem fazendo um controlo com uma
estrutura de controlo if then.
Desta forma, se definirmos Grid.Visible a False, a
grelha no desenhada e o output j ser do gnero da
Figura 5.

Figura 6 Definies do Zoom.

Com base nesta definio de Zoom, podemos definir o tipo


TZoom do seguinte modo:
TYPE
TZoom = PACKED RECORD
XMin, XMax, XScl : real;
YMin, YMax, YScl : real;
END;

5. Clculo do centro do grfico e da distncia em pixis


entre cada linha da grelha
Eis algo que o leitor possivelmente no estava espera. Contudo, antes de podermos avanar mais, de extrema importncia definir e calcular qual o centro do grfico e
qual a distncia, em pixis, entre cada linha da grelha em
ambos os eixos.

Figura 5 Output da Plotter com a visibilidade da grelha definida a False.

4. Zoom do grfico definio do tipo de dados TZoom


Algo muito importante numa calculadora grfica, e
possivelmente aquilo que mais complicado de aplicar, o
Zoom. O Zoom vai depender no s das definies dos eixos
mas tambm das dimenses da rea de trabalho. Caso a
rea de trabalho seja fixa, esta questo ganha contornos
mais simples.

Como se ver mais adiante, isto ser importante para


o desenhar da Plotter e para o clculo dos pontos da funo
nesta.
Para tornar o procedimento de desenho da Plotter e
do grfico em si mais fcil, vamos calcular tudo em funo
da posio e do tamanho da rea de trabalho ou seja, determinamos em que pixis da rea grfica produzida pelo
InitGraph dever aparecer cada ponto e cada linha.

Contudo, como j foi feito no Passo 2, a nossa Plotter


tem dimenso varivel, definida pelo programador que utilizar a classe, pelo que o nosso trabalho no simplificado.

Comecemos pelo clculo da distncia entre as linhas


da grelha. Este clculo independente da posio da Plotter, mas depende directamente da dimenso e do zoom:

Contudo, para j, vamos apenas definir a propriedade


Zoom da classe e, para tal, criar um novo tipo de dados que
contenha os dados relativos a esta caracterstica da calculadora grfica.

Visto que a redefinio do Zoom implica uma alterao do grfico, um procedimento parte ser criado para
esta redefinio mais adiante.
PRIVATE
vZoom : TZoom;
PUBLIC
property Zoom : TZoom read vZoom;

Mantendo o zoom constante, medida que a


dimenso aumenta, a distncia entre as linhas
da grelha tambm aumenta.

Para cada um dos eixos, a distncia entre linhas da grelha


dada por:

Ora, temos de definir o tipo de dados TZoom. A Figura 6


representa os dados que devem estar presentes neste.
Por exemplo, para o eixo XX a frmula ser:

18

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
Como este clculo interno e ser necessrio para alguns
mtodos (bem como o clculo do centro), vamos declar-lo
como um procedimento privado. E como h uma distncia
para cada um dos eixos, vamos aproveitar a estrutura do
TPoint para o gravar:

self.Position.X;
end;
// centro em Y:
if (self.Zoom.YMin < 0) and
(self.Zoom.YMax > 0) then begin
self.vCenter.Y :=
round(self.Position.Y +
abs(self.Zoom.YMax) *
(self.DistBetweenGrid.Y /
self.Zoom.YScl));

PRIVATE
DistBetweenGrid : TPoint;
procedure CalcDistGridAndCenter;
Implementando este procedimento segundo a frmula infraapresentada:

end else begin


if (self.Zoom.YMin < 0) and
(self.Zoom.YMax < 0) then
self.vCenter.Y :=
self.Position.Y +
self.Size.cy
else self.vCenter.Y :=
self.Position.Y;
end;

PROCEDURE TPlotter.CalcDistGridAndCenter;
begin
// eixo XX:
self.DistBetweenGrid.X :=
Round(self.Zoom.XScl *
(self.Size.cx / (self.Zoom.XMax self.Zoom.XMin)));
// eixo YY:
self.DistBetweenGrid.Y :=
Round(self.Zoom.YScl *
(self.Size.cy / (self.Zoom.YMax self.Zoom.YMin)));
end;

Como se pode verificar, o clculo do centro deve ser feito a


posteriori j que este depende da distncia em pixis entre
as linhas da grelha previamente calculada.
6. Constantes necessrias

Falta acrescentar a este procedimento o clculo do centro. O


centro depende do Zoom, e poder no ser necessrio calcul-lo:

Agora que a base em termos de propriedades e valores necessrios est feita, e antes de se avanar para a criao dos construtores, podemos definir as constantes discutidas aquando a definio terica da classe.

Se o Zoom estiver definido tal que a janela esteja


toda na rea positiva do eixo XX (por exemplo, XMin
vale 2 e XMax vale 8), ento o centro estar fora da
rea e pode-se definir a coordenada X do centro como sendo a posio X da Plotter.

Recordando, as constantes sero as seguintes:


CONST
// Zoom:
ZoomStandard : TZoom =
(XMin:-10; XMax:10; XScl:1;
YMin:-10; YMax:10; YScl:1);
// Grelha:
DefaultGrid : TLineStyle =
(Color:DarkGray; Thickness:NormWidth;
Style:DashedLn; Visible:True);
// Eixos:
DefaultAxes : TLineStyle =
(Color:White; Thickness:ThickWidth;
Style:SolidLn; Visible:True);
// Linha de funo:
DefaultFunctionLine : TLineStyle =
(Color:Red; Thickness:ThickWidth;
Style:SolidLn; Visible:True);
// Cor de fundo:
DefaultPlotterBackColor : word = Green;

Tendo em conta esta condio, e sabendo que o centro pode ser calculado segundo a frmula que se segue, resta-nos
implement-lo em Pascal.

// centro em X:
if (self.Zoom.XMin < 0) and
(self.Zoom.XMax > 0) then begin
self.vCenter.X :=
round(self.Position.X +
abs(self.Zoom.XMin) *
(self.DistBetweenGrid.X /
self.Zoom.XScl));
end else begin
if (self.Zoom.XMin < 0) and
(self.Zoom.XMax < 0) then
self.vCenter.X :=
self.Position.X +
self.Size.cx
else self.vCenter.X :=

Estes valores podem ser alterados ao gosto do leitor:

19

Zoom padro:

XMin = -10

XMax = 10

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA

XScl = 1

YMin = -10

YMax = 10

YScl = -1

CONSTRUCTOR TPlotter.Create
(cPosition : TPoint; cSize : TSize;
cZoom : TZoom;
cGrid, cAxes, cFnLine : TLineStyle;
cBkColor : word); OVERLOAD;
begin
self.vPosition := cPosition;
self.vSize := cSize;
self.vZoom := cZoom;
self.Grid := cGrid;
self.Axes := cAxes;
self.FunctionLine := cFnLine;
self.vFunction := nil;
self.BackColor := cBkColor;
self.CalcDistGridAndCenter;
end;

Estilo padro da grelha:

Tipo de linha tracejada (dashed)

Espessura normal (1 pixel)

Cor cinzento escuro

Visvel sim

Estilo padro dos eixos:

Tipo de linha contnua (solid)

Espessura espessa (2 pixis)

Cor branco

Visvel sim

O construtor mais simples ir-se- servir do construtor completo, e ir atribuir aos restantes 5 parmetros os valores
padro definidos nas constantes:
CONSTRUCTOR TPlotter.Create
(cPosition : TPoint; cSize : TSize);
begin
self.Create(cPosition, cSize,
ZoomStandard, DefaultGrid,
DefaultAxes, DefaultFunctionLine,
DefaultPlotterBackColor);
end;

Estilo padro da linha da funo:

Tipo de linha contnua (solid)

Espessura espessa (1 pixis)

Cor vermelho

Visvel sim

No sero criados destrutores j que, para esta classe, bastar utilizar o Free, visto que esta herda da classe genrica
TObject.

Cor de fundo padro verde.

8. Mtodo Show desenho da Plotter

7. Construtores

Aps a criao dos construtores comea a fase de


desenho da Plotter na rea grfica e a criao dos mtodos
que redefinem as propriedades ReadOnly, j previamente
criadas. E a partir desta fase que comea realmente o uso
da unit Graph.

O meu objectivo no vai ser criar uma panplia de


construtores com todos os overloads possveis. Criarei o
construtor completo e, de seguida, criarei uma verso muito
mais simples. A partir destes ser fcil criar mais construtores basta recorrer directamente ao construtor completo.

Para mostrar a Plotter vamos utilizar um procedimento denominado Show:

O meu construtor completo ir receber 7 parmetros,


permitindo uma total personalizao da instncia da Plotter a
priori. O construtor mais simples ir receber apenas os primeiros 2 parmetros, que sero a posio e a dimenso.

PUBLIC
procedure Show;
Primeiramente temos de definir o modo de preenchimento e,
de seguida, devemos pintar a rea de trabalho da Plotter
com a cor de fundo definida aquando a criao da instncia
da classe:

PUBLIC
constructor Create
(cPosition : TPoint; cSize : TSize);
constructor Create
(cPosition : TPoint; cSize : TSize;
cZoom : TZoom;
cGrid, cAxes, cFnLine : TLineStyle;
cBkColor : word); overload;

PROCEDURE TPlotter.Show;
begin
SetFillStyle(SolidFill, self.BackColor);
Bar(self.Position.X, self.Position.Y,
self.Position.X + self.Size.cx,
self.Position.Y + self.Size.cy);

A implementao do construtor em si simples: simplesmente atribuem-se os parmetros s respectivas propriedades, e


fazem-se os clculos do Passo 5:

20

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
Constatamos dois novos mtodos que pertencem unit
Graph:

Mtodo & sintaxe

Mais uma srie de mtodos da unit Graph foram utilizados:

Descrio

Mtodo & sintaxe

Define o estilo de preenchimento de todos os


mtodos da famlia.
SetFillStyle(estilo,
cor);

Estilo do tipo Word, define o tipo de preenchimento, ou seja, qual o padro de preenchimento;
Cor do tipo Word, define qual a cor de fundo.

SetColor(cor);

Descrio
Define a cor das linhas de todos os mtodos da
famlia.
Cor do tipo Word, define qual a cor.
Define o estilo das linhas de todos os mtodos da
famlia.

SetLineStyle(estilo,
padro, espessura);

Preenche um rectngulo com o estilo definido pelo


SetFillStyle.

Estilo do tipo Word, define o estilo da linha;


Padro regra geral ignorado;
Espessura do tipo Word, define a espessura
da linha.

Bar(X1, Y1, X2, Y2);


(X1,Y1) canto superior esquerdo do rectngulo;
(X2,Y2) canto inferior direito do rectngulo.

Desenha uma linha entre dois pontos com o estilo


definido pelo SetLineStyle.
Line(X1, Y1, X2, Y2);
(X1,Y1) primeiro ponto;
(X2,Y2) segundo ponto.

No mtodo SetFillStyle recorreu-se a uma das 200 constantes da unit Graph SolidFill que define um preenchimento
slido e simples.

De referir que o contador utilizado, counter, do tipo


Integer.

De seguida deve-se desenhar a grelha e s depois os


eixos, isto porque, se a grelha for desenhada aps os eixos,
esta ir-se- sobrepor aos eixos, e a inteno dos eixos
estarem sobrepostos grelha.

Como se pode verificar, a distncia entre as linhas da


grelha fundamental para se saber onde a linha da grelha a
cada passo deve ser colocada como a distncia em pixis
entre cada linha depende no s do Zoom mas tambm da
dimenso da Plotter, coloca-se na prtica a importncia desta distncia.

Para desenhar a grelha necessitamos de uma estrutura de repetio, ou seja, um ciclo. Para tal, iremos utilizar
um ciclo Repeat Until.

Por fim, deve-se desenhar os eixos que so colocados em funo do centro do grfico, tambm previamente
determinado:

if self.Grid.Visible then begin


// linhas verticais:
SetColor(self.Grid.Color);
SetLineStyle(self.Grid.Style, 0,
self.Grid.Thickness);

if self.Axes.Visible then begin


SetColor(self.Axes.Color);
SetLineStyle(self.Axes.Style, 0,
self.Axes.Thickness);
Line(self.Center.X,
self.Position.Y, self.Center.X,
self.Position.Y + self.Size.cy);
Line(self.Position.X,
self.Center.Y, self.Position.X +
self.Size.cx, self.Center.Y);
end;

counter := round(self.Zoom.XMin);
repeat
Line(self.Center.X + counter *
self.DistBetweenGrid.X,
self.Position.Y, self.Center.X +
counter * self.DistBetweenGrid.X,
self.Position.Y + Self.Size.cy);
Inc(counter, 1);
until counter >= self.Zoom.XMax;

De notar o facto da grelha e dos eixos s serem desenhados caso tenham a propriedade Visible definida a True
caso contrrio, o seu desenho ignorado.

// linhas horizontais:
counter := round(self.Zoom.YMin);
repeat
Line(self.Position.X,
self.Center.Y - counter *
self.DistBetweenGrid.Y,
self.Position.X + self.Size.cx,
self.Center.Y - counter *
self.DistBetweenGrid.Y);

9. Mtodo Clear apagar a Plotter


Agora que se sabe preencher um rectngulo com o
mtodo Bar, o princpio do mtodo Clear simples: apagar a
rea de trabalho com a cor de fundo da rea grfica.
PUBLIC
procedure Clear;

Inc(counter, 1);
until counter >= self.Zoom.YMax;
end;

21

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
agora mesmo discutido, o Refresh no pode ser utilizado:

PROCEDURE TPlotter.Clear;
begin
SetFillStyle(EmptyFill, Black);
Bar(self.Position.X,
self.Position.Y,
self.Position.X + self.Size.cx,
self.Position.Y + self.Size.cy);
end;

PUBLIC
procedure Relocate(cNewPosition:TPoint);
procedure Relocate(cX,cY:LongInt);
overload;
Para facilitar o trabalho do programador, criamos um overload do mtodo principal em que se passam por parmetro as
coordenadas da nova posio ao invs de se passar as coordenadas com o tipo TPoint.

De referir que a constante EmptyFill utiliza a cor de fundo da


rea grfica, pelo que, qualquer que esta seja, o resultado
final ser sempre uma rea grfica limpa. Por defeito, o
segundo parmetro deve ser recebido, e por conveno utiliza-se a constante Black para este caso.

Implementando um destes mtodos, o outro pode-se


basear nesse:
PROCEDURE TPlotter.Relocate
(cNewPosition : TPoint);
begin
self.Clear;
self.vPosition := cNewPosition;
self.Show;
end;

10. Mtodo Refresh actualizao


Este mtodo, pblico, faz uma actualizao da Plotter. Este
mtodo til na medida em que h propriedades que podem
ser alteradas sem passar por mtodos controlados, pelo que,
para estas fazerem efeito, necessrio actualizar a Plotter.
PUBLIC
procedure Refresh;

PROCEDURE TPlotter.Relocate
(cX, cY : LongInt); OVERLOAD;
var NewPos : TPoint;
begin
NewPos.X := cX;
NewPos.Y := cY;
self.Relocate(NewPos);
end;

Este mtodo simplesmente limpa a actual Plotter e desenhaa toda do zero:


PROCEDURE TPlotter.Refresh;
begin
self.Clear;
self.Show;
end;

12. Mtodos para a funo

11. Mtodo Relocate relocalizao

Se modificarmos o Zoom ou a dimenso da Plotter,


as coordenadas dos pontos da funo vo mudar, pelo que,
ao alterar estas propriedades, temos de recalcular estes
pontos. Por isso, antes de implementar os mtodos Resize e
ReZoom, devemos implementar os mtodos que iro manipular a funo:

A partir deste momento, com os mtodos Show, Clear


e Refresh disposio e prontos a usar, torna-se deveras
fcil modificar as propriedades da Plotter e, por conseguinte,
modificar o desenho desta que est na rea grfica:
1)

Limpa-se o desenho da Plotter actual;

2)

Muda-se a propriedade desejada;

Receber (carregar) a funo: LoadFunction;

3)

Volta-se a desenhar a Plotter, j com as propriedades


desejadas.

Desenhar a funo: DrawFunction;


Limpar a funo da Plotter: ClearFunction;

Para algumas propriedades a limpeza pode ser efectuada mesmo aps a mudana da propriedade, pelo que o
mtodo Refresh pode ser utilizado para optimizar o cdigo.
Contudo, outras propriedades, como a posio, no podem
ter este tratamento ptimo: se mudarmos a posio antes de
limpar a rea grfica, o mtodo Clear vai efectuar a sua aco j com a nova propriedade de posio, pelo que parte ou
a totalidade do desenho da Plotter na antiga posio no
limpa. Desta forma, primeiro deve ser executado o Clear e s
alterada a propriedade para que aquele realize a sua aco
ainda na posio inicial.

Libertar os recursos da funo: DisposeFunction.


A nossa inteno que a Plotter receba uma funo
real e de varivel real por referncia (ou seja, por apontador), pelo que a nossa classe dever ter uma varivel, de
carcter privado, que guarde qual a funo com que vai
trabalhar:
PRIVATE
vFunction : TRealFunction;
vValuesOfFunction :
array [0..2000] of real;

Para comear vamos criar o mtodo Relocate, pblico, que ir relocalizar a Plotter numa nova posio. Como foi

Denota-se de imediato que os valores da funo vo ser


guardados num Array. Mais frente veremos como este ser

22

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
utilizado.
Um novo tipo de dados foi aqui introduzido, pelo que o vamos
definir. Tratando-se esta uma Plotter que trabalha com funes
reais de varivel real, ento estas devem ter um parmetro real
e devolver um valor real:
TYPE
TRealFunction=FUNCTION(x:real):real;
Primeiramente necessitamos de carregar a funo
(LoadFunction) e, neste processo, calcular os pontos na Plotter. Por uma questo de optimizao, s vamos calcular os
pontos estritamente necessrios e no todos os 2001 pontos
que o Array coloca ao nossos dispor.

Inc(counter, 1);
until counter >= self.Position.X +
self.Size.cx;
end;
Os dois contadores so os seguintes:

counter define em que ndice do Array vValuesOfFunction deve ser gravado o valor calculado;

abscissa define o valor da abcissa a cada pixel da


rea de trabalho da Plotter.

Para determinar o ponto da funo na Plotter, sigamos o


seguinte raciocnio:

PUBLIC
procedure LoadFunction
(fn:TRealFunction);

self.vCenter.Y - self.vFunction(abscissa)

Este mtodo deve:

Gravar a funo;

Calcular os pontos da funo. Para tal:

Calcular o valor real da funo atravs da abcissa;

Transformar este valor numa coordenada Y a ser


gravada em vValuesOfFunction;

Tendo em conta o centro do grfico, vamos andar


para trs ou para a frente deste consoante o valor
real da funo: isto definido atravs de uma subtraco;

Contudo, o valor real da funo deve ser multiplicado


por um factor que nos indique a verdadeira posio,
em pixis, do ponto. Assim sendo, se a distncia entre linhas da grelha est para a escala, ento 1 pixel
est para o factor que procuramos:

Este factor , ento:

Para este processo, o clculo deve entrar com o Zoom, a dimenso e o centro do grfico, para alm do valor real da funo a cada X. Implementando estes princpios, deveremos
chegar ao seguinte cdigo:

self.DistBetweenGrid.Y / self.Zoom.YScl
E, assim, temos o clculo do ponto da funo na Plotter.
Depois de carregar a funo, obviamente queremos que esta
seja desenhada, ou representada (DrawFunction).

PROCEDURE TPlotter.LoadFunction
(fn : TRealFunction);
var abscissa : real;
counter : integer;
step : real;
begin
// grava funo:
self.vFunction := fn;
// inicia contadores:
counter := self.Position.X;
abscissa := self.Zoom.XMin;
// define passo de incrementao:
step := self.Zoom.XScl /
self.DistBetweenGrid.X;

PUBLIC
procedure DrawFunction;
A funo s ser desenhada se a propriedade FunctionLine.Visible estiver definida a True, e s ser desenhada a
parte do grfico que estiver dentro da rea da Plotter, pelo
que este controlo ser feito dentro do prprio ciclo que ir
desenhar a funo, e esta anlise ter de ser, obviamente,
ponto a ponto. A vantagem de ter calculado os pontos
aquando o LoadFunction reside no facto de se evitarem mais
clculos no desenho da funo, bastando fazer o ouput das
linhas que unem os pontos.

repeat
// clculo do ponto:
self.vValuesOfFunction[counter]:=
self.vCenter.Y self.vFunction(abscissa) *
(self.DistBetweenGrid.Y /
self.Zoom.YScl);
// incrementa contadores:
abscissa := abscissa + step;

PROCEDURE TPlotter.DrawFunction;
var counter : integer;
begin
if self.FunctionLine.Visible
and not(self.vFunction=nil)
then begin
// define estilo da linha

23

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
SetLineStyle(self.FunctionLine.Style,
0, self.FunctionLine.Thickness);
// define cor
SetColor(self.FunctionLine.Color);
// desenha a funo:
for counter := self.Position.X to
(self.Position.X + self.Size.cx - 2)
do begin
{evita que o grfico seja desenhado
fora da rea da Plotter}
if not ((round(
self.vValuesOfFunction[counter+1]) <
self.Position.Y) or (round(
self.vValuesOfFunction[counter+1]) >
self.Position.Y + self.Size.cy))
then begin
//usa directamente vValuesOfFunction
Line(counter, round(
self.vValuesOfFunction[counter]),
counter+1, round(
self.vValuesOfFunction[counter+1]));
end;
end;
end;
end;

PUBLIC
procedure DisposeFunction
(cClearPlotter : boolean);
Visto que o tipo de dados de vFunction no mais
do que um apontador, definimos que esta vale NIL. Para
libertar os recursos podemos dar a opo de o grfico ser
tambm apagado da rea de trabalho ou no:
PROCEDURE TPlotter.DisposeFunction
(cClearPlotter : boolean);
var counter : integer;
begin
self.vFunction := nil;
for counter:=0 to 2000 do
self.vValuesOfFunction[counter]:=0;
if cClearPlotter then
self.ClearFunction;
end;
Desta forma, a Plotter fica pronta a receber uma nova
funo, tendo passado previamente por uma limpeza devida
de todos os recursos que, de outra forma, o mtodo LoadFunction no faria.
Temos ento os principais mtodos de manipulao
da funo criados, pelo que podemos continuar a construir
os mtodos que redefinem as propriedades grficas da Plotter.

Como ser bvio, grande parte deste cdigo o conjunto de todas as condies de controlo para o desenho da
funo dentro da rea. O verdadeiro acto de desenhar a
funo est quase no fim, aquando a utilizao do mtodo
Line.

13. Mtodo Resize redimensionar a Plotter

De seguida, poderemos querer limpar a funo


(ClearFunction), ou seja, voltar a ter a Plotter sem qualquer
funo desenhada.

Redimensionar a Plotter implica que a funo seja redesenhada, da j termos tratado de todos os mtodos relativos
manipulao da funo.

PUBLIC
procedure ClearFunction;

O mtodo Resize ter dois cabealhos:

Recebe um parmetro do tipo TSize;


Recebe dois parmetros largura e altura do tipo

Para isto, definimos a visibilidade a False, fazemos o


Refresh, e voltamos a definir a visibilidade a True. Voltamos
a definir a True porque, caso o programador queira fazer
DrawFunction mais tarde, teria de redefinir a visibilidade a
True a ordem para limpar a funo, e no mudar a sua
visibilidade. Apenas a mudamos para tirar proveito dos mtodos que j crimos at ao momento. Desta forma:

LongInt.
PUBLIC
procedure Resize(cNewSize:TSize);
procedure Resize(ccx, ccy:LongInt);
overload;
Como a alterao da dimenso implica uma nova
distncia entre as linhas das grelhas, bem como a mudana
do centro do grfico, estes devem ser recalculados. Do mesmo modo, a funo ter de se adaptar, pelo que a soluo
recarregar a funo fazendo um LoadFunction da funo que
a Plotter j tiver.

PROCEDURE TPlotter.ClearFunction;
begin
self.FunctionLine.Visible:=False;
self.Refresh;
self.FunctionLine.Visible:=True;
end;

PROCEDURE TPlotter.Resize
(cNewSize : TSize);
begin
self.vSize := cNewSize;
self.CalcDistGridAndCenter;
if not(self.vFunction = nil) then
self.LoadFunction(self.vFunction);

Por fim, vamos libertar os recursos ocupados pela


funo (DisposeFunction), deixando a Plotter sem qualquer
funo com que trabalhar.

24

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
self.Refresh;
end;

Vamos alterar algumas propriedades da Plotter para termos


um resultado diferente do das imagens iniciais.

PROCEDURE TPlotter.Resize
(ccx, ccy : LongInt); OVERLOAD;
var NewSize : TSize;
begin
NewSize.cx := ccx;

Segue, portanto, o cdigo do programa seguido de uma breve explicao.


PROGRAM Teste;
uses Graph,
CalcGraph,
SysUtils,
Windows;

14. Mtodo ReZoom redefinir o zoom


Como o zoom necessita de 6 parmetros, vamos criar
apenas um mtodo geral que recebe um parmetro do tipo
TZoom. Se se pretender criar um mtodo que receba os 6
argumentos totais relativos aos 6 dados do zoom, bastar
fazer o mesmo que os mtodos Resize e Relocate.

FUNCTION f(x:real):real;
begin
f := sqr(x)-8;
end;

PUBLIC
procedure Rezoom(cNewZoom : TZoom);

CONST
InitPos:TPoint=(X:10; Y:10);
InitSize:TSize=(cx:400; cy:200);
PosZoom:TZoom =
(XMin:-4; XMax:8; XScl:2;
YMin:-9; YMax:2; YScl:1);
VAR Driver, Modus : SmallInt;
Plot : TPlotter;

O zoom, tal como a dimenso, obriga a um reclculo da distncia entre as linhas da grelha e do centro do grfico, bem
como ao reclculo dos pontos da funo.
PROCEDURE TPlotter.ReZoom
(cNewZoom : TZoom);
begin
self.vZoom := cNewZoom;
self.CalcDistGridAndCenter;
if not(self.vFunction = nil) then
self.LoadFunction(self.vFunction);
self.Refresh;
end;

BEGIN
TRY
TRY
// inicia rea grfica
DetectGraph(Driver, Modus);
InitGraph(Driver, Modus, '');
// cria Plotter
Plot:=
TPlotter.Create(InitPos,InitSize);
// altera propriedades
Plot.BackColor:=Blue;
Plot.Grid.Color:=Black;
Plot.Axes.Color:=Yellow;
Plot.Axes.Thickness:=NormWidth;
// desenha a Plotter
Plot.Show;
// carrega a funo
Plot.LoadFunction(@f);
// altera cor da funo
Plot.FunctionLine.Color:=LightRed;
// desenha funo
Plot.DrawFunction;

Criao de um pequeno programa de teste


De facto j terminmos a construo da nossa classe!
Reunindo toda a informao e todo o cdigo na unidade CalcGraph, ficamos com uma unit pronta-a-usar.
A classe criada pode ser melhorada, bem como a
unidade. O intuito deste artigo no era criar uma classe
altamente profissional, mas sim criar uma Plotter bsica e
com os mtodos mais bsicos. Esta classe est passvel a
sofrer bugs no seu uso pois no fizemos, por exemplo, o
controlo dos valores do zoom (XMax deve ser maior do que
XMin, por exemplo) nem de outros parmetros. De modo a
tornar a classe mais segura, o leitor poder, e dever, acrescentar-lhe condies e mtodos de segurana e de controlo.
Contudo, no se esquea de deixar um certo nvel de liberdade para o programador final.

readln; // pausa
Plot.Resize(700,400);
Plot.ReZoom(PosZoom);
Plot.DrawFunction;
EXCEPT
ON ex:exception do begin
MessageBox(0,@ex.message[1],'Erro!',
MB_ICONASTERISK);
end;
END
FINALLY
write('FIM.'); readln;
// liberta recursos da Plotter

Agora vamos testar a unidade criada. No vou criar um programa que teste a fundo a unidade. Farei apenas um pequeno programa que cria e personaliza uma Plotter, carrega
uma funo, desenha-a e, depois, encerra o programa.
A funo ser, relembrando o incio do artigo:

25

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
Plot.Free;
CloseGraph;
END;
END.

A Figura 7 mostra a importncia da posio e do tamanho da


Plotter: todo o fundo negro a rea grfica gerada pelo InitGraph que, no caso desta figura, foi de 1280x800.

Neste programa crimos uma Plotter atravs da varivel


Plot, ou seja, uma instncia da classe TPlotter. Os seus valores padro para as vrias propriedades foram alterados:

Contudo foi feita uma pausa no programa e depois foram


aplicados os mtodos Resize e ReZoom. Como estes mtodos no redesenham a funo, fazemos de novo o output
desta, e obtemos o resultado representado pela Figura 9.

A cor de fundo foi definida a azul, em vez da predefinio (verde);

A cor da grelha foi definida a preto e no a cinzentoescuro;

A cor dos eixos passou a ser amarela, e a sua espessura passou a ser de 1 pixel;

A cor da funo passou para vermelho-vivo


(LightRed) em vez de vermelho-escuro (Red).
Aps a alterao destas propriedades, o resultado
final (Figuras 7 e 8) diferente do inicialmente representado
na Figura 1, que seria o output gerado caso se mantivesse a
predefinio.

Figura 9 Output gerado pelo programa de testes aps a pausa.

Notamos a adaptao realizada por todos os clculos auxiliares, privados, na alterao das propriedades de zoom e dimenso.
Resumo
Com este artigo recorremos unit Graph para conceber uma Plotter, tendo a sua implementao sido feita com o
uso do OOP, ou seja, o paradigma da Programao Orientada aos Objectos.
Desta forma ser possvel ter, numa s rea grfica, vrias
Plotters com caractersticas diferentes e a trabalhar com
funes diferentes, mas totalmente independentes umas das
outras para tal, bastar criar diferentes instncias da classe
TPlotter.

Figura 7 Output gerado pelo programa de testes antes da pausa.

Apesar de no se ter aprofundado a unidade na qual nos


baseamos, ficou claro que com pouco se pode fazer muito, e
com meia dzia de mtodos da Graph uma Plotter totalmente funcional e personalizvel foi construda.
Destacam-se, ento, os mtodos Bar, Line, SetFillStyle e
SetLineStyle, assim como as constantes NormWidth, ThickWidth, EmptyFill, SolidFill, SolidLn e DashedLn.

Figura 8 Pormenor da Plotter criada no programa antes da pausa de realar as propriedades alteradas.

AUTOR
Escrito por Igor Nunes
Curioso na rea das tecnologias e em especial da programao, tem um grande interesse pelas tecnologias de ensino da
Texas Instruments e pelo TI-Basic, alm de ter uma saudvel relao com o Pascal. conhecedor de outras linguagens de
programao, como VB.NET. No P@P, membro da Wiki Team e Moderador Local dos quadros de Pascal e Delphi/Lazarus.
Escreveu o novo Tutorial de Pascal, recentemente disponibilizado em PDF.

26

A PROGRAMAR
Formulrios em HTML5
do number:

HTML5 a mais recente


linguagem utilizada para a
criao de pginas web.
Infelizmente ainda no
suportada por todos os navegadores disponveis no
mercado. De momento, o
Opera, o nico que consegue dar suporte a todos
os novos atributos e elementos dos formulrios que

<input type=range name=point min=1 max=10/>


Aps abordar os elementos, chegou a altura de falar nos
novos atributos:

Autocomplete - se colocado como "on", ele habilita o


autocompletar nos campos.

Novalidate - um atributo booleano. Quando se encontra ativo, especifica que o formulrio no deve ser
validado quando submetidos.

o HTML5 nos trouxe.

Autofocus - Foca o campo no carregamento da pgi-

Sem mais demoras, esto enumerados a baixo os novos


elementos:

color - mostra uma palete de cores

date - mostra no campo um calendrio que permite


navegar entre meses e anos

datetime - configura data e hora

datetime-local - data e hora local

email - endereo de e-mail

month - mostra no campo um calendrio que permite


navegar entre meses e anos

number - so setas para aumentar e diminuir nmeros, limitando nmero mximo e mnimo

range - boto deslizante

search - para pesquisas

tel - nmeros de telefones

time - para mostrar a hora

url - endereo de url

week - mostra no campo um calendrio que permite


navegar entre meses e anos

na.

Formaction - Substitui o atributo forma de ao. Deve ser uma URL vlida que define para onde enviar
os dados quando o formulrio submetido.

Formmethod - Substitui atributo do formulrio mtodo. Define o mtodo HTTP para o envio de dados
para o URL de ao. Aceita "get", "post", "put" e
"delete".

Formnovalidate - Substitui atributo "novalidate" no


formulrio. Se for colocado como "true", esse campo
no ser validado quando for submetido.

Formtarget - Aceita "blank", "_self", "_parent" e


"_top".

Width e Height - Definem largura e altura do campo


do formulrio, respetivamente. Podem-se utilizar medidas em percentagem e pixels.

List - Referencia um elemento DataList. Caso tenha


um elemento <li> com determinado ID, referencie
esse ID.

Multiple - Permite que o utilizador selecione mais de


um item.

Pattern - Permite criar restries por expresses regulares.

Placeholder - Define ajuda para o usurio preencher

A sua implementao feita da seguinte forma:

o campo com os dados corretos.

<input type=elemento name=whatever/>

Step - Utilizado juntamente com os tipos "datetime",

No elemento range e number j temos de adicionar dois


campos: min e max para atribuir o valor mnimo e mximo do
boto deslizante no caso do range e setas para aumentar e
diminuir nmeros , limitando o seu mximo e mnimo no caso

"time", "date", "datetime-local", "month", "week",


"number", "range", definindo um intervalo numrico

28

A PROGRAMAR
FORMULRIOS HTML5
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<link rel="stylesheet" href="css/style.css" />
<title>Formlario HTML5</title>
</head>
<body>
<form id=payment onsubmit=
"return validateFormOnSubmit(this)" action="">
<fieldset id="1"><legend>Dados</legend>
<ol><li>
<label for=name>Name</label>
<input id=name name=name type=text
placeholder="Primeiro e Ultimo Nome" required
autofocus>
</li><li>
<label for=email>Email</label>
<input id=email name=email type=email
placeholder="example@gmail.com" required>
</li><li>
<label for=phone>Telefone</label>
<input id=phone name=phone type=tel
placeholder="+351987654321" required>
</li></ol>
</fieldset>
<fieldset id="2"><legend>
Morada de Entrega</legend>
<ol><li>
<label for=address>Morada</label>
<textarea id=address name=address rows=5
required placeholder="Insira a Sua Morada">
</textarea>
<p></p></li><li>
<label for=postcode>Cdigo Postal</label>
<input id=postcode name=postcode type=text
required placeholder="0000-000 Localidade">
</li><li>
<label for=country>Pas</label>
<input id=country name=country type=text required>
</li></ol>
</fieldset>

Legend especifica qual o subttulo do fieldset.

O label for indica qual o elemento a que a label est ligada.


<fieldset id="3"><legend>Detalhes Carto</legend>
<ol><li>
<fieldset><legend>Tipo Carto</legend>
<ol><li>
<input id=visa name=cardtype type=radio>
<label for=visa>VISA</label>
</li><li>
<input id=paypal name=cardtype type=radio>
<label for=paypal>PayPal</label>
</li><li>
<input id=mastercard name=cardtype type=radio>
<label for=mastercard>Mastercard</label>
</li></ol>
</fieldset>
</li><li>
<label for=cardnumber>Numero Carto</label>
<input id=cardnumber name=cardnumber type=
number required>
</li><li>
<label for=secure>Cdigo Pessoal</label>
<input id=secure name=secure type=number
required>
</li><li>
<label for=namecard>Nome do Carto</label>
<input id=namecard name=namecard type=text
placeholder="Nome igual ao do Carto" required>
</li></ol>
</fieldset>
<fieldset>
<button type=submit>Enviar</button>
</fieldset>
</form>
</body>
</html>

Nesta parte deixo o cdigo de exemplo dum pequeno formulrio em HTML5, incorporando alguns atributos e elementos
abordados na pagina anterior. Esta pgina contem o cdigo
HTML.
No head definimos o charset que a codificao dos caracteres, indicamos qual o titulo para a nossa pgina e carregamos a folha de estilo CSS.
A quo do envio do formulrio, este ser validado por JavaScript, na funo validateFormOnSubmit.
Fieldset a tag utilizada para agrupar elementos relacionados dentro duma form.
O placeholder faz com que aparea um texto predefenido
antes de se preencher o campo. Autofocus faz com que o
campo seja focado com o cursor, pronto para escrever. O
required, a quo da validao do formulrio, faz com que s
deixe validar caso o campo esteja preenchido.

Ao definir type=radio em cada input da list, fazemos com


que s seja possvel selecionar um, neste caso, um tipo de
carto para o pagamento.

29

A PROGRAMAR
FORMULRIOS HTML5
Comeamos por declarar o charset, j bordado anteriormente o seu significado na pagina HTML.
Declaramos que no existe margin, que o espao a volta
do elemento e o padding que o espao dentro da margin a
volta do contedo.
Com a utilizao do elemento number obtemos setas laterais para o incremento do valor preenchido na label.

Dentro do body damos margem a esquerda e direita automticas, definimos a largura, fonte do texto e damos um padding de 20px.

The last but not the least, temos o nosso submit button. Antigamente declarado como input type=button.

O nosso formulrio tem uma border-radius que so os cantos redondos em torno dele, neste caso de 5px.

Chegou agora a parte de tratar-mos da CSS para termos o


nosso formulrio mais bonitinho. 2 paginas a seguir esta
demonstrada a diferena.
@charset "utf-8";
/* CSS Document - style.css*/
html, body, h1, form, fieldset, legend, ol, li
{margin: 0;padding: 0;}
body {margin-left: auto;margin-right:auto; width:
440px;background: #ffffff;color: #111111;fontfamily: Georgia, "Times New Roman", Times, serif;padding: 20px;}
form#payment {background: #9cbc2c;-moz-borderradius: 5px;-webkit-border-radius: 5px;borderradius: 5px;padding: 20px;width: 400px;}
form#payment fieldset {border: none;marginbottom: 10px;}
form#payment fieldset:last-of-type {marginbottom: 0;}
form#payment legend {color: #384313;font-size:
16px;font-weight: bold;padding-bottom: 10px;textshadow: 0 1px 1px #c0d576;}
form#payment fieldset fieldset legend {color:
#111111;font-size: 13px;font-weight: normal;padding-bottom: 0;}
form#payment ol li {background:
#b9cf6a;background: rgba(255,255,255,.3);bordercolor: #e3ebc3;border-color: rgba
(255,255,255,.6);border-style: solid;borderwidth: 2px;-moz-border-radius: 5px;-webkit-border
-radius: 5px;border-radius: 5px;line-height:
30px;list-style: none;padding: 5px 10px;marginbottom: 2px;}
form#payment ol ol li {background: none;border:
none;float: left;}
form#payment label {float: left;font-size:
13px;width: 110px;}
form#payment fieldset fieldset label {background:
none no-repeat left 50%;line-height:
20px;padding: 0 0 0 30px;width: auto;}
form#payment label[for=visa] {background-image:
url(../img/visa-icon.png);}
form#payment label[for=paypal] {background-image:
url(../img/paypal-icon.png);}
form#payment label[for=mastercard] {backgroundimage: url(../img/mastercard-icon.png);}
form#payment fieldset fieldset label:hover
{cursor: pointer;}

Aqui declarado o texto-shadow que aplica uma sombra


por baixo do texto que afetado, uma propriedade do CSS3.
O primeiro valor corresponde a posio para a direita, o segundo a posio para baixo, o terceiro a flocosidade
ou fuzziness e por ultimo temos a cor da sombra.

List-style especifica o tipo de marcador utilizado antes de


cada elemento da lista.

O float serve para alinhar horizontalmente um elemento,


neste caso, a esquerda (left). Tambm pode ser centrado
(center), alinhado a direita (right), herdar (inherit) ou no ser
alinhado (none).

Line-height utilizado para especificar a altura da linha.

Background-image define uma ou mais imagens para o


elemento.
Quando o rato para por cima dum certo elemento, e queremos mudar o cursor, utilizamos cursor:pointer para mudar o
tipo de cursor a ser mostrado, neste caso o
Quando o rato para por cima dum certo elemento, e
queremos mudar o cursor, utilizamos cursor:pointer
para mudar o tipo de cursor a ser mostrado, neste
caso o apontador.
form#payment input:not([type=radio]), form#payment
textarea {background: #ffffff;border: none;-mozborder-radius: 3px;-webkit-border-radius: 3px;khtml-border-radius: 3px;border-radius: 3px;font:
13px Georgia, "Times New Roman", Times, se-

30

A PROGRAMAR
FORMULRIOS HTML5
error = "No introduziu um email.\n";
} else if (!emailFilter.test(tfld)) {
fld.style.background = 'Yellow';
error = "Introduza um email vlido.\n";
} else if (fld.value.match(illegalChars)) {
fld.style.background = 'Yellow';
error = "O endereo de email contem caracteres invlidos.\n";
} else {
fld.style.background = 'White';
}
return error;
}

rif;outline: none;padding: 10px;width: 200px;}


form#payment input:not([type=submit]):focus,
form#payment textarea:focus {background:
#eaeaea;}
form#payment input[type=radio] {float:
left;margin-right: 5px;}
form#payment button {background: #384313;border:
none;-moz-border-radius: 20px;
-webkit-borderradius: 20px;khtml-border-radius: 20px;borderradius: 20px;color: #ffffff;display: block;font:
18px Georgia, "Times New Roman", Times, serif;letter-spacing: 1px;padding: 7px 25px;textshadow: 0 1px 1px #000000;text-transform: uppercase;width: 126px;margin-left: auto;margin-right:
auto;}
form#payment button:hover {background:
#1e2506;cursor: pointer;}

Posto tudo o que visvel para o utilizador, temos tambm


de fazer umas validaes por trs dos dados inseridos. Neste caso vou dar um pequeno exemplo para validao de
email, numero de telefone e se existem campos por preencher. Nestas 2 paginas est demonstrado o cdigo com uma
breve explicao das funcionalidades.

Pseudo-classe :not engloba todos os outros elementos fora


daquele input, neste caso radio, lhes sejam atribudos os
valores declarados.

Focus utilizado quando um elemento esta a ser alvo duma


insero por parte do utilizador.

Declarada a varivel reason que guardar todos os erros


das funes de validao do formulrio.
Reason += validate... acrescenta os erros relatados.

Display define como um elemento de HTML deve ser mostrado, neste caso em bloco para ter espao em cima e por
baixo dele.

Caso o reason tenha algum contedo, mostra os erros e no


deixa a validao prosseguir.

Text-transform transforma todos os caracteres introduzidos,


neste caso em maisculas (uppercase).

Caso no tenha contedo, a validao est terminada e o


formulrio pode prosseguir.

Validao JavaScript
Validao do email

function validateFormOnSubmit(theForm) {
var reason = "";
reason += validateEmail(theForm.email);
reason += validatePhone(theForm.phone);
reason += validateEmpty(theForm.from);
if (reason != "") {
alert("So necessrias correes:\n" +
reason);
return false;
}
return true;
}
function validateEmail(fld) {
var error = "";
var tfld = trim(fld.value);
var emailFilter = /^[^@]+@[^@.]+\.[^@]
*\w\w$/;
var illegalChars = /[\(\)
\<\>\,\;\:\\\"\[\]]/;
if (fld.value == "") {
fld.style.background = 'Yellow';

Declarada a varivel error que guarda os erros encontrados.


trim(fld.value) retira os espaos em branco presentes.
emailFilter declara quais os caracteres possveis para um
email.
illegalChars declara quais os caracteres invlidos do email.
Neste exemplo, o backgroud do fiel tornado amarelo para
se perceber melhor onde est o erro
Se estiver a branco, guarda o erro que no introduziu um
email.
Testa se contem caracteres para alm dos possveis declarados.
Caso encontre um caracter ilegal, emite a mensagem que
guardada em error.

31

A PROGRAMAR
FORMULRIOS HTML5
Se no encontrar erros, deixa o fundo da field em branco.

Validao do numero de telefone

Se encontrar erros, retorna-os onde sero visveis atravs do


reason.
Varivel stripped - substitui quaisquer caracteres ilegais por
um espao em branco.

function validatePhone(fld) {
var error = "";
var stripped = fld.value.replace(/[\(\)\.\\ ]/g, '');

Se vazio, reporta o erro de no insero de numero de telefone.

if (fld.value == "") {
error = "No introduziu um numero de
telefone.\n";
fld.style.background = 'Yellow';
} else if (isNaN(parseInt(stripped))) {
error = "O telefone contem caracteres
ilegais.\n";
fld.style.background = 'Yellow';
} else if (!(stripped.length == 6
|| stripped.length == 7)) {
error = "O telefone tem o tamanho errado.
Verifique se introduziu o indicativo.\n";
fld.style.background = 'Yellow';
}
return error;

Colorizao do background no field com erro.


Lugar onde os caracteres invlidos so validados. Caso contenha algum caracter invlido emitido o erro.

Caso o tamanho do numero de telefone seja de 6 ou 7 caracteres, mencionado o possvel esquecimento do indicativo da zona.
Quaisquer erros existentes no formulrio so retornados ou a
varivel vai em branco caso no contenha erros.

}
function validateEmpty(fld) {
var error = "";
if (fld.value.length == 0) {
fld.style.background = 'Yellow';
error = "O espao requerido no tem
contedo.\n"
} else {
fld.style.background = 'White';
}
return error;
}

Validao do preenchimento das fields


Verifica se o valor dentro da field tem um tamanho de 0
(zero) caracteres. Caso tenha, reportado o erro que necessrio preencher esse campo .

Mais uma vez devolvido o erro, caso existente. necessrio fazer o return no final de cada funo de validao.

32

A PROGRAMAR
FORMULRIOS HTML5

AUTOR
Escrito por Nelson Belo Lima
Frequenta o CET Tecnologias de Programao de Sistemas de Informao na Escola Superior de Tecnologia e Gesto do
Instituto Politcnico de Viana do Castelo. Antigo Tcnico de Mecatrnica Automvel e Mecnico Perito na Citroen, nunca
perdeu a paixo pela informtica e foi ao longo do tempo acompanhando de perto o seu desenvolvimento. Ultimamente mais
dentro desta rea tecnolgica devido ao percurso escolar e extraescolar.
http://www.portugal-a-programar.pt/user/25616-nelsonbelolima/

33

A PROGRAMAR
SEO Search Engine Optimization Introduo parte II
entender o que irei falar hoje.

Na edio n. 34 da Revista Programar, que foi disponibilizada em Abril, mais concretamente na primeira parte desta
Introduo ao SEO, fiz uma breve abordagem ao conceito de
Search Engine Optimization com o intuito de desmistificar
um assunto que para muitos ainda parece confuso, mas que
aos poucos, e espero poder contribuir para esse efeito, vai
sendo um tema cada vez mais claro e importante para todos os Webmasters/Webdesigners.

Esta segunda parte pretende encerrar a parte introdutria


sobre o SEO e apresentar algumas das ferramentas e restantes conceitos que iremos aprofundar nos artigos seguintes desta srie.

Na primeira parte j percebemos que os motores


de busca na internet so grandes fontes de trfego para os nossos sites e tendo em conta
essa importncia que o SEO ganha fora nos
dias que correm. Para os leitores que ainda no
tiveram a oportunidade de ler esse artigo, sugiro
que o faam em primeiro lugar e s depois devero ler este, tornando-se assim mais fcil de

ENIGMAS DO C#: AVALIAO DA LISTA DE ARGUMENTOS


por Paulo Morgado
Enigma
Dado o seguinte mtodo:
int a = 0;

E os seguintes mtodos:

M(++a, ++a, ++a);


private static void M(
int x = 10,
int y = 20,
int z = 30)
{
Console.WriteLine(
"x={0}, y={1}, z={2}", x, y, z);
}

M(++a, z: ++a);
Qual o resultado do seguinte cdigo?

Veja a resposta e explicao na pgina 56

34

A PROGRAMAR
SEO SEARCH ENGINE OPTIMIZATION INTRODUO PARTE II
natura pode ser encontrada nos logs dos Servidores Web,
atravs do header do protocolo HTTP:

O que so os Bots, Spiders ou Crawlers


No podemos falar em optimizar os nossos portais para os
motores de busca sem primeiro conhecer os bichinhos que
os visitam e por sua vez os indexam, atribuindo-lhes um ranking. Eles so dos mais importantes e crticos visitantes que
os nossos sites recebem, pelo que lhes devemos dar o mximo de ateno se queremos ter sucesso nesta rea. Estes
Spiders, Bots e Crawlers (significam todos a mesma coisa)
so mecanismos automatizados de software, que varrem a
Internet (Web teia da o termo spider: aranha) e catalogam os sites e pginas por onde vo passando. Nem todos
os spiders so bons, pois alguns dos que respeitam menos
as normas e protocolos, podem catalogar e indexar alguns
contedos que ns no pretendamos. Os bons crawlers so
os que respeitam a norma REP Robots Exclusion Protocol
(veremos mais frente nesta srie o que este protocolo e
como tirar partido dele num site). De uma forma geral podemos percepcionar as passagens destes agentes pelos nossos sites atravs dos logs (relatrios) dos nossos Servidores
Web.

GET / HTTP/1.1
Host: www.XXXXXXXXXX.pt
Connection: Keep-alive
Accept: */*
From: googlebot(at)googlebot.com
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1;
+HTTP://www.google.com/bot.html)
Accept-Encoding: gzip,deflate
Neste exemplo extrado de um log file, podemos visualizar
que o Googlebot fez um pedido para indexar a raiz do nosso
site e que ele suporta a compresso gzip, uma forma de optimizar o trfego web, comprimindo os dados transferidos entre o Servidor Web e o cliente.
Do lado da concorrncia ao Google, o crawler da Yahoo
chama-se Slurp e o do motor de busca da Microsoft, o Bing,
o seu spider apelida-se de MSNBot, tendo ambos comportamentos semelhantes, se bem que os algoritmos de indexao so diferentes.
Contudo a tecnologia dos Web-spiders no perfeita. Algumas vezes estes no conseguem indexar todos os contedos de uma pgina ou site (chama-se a isso os Search Engine Traps, ou armadilhas), devido tecnologia com que
estes esto inseridos no site, como por exemplo ficheiros em
Flash, JavaScript, texto em imagens etc. Iremos tambm
alertar e aconselhar os leitores para estes problemas, que
em muito podem afectar a optimizao de um website, ao
longo dos prximos artigos.
Contudo o campo de trabalho destes bots no um campo
infinitamente aberto. Pelo menos para os que respeitam o
protocolo REP. Existe tambm a possibilidade de ns proibirmos o acesso dos crawlers ao nosso site, ou a determinadas
zonas deste, como forma de impedirmos que determinados
contedos que desejamos serem privados, surjam nos resultados dos motores de busca, algo muito comum nos dias de
hoje e que infelizmente gera algumas surpresas desagradveis, como por exemplo quando pesquizamos na Web e damos de caras com informao a nosso respeito, num resultado de um motor de busca, por este estar disponvel num
website e os seus webmasters no terem tido o cuidado de
restringir o acesso dos motores de busca a esse contedo.
Lembrem-se que at o contedo escrito de um ficheiro PDF,
como por exemplo a pauta das notas de uma determinada
Cadeira da Faculdade, pode ser indexado por um motor de
busca, caso este possua permisses para tal, e posteriormente disponibilizado para toda a internet atravs dos SERPs (search engine result pages).

Existem vrios tipos de Web-spiders, que podemos conhecer


mais em detalhe no endereo: http://www.user-agents.org/.
Estes visitam os nossos sites de tempos a tempos, dependendo do algoritmo do motor de busca que os envia ao nosso site, assim como da relevncia do nosso contedo. Eles
no visitam um site apenas uma vez, mas vo voltando
medida que detectam alteraes nele, ou novos contedos.
Todo esse mecanismo pode ser definido por ns, como iremos aprender, ou ser deixado em modo automtico e gerido de forma independente pelos motores de busca.

Como j deu para perceber, os spiders no indexam apenas


ficheiros HTML, PHP, ASP etc., mas j vasta a quantidade
de tipos diferentes de ficheiros que os motores de busca

Uma das aranhas mais famosa da grande teia que a internet a Googlebot, a Web-spider da Google. A sua assi-

35

A PROGRAMAR
SEO SEARCH ENGINE OPTIMIZATION INTRODUO PARTE II
conseguem ler e indexar: PDF, DOC, XLS, PPT, e muitos
outros tipos de ficheiros, so j facilmente indexveis e os
seus contedos percorridos pelos bots dos motores de busca.

tores de busca. No entanto nunca conseguimos saber como


que essas frmulas realmente funcionam, tornando-se
difcil afinar o nosso site para atingir rankings mais elevados.
No entanto so disponibilizadas por estes as linhas mestras
de orientao sobre as formas de melhorar um ranking de
um site e que nos vo elucidando de qual o caminho a seguir. Outra forma de controlar todo esse processo de optimizao, que contnuo, ir seguindo o desempenho dos nossos sites, atravs de ferramentas que iremos apresentar e
utilizar, como o Google Analytics (www.google.com/
analytics), ou o Statcounter (www.statcounter.com), sendo
estas as mais populares das inmeras nossa disposio,
umas pagas e outras gratuitas. Se a performance se degradar, sinal que no estamos a utilizar a estratgia mais correcta. Nos prximos artigos irei explicar como utilizar estas
ferramentas e outras ferramentas e tirar o mximo partido
delas, no processo de optimizao dos nossos sites.

Como os spiders lm os nossos sites


Os Webspiders no so humanos confinados numa enorme
sala cheia de computadores ligados Internet e que catalogam manualmente os sites que vo visitando. Estes bots so
mecanismos de software automatizados que varrem a internet, saltando de link em link, sendo a viso que eles tm de
um site um pouco diferente da nossa.
De acordo com a ferramenta Search Engine Spider Simulator, um simulador disponibilizado gratuitamente no site
www.webconfs.com, esta por exemplo a viso (parcial
apenas uma parte do texto gerado) que um spider tem do
site www.portugal-a-programar.org:
Spidered Text :
Portugal-a-Programar Ir para contedo Twitter Facebook Google + Entrar Registe-se Pesquisa Avanado Pesquisar seco: FrumMembrosHelp Files
Blog Downloads Calendrio Ver Novo Contedo Blog
Frum Downloads Calendrio Membros Revista PROGRAMAR Wiki Planeta IRC Mais Javascript Desactivado
Tem actualmente o javascript desactivado. Diversas
funcionalidades podem estar indispon-veis. Por
favor active o javascript para ter acesso a todas
as funcionalidades. Em Destaque Revista PROGRAMAR Edio N 35 Junho 2012 Publicado por jpaulino
em Revista PROGRAMAR, 08 Junho 2012 1401 visualizaes Nesta edio continuaremos tambm a
premiar os autores dos trs melhores artigos, dado
o sucesso nas edies anteriores. E os leitores
devem dar a sua opinio para que possamos premiar
correctamente. Para isso vote em http://tiny.cc/
ProgramarED35_V Assim nesta edio trazemos at
si, como... Ler o resto desta entrada 1 Comentrios Alternar Bem-vindos ao Portugal-a-Programar
Bem-vindos ao Portugal-a-Programar

Outro factor que est constantemente a baralhar o universo


de fieis seguidores da religio SEO, que os to badalados
algoritmos esto tambm em constante mudana e aperfeioamento, pelo que convm estar atento e seguir as ltimas
modas. Um site optimizado para as regras de hoje, pode
estar menos optimizado no ano seguinte. Alm disso aconselhvel que verifiquemos o ranking do nosso site regularmente, de forma a detectarmos alteraes menos positivas
no nosso ranking.

Como percebemos facilmente, apenas texto o que os spiders extraem dos sites. Todo o CSS, imagens e outras tcnicas de embelezamento esttico de um site so cortadas desta interpretao do nosso contedo. Onde ns encontramos
caracteres especiais, isso no se torna um problema para o
crawler, pois possuem algoritmos que os convertem em texto
correcto, na medida em que as pginas HTML possuem no
cabealho as indicaes relativas codificao do texto, que
podem variar de pas para pas.

Qual o interesse de se atriburem rankings s pginas


web? A resposta simples, porque as pessoas quando pesquisam algo num motor de busca, esperam encontrar o que
procuram! Se no existisse um processo de seleco em
que os melhores sites ficam mais bem posicionados, a experiencia do utilizador num motor de pesquisa seria pssima.
O algoritmo do Google para atribuio de ranking a uma pgina Web chama-se PageRank.

Rankings dos motores de busca


aqui que o SEO entra um pouco no domnio do esotrico.
Sabemos e lemos em tudo o que livro sobre o tema, que
os rankings so definidos atravs de algoritmos ultrasecretos e sofisticados das empresas proprietrias dos mo-

De acordo com uma prpria definio antiga da Google

36

A PROGRAMAR
SEO SEARCH ENGINE OPTIMIZATION INTRODUO PARTE II
(2005), PageRank :

10 o santo Gral do SEO, onde poucos sites conseguem


chegar. Como podem ver pela imagem seguinte, nem o portal www.google.pt consegue atingir essa meta, embora seja
uma das pginas mais utilizadas no nosso pas:

PageRank is a link analysis algorithm that assigns a numerical weighting to each element of a hyperlinked set of documents, such as the World Wide Web, with the purpose of
measuring its relative importance within the set. The algorithm may be applied to any collection of entities with reciprocal quotations and references. The numerical weight that it
assigns to any given element E is also called the PageRank
of E and denoted by PR(E).
Que em Portugus significa que o PageRank um algoritmo
de anlise de links que atribui um peso numrico a cada elemento de um conjunto de documentos interligados por links.
Este algoritmo pode ser aplicado a uma coleco de entidades com referncias reciprocas. O peso numrico que atribudo ao elemento E, tambm chamado de PageRank de
E ou PR(E).

Actualmente, e depois de muitas mexidas por parte da Google, muitos so os factores que levam ao clculo deste nmero. No certo nem sabido como que a Google atribui
esta pontuao, mas este algarismo o resultado de uma
equao composta por mltiplas variveis, cada qual com o
seu peso, como por exemplo o nmero de links de qualidade
que existem para a nossa pgina, riqueza de keywords, rapidez e desempenho do servidor, etc. etc. Fiquem descansados que entraremos em detalhe em cada um deles, em prximos artigos. Outra mensagem que gostaria que retivessem
que este nmero no esttico e que varia temporalmente. Umas vezes a Google deixa passar um ano sem lhe mexer, sendo que em outras o altera mensalmente. No sejamos fundamentalistas do PageRank! Este nmero deve
ser encarado como um barmetro, servindo apenas para
irmos monitorizando o desempenho SEO do nosso site.

Em termos mais abstractos, o PageRank (PR) uma aferio muito importante da popularidade que determinada pgina da Internet possui, numa escala de 0 a 10 em que 10
significa o mais importante ou de alta popularidade.
Podemos tambm pensar em PR como um conjunto de votos agregados de todas as pginas que linkam (hiperligam)
para determinada pgina, como podemos observar pela imagem seguinte (fonte: Wikipedia):

Lembrem-se sempre que a varivel com maior peso deve ser


sempre o nosso contedo e a sua qualidade. Os sites so
construdos e actualizados a pensar nas pessoas e no para
motores de busca! Ao despendermos demasiados recursos
com o SEO podemos correr o risco de descuidar no contedo e isso sim faz com que as nossas pginas percam visi-

Um dos sites sobejamente conhecidos por quem se interessa pelo tema, o www.prchecker.info/, que permite visualizar
qual o rank do nosso site, introduzindo o seu endereo num
campo de pesquisa, que posteriormente nos devolve o nosso ranking, que pode ir de uma escala de 0 a 10, sendo que

tas! Os principais destinatrios dos nossos sites so as


pessoas, os bots vm em segundo lugar!

AUTOR
Escrito por Miguel Lobato
Licenciado em Tecnologias da Informao e Comunicao (TIC) e Consultor de Search Engine Optimization SEO e
Administrao de Sistemas. tambm Webdesigner, Webdeveloper e um apaixonado por tudo o que relacionado com as
novas tecnologias.
https://www.facebook.com/MiguelLobatoSEO - @MiguelLobatoSEO

37

Elege o melhor artigo desta edio


Revista PROGRAMAR
http://tiny.cc/ProgramarED36_V

A PROGRAMAR
Implementao da Cifra ARSD em Ambiente Emulado Windows Azure
Como j foi referido anteriormente, ao contrrio do que a
Microsoft nos tem habituado, o WA no um novo sistema
operativo, mas sim um servio. Ou seja, em vez de fornecer
software que os clientes da Microsoft possam instalar e executar por conta prpria nos seus computadores, estes fazem
uso dele para executar aplicativos e armazenar dados em
mquinas acessveis pela Internet pertencentes Microsoft.
Alguns exemplos dos tipos de aplicativos que podem ser
criados com o Windows Azure so:

Base Terica
Antes de iniciarmos a parte prtica que sustentou este artigo,
tornou-se necessrio para ns compreender melhor a teoria
por trs de um novo modelo de computao.
Windows Azure
O Windows Azure (WA), foi apresentado pela primeira vez
ao pblico em Outubro de 2008, durante a Conferncia de
Desenvolvedores Profissionais da Microsoft, e considerado
um sistema operativo para o modelo de computao em
nuvem (Cloud). Por este motivo, o WA no vendido para
computadores pessoais ou servidores empresariais, a sua
licena de uso paga mensalmente, consoante os recursos
necessrios pelo utilizador.

Viso Geral do Windows Azure


A execuo de aplicaes e o armazenamento de dados em
mquinas de um centro de dados acessvel via Internet vo
oferecem uma srie de vantagens. Onde quer que sejam
executados, esses aplicativos so criados numa plataforma
computacional. Para aplicaes locais, como aqueles
executados dentro da base de dados de uma organizao,
essa plataforma geralmente inclui um sistema operativo e
uma forma de armazenar esses mesmos dados. Os
aplicativos em execuo na nuvem tambm necessitam de
uma base semelhante. O objetivo do Windows Azure
oferecer essa base a todos os seus utilizadores. A sua
plataforma funciona como uma base para a execuo de
aplicaes Windows e armazenamento de dados na nuvem,
sendo um novo modelo de computao como pode ser
observado na ilustrao 1.

Um fornecedor de software independente, ISV, pode


criar uma aplicao para empresas, numa abordagem
denominada por SaaS, ou Software As A Service. O
Windows Azure foi desenhado para dar apoio a este
tipo de aplicaes, sendo estas as prprias aplicaes SaaS da Microsoft. Assim, os ISV podem us-lo
como base para uma grande variedade de softwares
e servios numa nuvem empresarial. Um programador pode criar uma aplicao SaaS voltada para os
consumidores particulares, em vez de consumidores
empresariais.

O Windows Azure foi feito para suportar software bastante


escalonvel e, com isso, uma empresa que pretenda alargar
o seu mercado de possveis consumidores pode escolher o
WA como plataforma para uma nova aplicao. Por outro
lado, as empresas podem utilizar esta plataforma para criar e
executar aplicaes usadas pelos prprios funcionrios. Ainda que esta situao, dificilmente exija uma escalabilidade
maior do que um software voltado para os consumidores, a
confiabilidade e a capacidade de gerenciamento oferecidas
pelo Windows Azure continuam a apresent-lo, como uma
oferta a ter em conta. Para suportar dados e aplicaes na
nuvem, o Windows Azure possui cinco componentes, como
visvel na ilustrao 2.

Ilustrao 1 - Esquema Representativo da Plataforma WA

Ilustrao 2 - Esquema Representativo dos Componentes da Plataforma


Windows Azure

39

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
Ou seja, os cinco componentes principais do WA so:

Computao: Executam aplicaes na nuvem.

Armazenamento: Armazena dados binrios e estruturados na nuvem.

Controlador da Malha: Implementa, gere e monitoriza aplicaes. O controlador da malha, tambm controla as atualizaes no software do sistema.

Content Delivery Network (CND): Acelera o acesso


global a dados binrios no armazenamento do Windows Azure, mantendo cpias em cache daqueles
dados no mundo inteiro.

tncia da Web Role traz o Internet Information Services (IIS) pr-configurado, o que simplifica a criao
de aplicativos usando ASP.NET ou Windows Communication Foundation (WCF). Contudo, caso os programadores o desejem, tambm podem criar aplicativos
noutras linguagens de programao, ou seja, o uso
do .NET Framework mas no obrigatrio. Isso significa que estes tambm podem instalar e executar
outras tecnologias, no pertencentes Microsoft,
incluindo PHP ou o Java, como o nosso caso, neste
artigo.

2.

Worker Roles: Desenhadas para executar uma srie


de cdigos baseados em Windows, a sua principal
diferena em comparao com as anteriores que
esta no traz o IIS configurado, ento o cdigo que
esta executa no hospedado pelo IIS. Uma Worker
Role pode, por exemplo, executar uma simulao ou
manipular um processamento de vdeo. comum um
aplicativo interagir com os utilizadores por meio de
uma Web Role e ento entregar as tarefas para que
sejam processadas por uma Worker Role. Mais uma
vez, o desenvolvedor livre para usar a linguagem
que mais desejar.

3.

Funes VM: Cada uma delas executa uma imagem


do Windows Server fornecida pelo utilizador. Entre
outras coisas, uma funo deste tipo pode ser til na
migrao de um aplicativo local do Windows Server
para o Windows Azure.

Conexo: Permite a criao de conexes, no nvel de


IP entre computadores locais e aplicaes do Windows Azure.

Nos prximos itens, de forma a que o leitor possa compreender melhor o funcionamento deste modelo, vamos tentar, de
uma forma simples, explicar um pouco melhor o que cada
uma destas componentes nos permite efetuar.
Computao
O servio de computao do Windows Azure, pode executar
muitos tipos diferentes de aplicaes. Independente do objetivo da aplicao, esta deve ser implementada com uma ou
mais instncias. Assim, o Windows Azure executa, geralmente, mltiplas instncias de cada funo, usando um balanceamento embutido para distribuir as solicitaes entre
elas. A ilustrao 3 ajuda a entender essa mesma realidade.

Para enviar um aplicativo para o Windows Azure, o programador pode usar o portal da plataforma. Juntamente com o
aplicativo, so enviadas informaes de configurao que
informam plataforma quantas instncias de cada funo
devem ser executadas. O controlador da malha do Windows
Azure cria nessa altura uma mquina virtual (VM) para cada
instncia, executando o cdigo para a funo apropriada
naquela VM. Como exemplifica a ilustrao 3, as solicitaes
dos utilizadores do aplicativo podem ser feitas usando protocolos como HTTP, HTTPS e TCP, dependendo da necessidade de cada caso em concreto. Independentemente do
protocolo usado, esses pedidos so balanceados entre todas
as instncias de uma funo. O balanceador de carga no
permite a criao de uma afinidade com uma instncia especfica, ou seja, mesmo que o utilizador seja o mesmo, os
seus pedidos no sero enviados para a mesma instncia do
servio. Ou seja, qualquer estado especfico de um cliente
deve ser gravado no armazenamento do Windows Azure.

Ilustrao 3 - Esquema Representativo dos Componentes da Plataforma


Windows Azure

Na verso atual do Windows Azure, os programadores podem escolher entre trs tipos de instncias:

1.

Para permitir a monitorizao e a depurao de aplicativos


do Windows Azure, cada instncia pode chamar uma API de
registro em que escreve informaes que o programador
ache importantes. O programador pode ainda configurar o
sistema para obter contadores de desempenho de um determinado servio. Por exemplo, se uma Worker Role parar de

Web Roles: A sua principal finalidade facilitar a


criao de aplicaes baseadas na Web. Cada ins-

40

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
responder trs vezes numa hora, um cdigo personalizado,
previamente definido pelo programador, pode ser enviado
por email para o administrador desse servio.

Controlador da Malha
Todos os aplicativos do Windows Azure e todos os dados no
armazenamento do Windows Azure so armazenados num
data center da Microsoft. No data center, o conjunto de mquinas dedicadas ao Windows Azure e o software nelas executado so gerenciados pelo controlador da malha. A ilustrao 5, reala essa realidade. O controlador da malha um
aplicativo distribudo que replicado entre um grupo de mquinas. Este controlador detm todos os recursos de seu
ambiente: computadores, comutadores, balanceadores de
carga, etc. Pode ainda comunicar com um agente de

Armazenamento
A maneira mais simples de armazenar dados no armazenamento do Windows Azure com a utilizao de blobs. Um
blob contm dados binrios e, como mostra a ilustrao 4,
h uma hierarquia simples: cada contentor pode ter um ou
mais blobs, podendo estes ser grandes (at 1 terabyte) e ter
metadados associados. Fornecem armazenamento subjacente para drives do Windows Azure, um mecanismo que
permite que uma instncia de uma funo do Windows Azure
interaja com o armazenamento persistente, como se fosse
um sistema local de arquivos NTFS. Quando os blobs no
so suficientes e necessrio tratar dos dados de forma
mais apurada, o armazenamento do Windows Azure oferece
tabelas. Contudo, no se tratam de tabelas relacionais. Os
dados que cada funo traz so armazenados num grupo de
entidades que contm propriedades. E, em vez de usar SQL,
um aplicativo pode consultar os dados de uma tabela usando
as convenes definidas nos servios de dados OData. Esta
abordagem permite um armazenamento de escalabilidade
horizontal. Seja como for a maneira de armazenar os dados,
quer seja em blobs, tabelas ou filas, todas as informaes
mantidas no armazenamento do Windows Azure so replicadas trs vezes. Esta replicao permite tolerncia a falhas, j
que a perda de uma cpia no fatal. No entanto, o sistema
oferece uma forte consistncia, e um aplicativo que leia imediatamente dados que acabou de gravar tem a garantia de
obter de volta tudo aquilo que acabou de gravar. O WA mantm uma cpia de backup de todos os dados em outro data
center na mesma parte do mundo. Assim, se o data center
que armazena a cpia principal no estiver disponvel ou for
destrudo, o backup continua sempre acessvel. O armazenamento do Windows Azure pode ser acedido por um aplicativo dele prprio, por um aplicativo local ou por um aplicativo
executado noutra plataforma na nuvem. Em todos esses
casos, os trs estilos de armazenamento do Windows Azure
usam as convenes do REST (Transferncia de Estado
Representacional) para identificar e expor os dados.

malha em cada computador, estando assim ciente de todos


os aplicativos do Windows Azure nessa mesma malha. Esse
conhecimento total do sistema permite que o controlador de
malha faa vrias coisas, como monitorizar todos os aplicativos em execuo, oferecendo, assim uma viso atualizada
de tudo o que est acontecendo. Ele tambm decide onde
os novos aplicativos devem ser executados, escolhendo
servidores fsicos para otimizar a utilizao de hardware.
Para fazer isso, o controlador de malha depende das informaes de configurao que so carregadas com cada aplicativo do Windows Azure. Esse arquivo fornece uma descrio, baseada em XML, do que o aplicativo precisa de saber,
ou seja, quantas instncias de Web Roles e quantas instncias de Worker Roles.

Ilustrao 5 - Esquema Representativo dos Componentes da Plataforma


Windows Azure

Quando o controlador da malha implementa uma nova aplicao, usa este arquivo de configurao para determinar
quantas VM devem ser criadas. Depois de criar as referidas
VM, o controlador de malha monitoriza cada um deles. Se
um aplicativo exigir cinco instncias de uma Web Role e, por
exemplo, uma delas for encerrada, o controlador de malha
iniciar automaticamente uma nova.

Tendo em conta que o Controlador de Malha o responsvel pelo bom funcionamento do servio, seria inconveniente
colocar todas as instncias a serem servidas pelo mesmo
comutador de rede. A ilustrao 6, permite-nos visualizar
melhor a disposio das instncias do servio.

Ilustrao 4 - Esquema Representativo dos Componentes da Plataforma


Windows Azure

41

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
nectividade no nvel de IP entre uma aplicao do Windows
Azure e as mquinas em execuo fora da nuvem Microsoft,
como pode ser visvel na ilustrao 8. Como podemos verificar por esta figura, o uso da componente de Conexo do
Windows Azure requer a instalao de um agente de Endpoint em todos os computadores locais que estiverem conectados a uma aplicao da plataforma. Como a tecnologia
usa o IP v6, o agente de Endpoint est disponvel atualmente apenas para o Windows Server 2008, Windows Server
2008 R2,Windows Vista e Windows 7. O Windows Azure
tambm precisa ser configurado, para trabalhar com a componente de Conexo dele prprio. Assim que isso for feito, o
agente pode usar o IPsec para interagir com uma funo
especfica da aplicao. importante o programador ajustar
a nuvem ao ambiente local, de modo a permitir conectividade
direta no nvel de IP.

Ilustrao 6 - Esquema Representativo dos Componentes da Plataforma


Windows Azure

Content Delivery Network


Um uso comum dos blobs armazenar informaes que so
acedidas de muitos lugares diferentes. De uma forma simples, se considerarmos um aplicativo que fornece vdeos, por
exemplo, a clientes Flash, HTML 5 ou Silverlight em todo o
mundo. Para melhorar o desempenho do sistema, o Windows Azure oferece uma rede de fornecimento de contedo
(CDN). A CDN armazena cpias de um blob em locais mais
prximos dos clientes que as utilizam, de forma a que a cpia esteja disponvel no menor tempo possvel. A ilustrao
7, reala essa ideia.

Ilustrao 8 - Esquema Representativo dos Componentes da Plataforma


Windows Azure

Desenvolvimento e Administrao de Aplicaes

Conexo

O Windows Azure fornece uma porta de entrada para o ambiente de nuvem, sendo que possvel hospedar as solues para a plataforma Azure, aps estas serem desenvolvidas e implementadas. O primeiro passo necessrio, alm de
uma conta no ambiente, um alocar o servio que ir alocar
os recursos para o nosso aplicativo. De forma a proporcionar
a maior disponibilidade possvel aos seus clientes, a Microsoft estabeleceu centros de dados regionais que permitem
aos clientes selecionar servios geograficamente dispersos.

Executar aplicaes na nuvem Microsoft pode ser til. Contudo os servios e os dados que usamos, por exemplo, na
nossa empresa, possivelmente vo ter uma durao mais
longa. Neste caso, importante que a conexo de ambientes locais com o Windows Azure seja eficiente. A componente de Conexo do Windows Azure foi criada para isso. Esta
componente pode facilitar essa combinao ao oferecer co-

Desta forma, quando criamos os nossos servidores no Windows Azure, devemos sempre especificar qual a localizao
geogrfica dos mesmos. Este recurso denominado por
Windows Azure Geo-Location. Apesar de inicialmente ser
tentador para escolher a localizao geogrfica da nossa
empresa para um melhor desempenho, se precisamos por
exemplo, que a disponibilidade da aplicao seja mais impor-

Ilustrao 7 - Esquema Representativo dos Componentes da Plataforma


Windows Azure

42

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
tante do que o tempo de resposta, podemos precisar de escolher outro local. Ao selecionar uma localizao geogrfica,
devemos considerar os seguintes pontos:

Desempenho: Quando os dados esto mais perto


dos clientes da empresa, a latncia da rede pode ser
visivelmente inferior, melhorando a experincia do
cliente.

Recuperao de desastres: Se garantir a disponibilidade da nossa aplicao importante, podemos querer dispersar os seus servios e dados em vrias regies.

Fatores legais: Devemos considerar o tipo de informao armazenada na nuvem, e garantir que no so
necessrios regulamentos especficos e mandatos
que podem impedir-nos de selecionar localizaes
geogrficas mais remotas.

Algumas das boas prticas de segurana que podemos implementar na Nuvem, enquanto programadores so:

sempre importante alertar de novo para o facto de que


cada vez mais, cada caso um caso, isto , se tivermos uma
empresa de software importante recordar sempre que cada
cliente procura uma soluo nica sua medida, um bom
profissional de informtica aquele que aps estudar o caso
do seu cliente, consegue desenhar uma soluo medida
do mesmo e, sempre que possvel facilitar e melhorar ainda
o dia-a-dia do cliente. Portanto nunca demais referir que
neste modelo de computao, cada caso um caso.
Segurana do Windows Azure
Apesar de termos tido um curto espao de tempo, para estudar este novo modelo de computao e tendo em conta que
hoje em dia, cada vez se d mais valor aos dados privados e
pessoais de uma entidade ou de um individuo, importante
referir algo acerca da segurana desta nova tecnologia. O
facto de cada pedao de informao ser replicado trs vezes, pode levar a que os programadores mais desconfiados
no vejam com bons olhos a evoluo deste sistema. Se por
um lado verdade que a nuvem, ajuda a que haja uma poupana a nvel de custos de hardware, porque no estamos
preocupados em quantas mquina precisamos para manter
disponvel o nosso servio 24 horas por dia, a verdade que
todos os dados que esto em suporte digital podem ser um
alvo fcil. importante referir que, como seria esperado a
Microsoft no descurou a segurana, pelo contrrio, a segurana do WA foi reforada. Os dados so armazenados em
recursos de hardware separados, organizados em contas de
armazenamento, e o acesso a esses mesmos dados especifico de cada conta, sendo que cada uma dessas contas
tem uma password de acesso. O programador pode ainda
definir a sua prpria poltica de segurana implementando
SAS (Shared Acess Signatures) aos blobs de dados, os dados podem assim ser encriptados, consoante seja o desejo
do programador, como mostra a ilustrao 9.

Validao do input;

Autenticao;

Validao;

Definir o acesso a dados sensveis;

Criptografia;

Administrao de configurao;

Administrao de Sesso.

As ilustraes 10 e 11, exemplificam diferentes tipos de


acesso aos dados da aplicao.
Mais uma vez, chamamos a ateno de que qualquer que
seja a aplicao e o servio presente neste modelo de computao, o principal responsvel pelo bom uso dos dados da
mesma, o prprio programador.

Ilustrao 10 - Esquema Representativo da Segurana do Windows Azure

Ilustrao 9 - Esquema Representativo da Segurana do Windows Azure

43

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
pequena cifra permite-nos visualizar todas as mais-valias do
WA.
Desenvolvimento

Ferramentas Utilizadas

Ambiente de Desenvolvimento

Este projeto foi desenvolvido em ambiente Windows, sendo


usado a verso Windows Vista Home Edition. Foi usado
ainda o software Eclipse com o plugin do Windows Azure
como IDE de desenvolvimento aplicao.
Linguagem de Implementao JSP
Ilustrao 11 - Esquema Representativo da Segurana do Windows Azure

A linguagem utilizada na escrita deste projeto foi o JSP. O


java server page uma linguagem/tecnologia utilizada para
o desenvolvimento de aplicaes Web, e semelhante ao
ASP.NET da Microsoft. Como baseada na Linguagem Java, tem como grande vantagem a sua portabilidade, o que
permite a sua execuo e utilizao em diversos sistemas
operativos e em diferentes tipos de hardware. Uma pgina
criada em JSP, aps ser instalada num servidor compatvel
com a tecnologia Java, pode ento ser transformada em
Servlet (componente semelhante a um servidor que gera
dados HTML e XML). Pode ser encarado como um mdulo
que estende a funcionalidade de um servidor Web, atravs
de mdulos implementados em Java.

Cifra ARSD
Para este artigo, implementamos uma cifra simples de forma
a tentar perceber melhor qual a mquina operacional em
torno do WA, por esse motivo decidimos construir o nosso
prprio algoritmo de encriptao e desencriptao, ao qual
demos o nome de ARSD (Andr Rita Sistemas Distribudos).

O algoritmo ARSD um algoritmo simples que:

Na encriptao do ficheiro: O sistema vai ler o que


est no ficheiro para o buffer. Depois de tudo colocado no buffer, vai ler carcter a carcter e converter
cada carcter para o cdigo ASCII do carcter seguinte na tabela desse mesmo cdigo e guardar esse
mesmo valor. Posteriormente, vai fazer a converso
desse mesmo valor ASCII para o seu equivalente em
carcter e vai escreve-lo no ficheiro encriptado.

Servidor Auxiliar Usado GlassFish

O servidor auxiliar que usamos no nosso trabalho foi o GlassFish verso 3. Criado em 2005, pela Sun Microsystems
para a plataforma Java EE, este um servidor opensource.
Passados uns anos, a comunidade GlassFish lanou a verso 2 de GlassFish (tambm conhecida como Sun Java System Application Server 9.1), com capacidade completa para
o clustering corporativo e web services compatveis com
tecnologia Microsoft. Contudo em Fevereiro de 2011, a Oracle lanou ao mundo, o GlassFish v3.1. Esta verso introduziu assim suporte ao clustering e ao balanceamento de carga, alm de suportar a nova especificao Java EE 6 Web
Profile.

Na desencriptao do ficheiro: O sistema vai fazer


exatamente o contrrio do que feito na encriptao,
ou seja, vai ler o que est no ficheiro para o buffer.
Depois de tudo colocado no buffer, vai ler carcter a
carcter e converter cada um para o cdigo ASCII do
carcter anterior na tabela e guardar esse mesmo
valor. Posteriormente, vai fazer a converso desse
mesmo valor ASCII para o seu equivalente em carcter e vai escrev-lo no ficheiro desencriptado.

As opes tomadas
Com j referimos anteriormente, umas das opes tomadas
ao longo do decorrer do nosso projeto foi a implementao
do Algoritmo ARSD, de modo a que pudssemos atingir um
dos objetivos principais deste trabalho que era a implentao
de um algoritmo de encriptao e de desencriptao. Foram

Como o leitor pode observar, o algoritmo realizado no tem


um nvel de dificuldade muito elevado, mas tendo em conta
que o principal objetivo deste artigo o entendimento do
funcionamento de um novo modelo de computao, esta

44

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
desenvolvidos seis ficheiros jsp ao longo da implentao
deste projeto, de modo a facilitar a interao do utilizador
com a nossa aplicao para a nuvem, no final de cada encriptao ou desencriptao o utilizador tem ainda a possibilidade de imprimir o ficheiro gerado. Como estamos a trabalhar em localhost, os ficheiros gerados encontram-se na pasta C://Azure, de modo a que caso o utilizador deseje, os ficheiros esto acessveis. Ou seja, se o nosso sistema estivesse implementado na nuvem, o utilizador A poderia encriptar um ficheiro e envia-lo ao utilizador B que poderia desencriptar esse ficheiro atravs da nossa aplicao, e desta forma, poderia ento ter acesso ao contedo original do ficheiro
desencriptado.

java.util.Date date = new java.util.Date();


out.println(" " + date);
%>
<br>
<FORM ENCTYPE="multipart/form-data" ACTION="upload.jsp" METHOD=POST><br>
<b>Escolha o ficheiro a analisar:</b><INPUT
NAME="F1" TYPE="file"> <br>
<INPUT TYPE="submit" VALUE="Enviar Ficheiro" >
</FORM> </body> </html>

Para que este seja um artigo que ajuda o leitor a colocar em


prtica todos os passos da implementao do ambiente WA,
elaboramos tambm um pequeno tutorial de como instalar
todos os componentes necessrios. Assim no anexo deste
artigo possvel verificar como instalar o software Eclipse, o
plugin do WA no Eclipse, foi ainda explicado como iniciar um
projeto em Windows Azure assim como a compilao do
mesmo.
Ilustrao 12 - Pgina Inicial da Aplicao

importante referir que o tutorial apresentado, baseado no


tutorial oficial que a prpria Microsoft disponibiliza em http://
bit.ly/sKLmeM

A ilustrao 12, mostra a pgina de apresentao gerada por


este ficheiro de cdigo.

Contudo, foi tomada a opo de alterar o servidor auxiliar,


sendo utilizado neste projeto o GlassFish, no anexo Iniciar
um projeto em Windows Azure, foi ainda explicada a forma
como o ficheiro auxiliar que inicia o processo foi alterado.

Upload.jsp

Ficheiros

index.jsp

Como pode ser visvel no cdigo abaixo, o ficheiro apresenta


a hora do sistema, e pede ao utilizador que introduza o ficheiro que deseja encriptar ou desencriptar.
<%@ page language="java" contentType="text/html;
charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" http://www.w3.org/TR/html4/
loose.dtd">
<html><head>
<meta http-equiv="Content-Type"
content="text/html; charset=ISO-8859-1">
<title>SD - Cifra por Blocos</title>
</head>
<body>
<b>Bem-Vindo Cifra Por Blocos - Cifra ARSD</b>
<br>
<b>Versao 3.0.3</b>
<br><br>
<%@ page import="java.net.*" %>
<%
out.println( "Data: " );

<%@ page language="java" contentType="text/html;


charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
<html><head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>Pagina de Upload</title>
</head>
<body>
<%@ page import="java.io.*" %>
<% String contentType = request.getContentType();
if ((contentType != null) && (contentType.indexOf
("multipart/form-data") >= 0)) {
DataInputStream in = new DataInputStream
(request.getInputStream());
int formDataLength = request.getContentLength();
byte dataBytes[] = new byte[formDataLength];
int byteRead = 0;
int totalBytesRead = 0;
while (totalBytesRead < formDataLength)
{
byteRead = in.read(dataBytes,
totalBytesRead,formDataLength);
totalBytesRead += byteRead;
}
String file = new String(dataBytes);

45

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
Encripta.jsp

String saveFile = file.substring(file.indexOf


("filename=\"") + 10);
saveFile = saveFile.substring(0, saveFile.indexOf
("\n"));
saveFile = saveFile.substring(saveFile.lastIndexOf
("\\") + 1,saveFile.indexOf("\""));
int lastIndex = contentType.lastIndexOf("=");
String boundary = contentType.substring(lastIndex
+ 1,contentType.length());
int pos;
pos = file.indexOf("filename=\"");
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
pos = file.indexOf("\n", pos) + 1;
int boundaryLocation = file.indexOf(boundary, pos)
- 4;
int startPos = ((file.substring(0, pos)).getBytes
()).length;
int endPos = ((file.substring(0,
boundaryLocation)).getBytes()).length;
File f = new File("C:\\Azure\\"+saveFile);
FileOutputStream fileOut = new FileOutputStream(f);
fileOut.write(dataBytes, startPos,
(endPos - startPos));
fileOut.flush();
fileOut.close();
%>
<br>
<FORM ENCTYPE="multipart/form-data"
ACTION="encripta.jsp" METHOD=POST>
<INPUT TYPE="submit" VALUE="Encriptar Ficheiro" >
</FORM>
<FORM ENCTYPE="multipart/form-data"
ACTION="decripta.jsp" METHOD=POST>
<br> <INPUT TYPE="submit" VALUE="Desencriptar
Ficheiro" >
</FORM>
</body></html>

<%@ page language="java" contentType="text/html;


charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>Encriptar</title>
</head><body>
<br>
<b>Versao 3.0.3</b>
<br>
<%@ page import="java.io.*" %>
<%@ page import="java.math.*" %>
<%@ page import="java.net.*" %>
<%
char[] buffer = new char[8] ;
char[] enc = new char[8];
int len, cod;
FileReader r = new FileReader
("C:\\Azure\\encriptar.txt");
FileWriter w = new FileWriter
("C:\\Azure\\encriptado.txt") ;
while( (len = r.read(buffer)) != -1 ){
for(int j=0; j<len; j++){
cod = (int) buffer[j] + 1;
enc[j] = (char) cod;
}
w.write(enc, 0, len) ;
}
r.close() ;
w.close() ;
%>
<FORM ENCTYPE="multipart/form-data" ACTION="mostraEncriptado.jsp" METHOD=POST> <br>
<INPUT TYPE="submit" VALUE="Mostrar Encriptao"
>
</FORM>
</body></html>

Este ficheiro coloca o ficheiro escolhido pelo utilizador no


suposto servidor WA, recordamos ao leitor que o nosso
sistema emula o WA, e que o ficheiro inserido colocado na
localizao C://Azure, caso esse upload seja bem-sucedido,
apresentada uma mensagem ao utilizador dizendo que o
ficheiro foi corretamente enviado para o servidor.

Como pode ser observado, lido da pasta emulada do WA,


o ficheiro encriptar.txt, ao qual aplicado a cifra ARSD, sendo esse mesmo resultado arquivado no artigo encriptado.txt.

So ainda apresentados dois botes que permitem ao utilizador escolher se quer encriptar ou desencriptar o ficheiro,
como mostra a ilustrao 13.

Decripta.jsp

Ilustrao 13 - Pgina de escolha da Aplicao

<%@ page language="java" contentType="text/html;


charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;

46

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
Os restantes ficheiros da aplicao o Mostraencriptado.txt e
o mostradesencriptado.txt so anlogos, sendo que cada um
desses ficheiros d ao utilizador a possibilidade de ver a cifra
gerada pela aplicao e possibilita ainda a impresso da
mesma ou ento que o utilizador arquive esse numa localizao sua escolha.

charset=ISO-8859-1">
<title>Desencriptar</title>
</head>
<body>
<br>
<b>Versao 3.0.3</b>
<br>

mostraEncriptado.jsp

<%@ page import="java.io.*" %>


<%@ page import="java.math.*" %>
<%@ page import="java.net.*" %>

<%@ page language="java" contentType="text/html;


charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN" "http://www.w3.org/TR/html4/
loose.dtd">
<html>

<%
char[] buffer = new char[8] ;
char[] desenc = new char[8];
int cod2, len2;

<head>
<meta http-equiv="Content-Type" content="text/html;
charset=ISO-8859-1">
<title>Mostrar ficheiro Encriptado</title>

FileReader dr = new FileReader


("C:\\Azure\\encriptado.txt");
FileWriter dw = new FileWriter
("C:\\Azure\\desencriptado.txt");

</head>

while( (len2 = dr.read(buffer)) != -1 )


{
for(int j=0; j<len2; j++)
{
cod2 = 0;
cod2 = (int) buffer[j] - 1;
desenc[j] = (char) cod2;
}
dw.write(desenc, 0, len2) ;
}
dr.close() ;
dw.close() ;

<body>
vou mostrar o ficheiro Encriptado ....
<br>
<b>Versao 3.0.3</b>
<br>
<input type="button" name="print" value="Imprimir"
onClick="javascript:window.print();">
<FORM ENCTYPE="multipart/form-data"
ACTION="index.jsp" METHOD=POST>
<br>
<INPUT TYPE="submit" VALUE="Voltar" >
</FORM>
<br>
<%
String filename = "encriptado.txt";
String filepath = "C:\\Azure\\";
java.io.FileInputStream fileInputStream = new java.io.FileInputStream(filepath + filename);
int i;
while ((i=fileInputStream.read()) != -1)
{
out.write(i);
}
fileInputStream.close();
out.close();
%>

%>
<FORM ENCTYPE="multipart/form-data"
ACTION="mostraDesencriptado.jsp" METHOD=POST>
<br>
<INPUT TYPE="submit" VALUE=
"Mostrar Desencriptao" >
</FORM>
</body>
</html>
semelhana do ficheiro apresentado anteriormente, este
ficheiro apenas l o encriptado.txt e aplica a cifra ARSD de
desencriptao e guarda o resultado no ficheiro desencriptado.txt.

</body>
</html>

Em ambos os ficheiros anteriores dada a opo de mostrar


o ficheiro gerado, (recordamos que o ficheiro gerado o
ficheiro encriptado.txt ou o ficheiro desencriptado.txt, dependendo do algoritmo escolhido pelo utilizador da aplicao).

Alm da possibilidade de impresso ou de guardar o ficheiro,


foi ainda includa a opo de Voltar para que a aplicao
volte ao ponto inicial de modo a que caso o deseje, o utilizador possa inserir um novo ficheiro e ponha em prtica uma

47

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
nova execuo do mesmo, a ilustrao 14 demonstrativa
dessa fase da aplicao.

res desafios da nossa implementao.


Um outro desafio, foi a compreenso do nosso desenvolvimento, e o facto de que ao desenvolver aplicaes para o
WA, podemos de facto, usar mais linguagens do que a linguagem. NET. Um outro desafio foi que apesar de todos os
tutoriais que pesquisamos e de toda a informao que recolhemos, a verdade que na prtica, a computao em nuvem ainda um "Adamastor" para os informticos em geral,
uma vez que ainda h pouca informao disponvel. Na fase
de instalao do IDE, as dificuldades que tivemos relacionaram-se com o facto de que ao instalar o SDK do Windows
Azure, automaticamente foi instalado o IIS, por este motivo,
o nosso localhost assumia automaticamente este servio e
no o nosso servidor base que tnhamos previamente escolhido. Ultrapassado este contratempo, no passo seguinte, ao
seguir o tutorial oficial da Microsoft, chegmos concluso
de que apesar do tutorial recomendar o TomCat como servidor auxiliar, que no nosso caso, deveramos utilizar o GlassFish como auxiliar.

Ilustrao 14 - Pgina de Visualizao do Ficheiro Gerado

Tendo o emulador WA instalado no computador em que desenvolvemos este projeto, todas as funcionalidades que desenvolvemos podem ser utilizadas. Assim o utilizador apenas
precisa de iniciar um browser e digitar o seguinte endereo:

Optmos por este ltimo devido ao facto de que nos permitia


ter uma maior eficincia na nossa aplicao. Apesar de termos tambm conscincia de que o algoritmo implementado
no tem grande dificuldade, estamos satisfeitos com o facto
de termos conseguido desenvolver e implementar uma aplicao de encriptao e desencriptao de ficheiros para a
nuvem, pois conseguimos compreender melhor um novo
modelo de computao que cada vez mais se adivinha o
futuro.

localhost:8080/HelloWorld

Ser mostrada a pgina inicial do nosso programa, seguidamente, o utilizador apenas tem que escolher o ficheiro que
deseja encriptar e carregar no boto Enviar Ficheiro, para
que o ficheiro seja carregado para o nosso servidor, de notar
que como estamos a trabalhar em localhost, que na raiz do
computador foi criada uma pasta chamada Azure que serve
como armazenamento de dados.

Este artigo o culminar de uma nova descoberta que queremos agora partilhar com o nosso leitor.
Por esse mesmo motivo, todos os ficheiros descritos neste
trabalho, assim como a jdk utilizada e a verso usada do
Glassfish e os anexos deste artigo que podero ajudar o
leitor a instalar e experimentar o funcionamento do WA, esto disponveis para o download em http://bit.ly/NYNEBT

Reflexo Crtica/Concluso
Um dos maiores desafios no desenvolver deste projeto foi o
facto de que o WA ser uma ferramenta que demora algum
tempo a executar. Apesar do computador que usamos para
realizar este projeto ter 4GB de memria RAM, e de termos
dedicado quase todos os nossos recursos disponveis para
esta aplicao, quando corremos o emulador do WA, o tempo mdio de espera de cerca de 25 minutos, o que muito
contribuiu para o lento andamento do nosso desenvolvimento.

Relembramos ao nosso leitor que este artigo foi desenvolvido com base em documentao oficial da Microsoft e que
caso o desejem podero aprofundar os vossos conhecimentos nesta rea.

Agradecimentos

Gostaramos ainda de agradecer ao professor Nuno Garcia,


docente da Universidade da Beira Interior, toda a ajuda prestada.

Por este motivo, um dos nossos maiores desafios desta implementao, foi o facto de termos que pensar sempre no
prximo passo, e caso a verso que estvamos a tentar verificar tivesse algum erro, como poderamos resolver esse erro
antes da prxima compilao. Este foi de facto um dos maio-

48

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
Webgrafia

Microsoft Virtual Academy, Apontamentos tericos do Curso"Introduction To Windows Azure", diponibilizados online
em http://bit.ly/fH1Wsp

Java SE Downloads - http://bit.ly/bMkbpo


GlassFish Community - http://bit.ly/eEqNbg

AUTOR
Escrito por Rita Peres
Natural de Castelo Branco e estudante de Engenharia Informtica da Universidade da Beira Interior.
Membro do P@P desde Janeiro de 2010 (https://www.facebook.com/rita.aperes)

Escrito por Andr Loureno


Mais conhecido por KK31, natural de Pinhel, estudante de Engenharia Informtica da Universidade da Beira Interior (https://
www.facebook.com/kk31mdb)

49

A PROGRAMAR
Estao de Controlo de Temperaturas usando Arduno e Texas Instruments LM335A
Introduo:

Este artigo tem como objectivo demonstrar algumas


das capacidades do microcontrolador Arduno quando conjugado com o sensor de temperatura Texas Instruments
LM335A. Usando estes dois componentes relativamente
fcil criar uma pequena estao de controlo de temperaturas
e posteriormente, mediante uma pequena aplicao programada numa linguagem a gosto (neste caso foi utilizada a
linguagem C) poder ser feito o tratamento estatstico das
informaes recolhidas pelo Arduno em conjunto com o
sensor de temperatura Texas Instruments LM335A.

Microcontrolador

ATmega328

Voltagem de Trabalho

5V

Voltagem Recomendada no

7V 12V

Input
Limites de Voltagens

6V 20V

Pinos Digitais I/O

14 Pinos(6 deles PWM)

Pinos Analgicos de Entra-

6 Pins

da
Arduno Uno:

Corrente DC por Pino I/O

40mA

Corrente DC no Pino 3.3V

50mA

Memria Flash

32Kb (0.5Kb Usados no


Bootloader)

SRAM

2Kb

EEPROM

1Kb

Velocidade de Relgio

16MHz

Especificaes:
Poder encontrar todas as informaes detalhadas acerca
do microcontrolador Arduino Uno no seu datasheet Aqui:
http://bit.ly/At0G9L

Texas Instruments LM335A:

(Figura 1 Arduno Uno)

O Arduno Uno um pequeno microcontrolador baseado no


microprocessador ATmega328 a 16MHz. Possui 14 pinos I/O
digitais, sendo que 6 deles podem ser usados como PWM, 6
pinos de entrada analgicos e conexo USB para se ligar
facilmente ao computador. A linguagem de programao
mais usada na programao do microcontrolador o C/C++.

(Figura 2 LM335A)

O sensor Texas Instruments LM335A um pequeno sensor


de temperatura capaz de operar em temperaturas que vo
dos -40C at aos 100C. Quando devidamente calibrado o
LM335A tem um erro de leitura de cerca de 1C, no entanto
estes valores podem ser superiores caso no seja feita a
devida calibragem do sensor. O Texas Intruments LM335A

50

A PROGRAMAR
ESTAO DE CONTROLO DE TEMPERATURAS
funciona numa faixa de corrente que vai dos 5mA at
400mA.

Deve ser tomada ateno na ligao dos componentes evitando sempre efectuar qualquer alterao com o Arduino
conectado fonte de alimentao prevenindo qualquer possvel curto-circuito.

Especificaes:
Tenso de Alimentao Mnima

3V

Tenso de Alimentao Mxima

5V

Iq

1000 uA

Aumento na Leitura

10 mV/C

Preciso Mxima do Sensor

+\- 3C

Impedncia de Sada

0.6 Ohm

Faixa de Temperatura Operacional

-40C at 100C

Programao do Arduino Uno +Texas Instruments


LM335A
Aps efetuarmos toda a parte fsica do projecto necessrio
programar o Arduino para que consiga ler e interpretar os
dados obtidos pelo sensor de temperatura. Obter e interpretar os dados obtidos relativamente simples, bastando recorrer ao seguinte cdigo-fonte:
float temp;
int tempPin = 0;
void setup()
{
Serial.begin(9600);
}
void loop()
{
temp = analogRead(tempPin);
temp = (((temp/1023)*5)*100)-273.15;
Serial.print(A Temperatura de: );
Serial.println(temp);
delay(1000);
}

Poder encontrar todas as informaes detalhadas acerca


do sensor de temperatura Texas Instruments LM335A no seu
datasheet Aqui: http://bit.ly/ORLAhN

Material Necessrio:

Para a realizao deste pequeno projecto foi necessrio o


seguinte material:

Breadboard

Arduino Uno

Texas Instruments LM335A

1 Resistncia de 2K

4 fios de conceo

Para quem j est habituado a programar ou pelo menos


tem algumas noes este pequeno pedao de cdigo escrito
em C de fcil interpretao, com exceo da linha 12 que
mais especfica para a obteno da temperatura correcta, o
que vou explicar em pormenor j de seguida.
Por defeito o sensor de temperatura Texas Instruments
LM335A l a temperatura em Kelvin, sistema de medio
que no o mais usado por ns, comuns Portugueses.

Esquema Elctrico:

importante referir que os valores de output do sensor de


temperatura LM335A so expressos em mV, sendo posteriormente necessrio converter este valor para Volts de modo a que o Arduino saiba como lidar e interpretar a informao recebida.

A montagem deste pequeno projecto relativamente simples


de ser feita uma vez que so usados poucos componentes e
ligaes.
A montagem deve ser feita seguindo o seguinte esquema
elctrico:

Os valores lidos iro tomar valores de 0 at 1023, ento nesse caso iremos ter (temp*5volts)/1023, mas como o output
do LM335A em mV temos de multiplicar ainda o valor por
100 para ficar em Volts.
Aps isto obtemos o valor da temperatura em Kelvin, mas
como o nosso objectivo obter temperaturas em C temos
de subtrair 273.15, obtendo assim por fim a seguinte linha de
cdigo:
temp = (((temp/1023)*5)*100)-273.15;

(Figura3 Esquema Eltrico)

51

A PROGRAMAR
ESTAO DE CONTROLO DE TEMPERATURAS
Pequena tabela de converso de temperaturas:

viamente escolhido.

0k = -273.15C

Const ForReading = 1 declara uma constante com o


nome ForReading e atribui-lhe o valor 1
Const ForWriting = 2 'declara uma constante com o
nome ForWriting e atribui-lhe o valor 2
Set fso = CreateObject
("Scripting.FileSystemObject") 'cria um objeto do
tipo "Scripting.FileSystemObjcet com o nome fso
Set com = fso.OpenTextFile("COM3:9600,N,8,1",
ForReading) ' cria um objeto do tipo
Scriping.FileSystemObject, utiliza a proriedade OpenTextFile do objeto com os parmetros
"COM3:9600,n,8,1, 2 em que COM3 a porta serie 3,
9600 a velocidade de comunicao em bps, n a
paridade, 8 o numero de bits de dados, 1 o numero de bits de paragem" e 2 que o valor da constante ForReading que indica que para leitura
Set objFSO = CreateObject
("Scripting.FileSystemObject") 'cria um objeto do
tipo "Scripting.FileSystemObjcet com o nome fso
Set objFile = objFSO.OpenTextFile
("C:\Utilizadores\Nuno\TempLogger.txt", ForWriting,
True) ' cria um objeto do tipo
Scripting.FileSystemObject, utiliza a propriedade
OpenTextFile do objeto com os parmetros
"C:\Utilizadores\Nuno\TempLogger.txt" , 2 (que o
valor da constante ForWriting e True que indica
que define a propriedade de escrita para
"escrever"
MsgBox("Iniciado TempLogger") ' apresenta uma caixa
de mensagem
Do While com.AtEndOfStream <> True ' inicia um
ciclo do tipo Do While em que enquanto
com.atEndOfStrem for diferente de true, repete as
instrues dentro do loop (enquanto no chegar ao
fim da stream de dados)
temperatura = com.ReadLine 'temperatura toma o
valor de com.ReadLine
objFile.Write(now()) 'escreve a data e hora no
preciso momento
objFile.Write(" ") ' escreve um espao no ficheiro
objFile.WriteLine(temperatura) 'escreve o valor de
da varivel temperatura
WScript.Sleep(100) 'aguarda 100ms
Loop 'repete o ciclo
objFile.Close 'fecha o ficheiro
com.Close() 'fecha a comunicao com a porta
'pelo que entendo este script emula um ficheiro em
memria para receber dados de uma porta serie e
cria um ficheiro na filesystem do windows, para os
'armazenar

0C = 271.15K.
Arduino IDE + SerialMonitor

A programao do Arduino deve ser feita preferencialmente


recorrendo ao seu IDE, o que facilita bastante a tarefa de
compilar e enviar o cdigo para o microcontrolador.
Aps enviarmos o cdigo acima indicado para o microcontrolador vamos verificar se o Arduino em conjunto com o sensor
de temperatura esto a produzir os resultados pretendidos.
Para isso podemos usar a ferramenta incorporada no Arduino IDE, o SerialMonitor.
O SerialMonitor no faz mais do que apresentar o output dos
dados recebidos e interpretados pelo Arduino, e f-lo da seguinte forma:

(Figura4 SerialMonitor)

Como podem ver na figura acima apresentada o SerialMonitor apenas um auxilio na verificao do Output do Arduino.

Automatizando a leitura e armazenamento dos dados


num ficheiro txt
O processo de recolha e armazenamento dos dados pode
ser feito de vrias formas, mas para o projecto em causa
tornou-se necessrio encontrar uma forma que possibilitasse
a automatizao deste processo guardado todos os dados
recolhidos pelo Arduino e armazenando-os num ficheiro de
txt de modo a serem posteriormente processados.

(O script est acima descrito e comentado)

Com o uso deste pequeno script torna-se muito mais


fcil e rpido de recolher os dados uma vez que por
defeito o Arduino no tem a capacidade de guardar os
seus prprios dados, sendo necessrio recorrer a uma
aplicao externa, neste caso o script VBScrip, podendo ainda ser usada uma aplicao do tipo Termite 2.8

Para efectuar esta tarefa utilizei um script escrito em VBScript que permite recolher os dados lidos pela porta COM no
Arduino e efetua o seu armazenamento num ficheiro txt pre-

ou semelhante.

52

A PROGRAMAR
ESTAO DE CONTROLO DE TEMPERATURAS
}
float temp_max(int *dia, int *mes, int *ano, int
*hora, int *min, int *seg, float *temperatura)
{
float temp_max = 0;
int j, num_linhas = 0;
num_linhas = ler_ficheiro(dia, mes, ano, hora,
min, seg, temperatura);
for(j = 0; j < num_linhas; j++)
{
if (temperatura[j] > temp_max)
{
temp_max = temperatura[j];
}
}
printf("Temperatura Maxima = %f", temp_max);
}
float temp_min(int *dia, int *mes, int *ano, int
*hora, int *min, int *seg, float *temperatura)
{
float temp_min;
int j,num_linhas = 0;
num_linhas = ler_ficheiro(dia, mes, ano, hora,
min, seg, temperatura);
for(j = 0; j < num_linhas; j++)
{
temp_min = temperatura[0];
if (temperatura[j] < temp_min)
{
temp_min = temperatura[j];
}
}
printf("Temperatura Maxima = %f", temp_min);
}
int main()
{
int dia[N], mes[N], ano[N], hora[N], min[N],
Seg[N];
float temperatura[N];
int num_linhas;
int escolha;
do
{
printf("\t\t\t\t***MENU***");
printf("\n\n");
printf("1 - Ler Ficheiro de Dados:\n");
printf("2 - Calcular a Mdia das
Temperaturas:\n");
printf("3 - Verificar Temperatura Maxima:\n");
printf("4 - Verificar Temperatura Minima:\n");
printf("5 - SAIR\n");
printf("\n");
printf("Opcao:");
scanf("%d", &escolha);
switch(escolha)
{

Criar uma pequena Aplicao em C para tratamento estatstico dos dados

O objectivo da informtica gerar informao automtica e


seguindo esse pressuposto que sentimos necessidade de
programar uma pequena aplicao, neste caso recorrendo
linguagem de programao C para que possa ser feito o
tratamento estatstico dos dados recolhidos e armazenados
de uma forma mais simples e rpida, tirando todo o proveito
da capacidade computacional do computador.
Aqui est o codigo-fonte da pequena aplicao em linguagem C que desenvolvi:
#include <stdio.h>
#include <stdlib.h>
#define N 1000
int ler_ficheiro(int *dia, int *mes, int *ano, int
*hora, int *min, int *seg, float *temperatura)
{
FILE *entrada;
int i = 0;
int num_linhas = 0;
entrada = fopen("TempLogger.txt", "r");
if (entrada == NULL)
{
printf("Erro na Abertura do Ficheiro de Entra
da:\n\n");
system("PAUSE");
}
else
{
while (!feof(entrada))
{
fscanf(entrada, "%d-%d-%d %d:%d:%d A
Temperatura de: %f\n", &dia[i], &mes[i],
&ano[i], &hora[i], &min[i], &seg[i],
&temperatura[i]);
printf("%d-%d-%d %d:%d:%d A Temperatura de:
%f\n", dia[i], mes[i], ano[i], hora
[i], min[i], seg[i], temperatura[i]);
i++;
}
return i;
}
}
int media_temp(int *dia, int *mes, int *ano, int
*hora, int *min, int *seg, float *temperatura)
{
float soma_temp = 0, temp_media = 0;
int j, num_linhas = 0;
num_linhas = ler_ficheiro(dia, mes, ano, hora,
min, seg, temperatura);
for(j = 0; j < num_linhas; j++)
{
soma_temp = soma_temp + temperatura[j];
temp_media = soma_temp / num_linhas;
}
printf("Media = %f", temp_media);

case 1:
{
printf("\n\n1- Escolheu Ler o Ficheiro de Da
dos:\n\n");
ler_ficheiro(dia, mes, ano, hora, min, seg,
temperatura);

53

A PROGRAMAR
ESTAO DE CONTROLO DE TEMPERATURAS
sua mdia das temperaturas de todo o conjunto de dados
recolhidos.

num_linhas = ler_ficheiro(dia, mes, ano, hora,


min, seg, temperatura);
printf("Num Linhas = %d", num_linhas);
printf("\n\n\n");
break;

A aplicao ir ler dados armazenados num ficheiro de dados .txt que ser o output do script VBS com a seguinte estrutura:

}
case 2:
{
printf("\n\n2 - Escolheu Calcular a Media das
Temperaturas:\n\n");
media_temp(dia, mes, ano, hora, min, seg,
temperatura);
break;
}
case 3:
{
printf("\n\n3 - Verificar Temperatura
Maxima:\n\n");
temp_max(dia, mes, ano, hora, min, seg,
temperatura);
break;
}
case 4:
{
printf("\n\n3 - Verificar Temperatura
Minima:\n\n");
temp_min(dia, mes, ano, hora, min, seg,
temperatura);
break;
}
case 5:
{
printf("Escolheu SAIR:");
exit(0);
}
default:
{
printf("\n\n Opo Errada:");
return main();
}
}

18-07-2012 17:18:26 A Temperatura de:


18-07-2012 17:18:26 A Temperatura de: 25.97

26.46

A aplicao desenvolvida para este pequeno projecto bastante simples e rudimentar, mas o suficiente para que possa fazer o tratamento estatstico de um conjunto de dados.
A pequena aplicao ser capaz de verificar qual a temperatura mxima e mnima do conjunto de dados assim como a
sua mdia das temperaturas de todo o conjunto de dados
recolhidos.

Concluso:
O micro-controlador Arduino um dispositivo muito verstil
que permite criar um sem nmero de projectos, podendo ser
aliado a um enorme conjunto de outros dispositivos. No caso
apresentado acima fcil perceber que o Arduino uma
plataforma muito simples mesmo para quem no tem conhecimentos muito aprofundados e ainda est a dar os primeiros
passos, quer na rea da electrnica quer no campo da programao.
A mini-aplicao escrita em linguagem C muito simples,
mas demonstra as potencialidades do projecto, podendo
qualquer pessoa adicionar novas funcionalidades, completando a aplicao mediante as necessidades.

}
while(escolha != 5);
}
A aplicao desenvolvida para este pequeno projecto bastante simples e rudimentar, mas o suficiente para que possa fazer o tratamento estatstico de um conjunto de dados.
A pequena aplicao ser capaz de verificar qual a temperatura mxima e mnima do conjunto de dados assim como a

AUTOR
Escrito por Nuno Santos
Curioso e autodidacta com uma grande paixo pela programao e robtica, frequenta o curso de Tecnologias de Informao
e Comunicao na UTAD mas no esconde o sonho de ainda vir a ser Engenheiro Informtico. Estudante, Blogger, e moderador no frum Lusorobtica so algumas das suas actividades. Os seus projectos podem ser encontrados em: http://
omundodaprogramacao.com/

54

COLUNAS
Enigmas de C# - Avaliao da Lista de Argumentos
CoreDump - Podemos continuar a acreditar nas TIC?

ENIGMAS C#
ENIGMAS DO C# - AVALIAO DA LISTA DE ARGUMENTOS
Resultado (continuao da pgina 34)
Todos os efeitos colaterais (side effects) ocorrem antes da
invocao do mtodo do lado do chamador.

O resultado vai depender da verso de C# que se est a


usar.

As diferenas entre o C# 4.0 e C# 5.0 resultam do facto de


existir uma falha no compilador 4.0 que avalia primeiro os
argumentos com nome e s depois os argumentos posicionais.

Usando C# 4.0, o resultado ser:


x=1, y=2, z=3
x=5, y=20, z=4

Concluso
Usando C# 5.0, o resultado ser:

Em face ao demonstrado, a forma mais segura (para evitar


enganos) de escrever cdigo efetuar os clculos dos valores dos argumentos fora da especificao da lista de argumentos:

x=1, y=2, z=3


x=4, y=20, z=5
Explicao

Ligaes

O conjunto de argumentos de invocao de um mtodo designa-se por lista de argumentos (7.5.1 Argument lists).

C# Reference
Visual C# Breaking Changes in Visual Studio 2012

A avaliao dos valores dos argumentos (7.5.1.2 Run-time


evaluation of argument lists) durante a invocao de um mtodo ocorre pela ordem por que so especificados (da esquerda para a direita).

Argumentos com Nome e Opcionais

AUTOR
Escrito por Paulo Morgado
licenciado em Engenharia Electrnica e Telecomunicaes (Sistemas Digitais) pelo Instituto Superior de Engenharia de
Lisboa e Licenciado em Engenharia Informtica pela Faculdade de Cincias e Tecnologia da Universidade Nova de Lisboa.
Pelo seu contributo para a comunidade de desenvolvimento em .NET em lngua Portuguesa, a Microsoft premeia-o com o
prmio MVP (C#) desde 2003. ainda co-autor do livro LINQ Com C# da FCA.

56

CoreDump
Podemos continuar a acreditar nas TIC?
Tive o prazer de ser orador na verso portuguesa do evento
europeu eSkills 2012 como representante da comunidade
P@P, organizado pela ANPRI.

generalidade dos seus pares.


Estes pontos tornam-se ainda mais relevantes quando o
mercado de trabalho atinge nveis de desemprego e baixa
procura como , infelizmente, o panorama atual.

Sob o tema Podemos continuar a acreditar nas TIC?, ficou


patente de que as TIC so, e devem continuar a ser, um
ponto de partida importante para criar bons profissionais.

J l vo mais de duas dcadas desde que se comeou a


ensinar informtica no secundrio. Evolumos do ensino do
COBOL e do GW BASIC para PHP, SQL e Photoshop, criando assim nos alunos competncias importantes para os dias
de hoje para quem pretende fazer carreira em TI.

O evento juntou professores, alunos, antigos alunos e profissionais e mostrou que as TIC tm um papel que se pode
tornar mais relevante na formao de profissionais para a
rea das TI.

Sem dvida que as TIC tm um papel importante neste ponto, uma vez que da sua competncia ajustar os contedos
do curriculum s necessidades reais do mercado de trabalho
nacional e, atualmente, parecem-me alinhados. Quanto ao
futuro, as notcias recentes indicam que as TIC vo comear
no 7 ano de escolaridade, mostrando que existe conscincia
sobre a importncia das TIC na preparao dos alunos.

Alguns pontos onde a indstria est claramente de acordo


foram focados e debatidos na altura das questes. Esses
pontos prendem-se com a necessidade dos profissionais
terem no seu curriculum um fator diferenciador, com a inevitvel constante atualizao tecnolgica necessria e com a
imprescindvel pro-atividade intrnseca profisso.

Na comunidade P@P alguns destes temas so recorrentes,


sendo do interesse particular por quem est a concluir o secundrio e se questiona e agora, que opes tenho. Durante vrios anos tenho defendido, inclusive no frum da comunidade, que importante que os alunos tenham a conscincia de que devem sempre escolher a melhor universidade,
caso pertendam continuar o seu percurso acadmico, e que
devem ter sempre um fator diferenciador que os distinga da

Assim, a minha resposta ao ttulo do artigo sim, podemos


continuar a acreditar nas TIC.
Bastando para tal que as TIC, tal como os profissionais, sejam pro-ativas e se atualizem de forma a poderem continuar
a proporcionar aos seus formandos um bom ensino atualizado.

AUTOR
Escrito por Fernando Martins
Faz parte da gerao que se iniciou nos ZX Spectrum 48K. Tem um Mestrado em Informtica e mais de uma dcada de experincia profissional nas reas de Tecnologias e Sistemas de Informao. Criou a sua prpria consultora sendo a sua especialidade a migrao de dados.

57

Media Partners da Revista PROGRAMAR

Anlises
Fundamental do MAC OS X
Microsoft SQL Server 2012 Integration Services: An Expert Cookbook

Review
Fundamental do MAC OS X
Ttulo: Fundamental do MAC OS X
Autor: Rui Santos
Editora: FCA
Pginas: 280
ISBN: 978-972-722-734-1

Enciclopdia do Mac OS X, mas nunca como iniciao ao


Mac OS X.

No primeiro contacto com o livro fiquei um pouco


aqum do esperado pois para falar de apenas de um sistema operativo mais apontado para designers e altamente
conhecido pela elegncia dos equipamentos, fluidez, facilidade de trabalho e beleza do prprio sistema operativo o livro
no muito apelativo. Mas sigamos em frente.
Atravs dos seus doze captulos o Autor passa por
vrios assuntos dos mais bsicos at aos mais exigentes;
em todo o processo de escrita eu penso que o Autor no fez
a introduo mais certa em forma de enquadramento ao
utilizador que no tem conhecimento bsico e prvio do Mac
OS X.
No meu ponto de vista, penso que a leitura ajudara todos
que os leitores mas, ajuda bastante mais quem j tem alguns
conhecimentos prticos no sistema operativo, sendo bastante explicativo desde o mais bsico at ao mais complexo.
um excelente livro para o conhecimento do sistema operativo a nvel de usabilidade e acessibilidade, faz nos lembrar
um pouco aquelas aulas de TIC que se tinham a anos atrs
que saber nomes de barras, e como fazer o bsico no Mac
OS X.

Em suma um excelente livro para quem entra no


Mundo Mac ter como apoio a todo e qualquer duvida de
usabilidade que posso aparecer durante a habituao e iniciao, livro inquestionvel na estante de quem tem um Mac
pois tudo que possamos duvidar ou querer saber sobre o
Mac OS X este livro responde-nos. Como j disse a cima
um livro excelente para todos, sendo sincero com os leitores
desta Review acho que posso intitular este livro como que a

AUTOR
Escrito por Miguel Oliveira
Tcnico de informtica nvel IV na Escola Profissional de Mazago, Braga, actualmente frequenta o CET no IPVC de Tecnologia e Programao de Sistemas Informao. Membro da equipa do IPVC que promoveu a I Reunio Presencial da Comunidade NetPonto em Viana do Castelo, Membro do Staff da Revista PROGRAMAR desde Junho de 2012.

60

Review
Microsoft SQL Server 2012 Integration Services: An Expert Cookbook
Ttulo: Microsoft SQL Server 2012 Integration Services: An
Expert Cookbook

que quem ler este livro, no s est a aumentar o seu nvel


de conhecimento (seja ele qual for), pois o livro bastante
acessvel e os exemplos bastante fceis de seguir, como
est a adquirir conhecimentos que so vlidos e bem teis
mesmo para alm das ferramenta Microsoft SQL Server
2012 Business Inteligence Edition e Visual Studio 2012.

Autor: Reza Rad, Pedro Perfeito


Editora: PACKT Publishing
Pginas: 564
ISBN: 9781849685245
Quando comecei a ler o livro, confesso que estava
expectante, a pensar: ser este apenas mais um livro tcnico
sobre Microsoft SQL Server ?
Demorei algumas pginas at formalizar uma opinio
mais concreta! Na realidade no apenas mais um livro,
um excelente livro, que aborda de forma simultaneamente
simples e detalhada, diversos aspectos do MS SQL Server
2012 que apesar de serem de grande utilidade numa boa
parte das implementaes de software so descurados, ou
passados para segundo plano, levando o programador a
repetir trabalho que j existe feito, ou existe forma mais
simples de o fazer.
Depois de algumas horas e pginas livro adentro dei
por mim a instalar uma verso trial do SQL Server para poder experimentar na prtica alguns exerccios da vasta srie
de exerccios detalhados passo a passo que se encontram
ao longo do livro. Cada exerccio mais desafiador que o
anterior mas mais interessante!
Ao longo de toda a leitura, que a determinado momento se tornou apaixonante, como se na realidade estivesse a ler um thriller e no um livro tcnico, senti-me levado a explorar melhor as potencialidades do SQL Server, nos
vrios nveis e com especial interesse no seu uso num nvel
de inteligncia de negcio, e no apenas como SGBD, desprovido de outras ferramentas, em que todos os processos
de nvel estratgico e de inteligncia teriam de ser feitos no
software cliente sem retirar grande proveito das potencialidades das ferramentas de base de dados.
Ao terminar a leitura de todo o livro, e tendo experimentado
alguns dos exerccios nele apresentados e feito as minhas
prprias variantes dos exerccios, apenas pude concluir

AUTOR
Escrito por Antnio Santos
Entusiasta da tecnologia desde tenra idade, cresceu com o ZX Spectrum, autodidacta, com uma enorme paixo por tecnologia, tem vasta experincia em implementao e integrao de sistemas ERP, CRM, ERM. Membro da Comunidade Portugal-a
-Programar desde Agosto de 2007, tambm membro da Sahana Software Foundation, onde Programador Voluntrio.
Neste momento aluno no Instituto Politcnico de Viana do Castelo, na Escola Superior de Tecnologia e Gesto.
.

61

COMUNIDADES
PtCoreSecSegurana na WEB (Parte 3)

COMUNIDADE PTCoreSec
SEGURANA NA WEB (PARTE 3)
relembrar que o tamanho de ID da sesso no suficiente
como proteco por si s; tambm importante um alto nvel
de entropia por cada caracter do ID de sesso. A entropia de
cada caracter deve ser considerada quando se cria os IDs de
sesso, visto que uma entropia mais alta por caracter
individual mais segura. Um ID de sesso dever ser
construdo a partir de um conjunto que no permita nenhuns
padres bvios no ID. Um padro como por exemplo a letra
C, estando sempre presente nas posies 1,4 e 5, seria
facilmente identificado por ferramentas automticas e iria
reduzir o tempo necessrio de computao para um ataque
de fora bruta a IDs genunos.

Iremos concluir nesta terceira parte a nossa trilogia de


artigos de programao segura. Vamos comear por explicar
a parte final do nosso conjunto de regras. A ltima regra de
que falmos foi a de autenticao e autorizao, iremos
agora prosseguir para a regra de Gesto de sesses.

Se os passos acima forem seguidos correctamente, os


utilizadores tero IDs de sesses que no podero
facilmente ser previstos por atacantes.
Em seguida, temos de confirmar que estes IDs so seguros
no servidor da aplicao e enquanto esto em trnsito. A
localizao de armazenamento dos IDs de sesso dever
sempre feita num local seguro e no num local acessvel
publicamente.

Regra 4 Gesto de sesses


Quando um utilizador liga a sua aplicao, esta pode pedir
credenciais ao utilizador. Se um utilizador conseguir
autenticar-se com sucesso, este no espera ter de voltar a
inserir as suas credenciais outra vez, a no ser que acabe o
tempo de login permitido e a sua sesso expire ou que
estejam a tentar executar uma aco privilegiada. Gerncia
de sesses permite que a sua aplicao autentique um
utilizador mas tambm que garanta que o utilizador a
efectuar as aces o utilizador que se autenticou usando
as credenciais originais. Para um atacante, quaisquer falhas
na camada de gerncia de sesses serve como uma
maneira fcil de ultrapassar o trabalho rduo que colocamos
nas regras anteriores.

O ponto seguinte que iremos abordar a transmisso segura


de IDs e para isto existe uma resposta simples. Se os IDs
forem transmitidos por HTTP estes podem facilmente ser
interceptados e reutilizados por um atacante. Assim, usando
HTTPS ao invs de HTTP pode-se proteger os IDs de
sesses enquanto esto a ser transmitidos.
Os 2 ltimos mecanismos de proteco so a aplicao de
timeouts nas sesses e mudanas nos IDs de sesso
quando os utilizadores executam aces sensveis. A
durao de cada sesso depende no nvel de importncia
dos dados a serem protegidos. Caso se pea uma segunda
autenticao, um segundo ID de sesso dever ser criado e
a o original destrudo.
Esta regra ajuda a proteger contra: Falhas na autenticao e
gerncia de sesses, Cross Site Request Forgery.

Os ataques contra sesses so normalmente focados na


obteno de uma sesso vlida, abusando dos utilizadores,
ou tirando vantagem de falhas da funcionalidade da camada
de gerncia de sesses. O conhecimento dos mtodos
usados pelos atacantes no obrigatrio se criarmos
sesses seguras baseadas nesta regra.

Regra 5 Segurana de comunicao


Como mencionado previamente noutras regras, a importncia
de proteger partes especficas quando esto a ser
transmitidas elevada, pelo que iremos agora analisa-la com
maior detalhe. O requisito de proteco de dados em trnsito
no um novo requisito mas cuja implementao por parte
das aplicaes por vezes falha.

Os valores da sesso usados na aplicao devem seguir


princpios semelhantes aos de passwords seguras, como
mencionado anteriormente. Os IDs de sesso usados para
identificar utilizadores autenticados individuais devem ter
tamanho suficiente para prevenir ataques de fora bruta o
tamanho deste ID vai ser determinado pela importncia dos
dados ou recursos que estamos a tentar proteger. Devemos

Esta provavelmente a regra mais simples - uma questo


de ter a certeza que a nossa aplicao obriga o uso de um

63

COMUNIDADE PTCoreSec
SEGURANA NA WEB (PARTE 3)
utilizadores com as correctas permisses acedem a tais
funes. A autenticao e autorizao no devem ser
efectuadas apenas uma vez, mas sempre que um utilizador
usa uma funo mais sensvel. Um exemplo real de falha
neste tipo de sistemas, foi quando o site da T-mobile foi
hackado em 2005, o que levou a que a conta de Paris Hilton
fosse comprometida. O sistema de reset da password no site
da T-mobile pedia que um utilizador provasse quem era
pedindo lhe para inserir o seu numero de telemvel, o site
ento mandaria para esse numero um token nico que
meteriam no site e avanavam para uma pagina de reset de
password. O problema com este design que se assumia
que os utilizadores s iriam aceder a pgina de reset aps
autenticao. Um atacante chamado Luckst4w encontrou
uma falha que permitia que se acedesse directamente
pgina de reset sem ser necessrio nenhum tipo de prova de
quem somos.

mecanismo seguro de transporte como SSL, TLS ou SSH.


Tambm dever ter-se a certeza que a aplicao obriga ao
uso especfico de verses destes mecanismos como SSL
verso 3 ou SSH verso 2.
Se esta regra to simples, ento porque que isto continua
a correr mal? Estes problemas normalmente originam de
duas decises:
1.

Quando usar estes mecanismos;

2.

Que verso usar.

A falha mais comum vem da deciso numero 1 - a falha de


proteco do incio de sesso e a informao da sesso
depois da autenticao. A proteco deve ser iniciada logo
que o utilizador entre no site, o que significa que as pginas
de login devero ser HTTPS em vez de HTTP. Em vez de se
encriptar apenas o login esta proteco dever ser
continuada durante toda a sesso, no apenas para
submisso de credenciais. Se os dados forem altamente
sensveis, dever continuar a usar-se mecanismos de
transporte seguro internamente, por exemplo do servidor
aplicacional para o servidor de bases de dados.

Dever sempre assumir que se o seu recurso acessvel por


qualquer um dos seus utilizadores, qualquer pessoa ir
aceder a esse recurso.

Regra 7 Armazenamento seguro

O ltimo ponto a ser analisado o uso de um mecanismo


que criptograficamente seguro e no tem falhas no design.
Um bom exemplo de um mecanismo que no seguro o
SSLv2; mltiplas vulnerabilidades so consequncia de
falhas no design e no de falhas criptogrficas. Previamente
foram mencionados dois mecanismos de proteco que so
bons exemplos de como proteger os dados em transmisso.
Quando se est a fazer a escolha do mecanismo de
proteco que se deve utilizar, deve escolher-se um que
considerado seguro como SSLv3, TLSv1 ou SSHv2.

Iremos agora analisar como criar armazenamento seguro. J


conseguimos criar segurana a volta dos pontos de entrada
e sada de dados, implementmos mensagens de erro
sanitizadas, crimos controlo de acesso fortes e protegemos
a transmisso da nossa informao, mas no podemos
negligenciar a segurana dos dados que esto parados.
Os requisitos para armazenamento de dados seguro, como
por exemplo dados relativos a cartes de crdito, so bvios,
mas tambm temos de armazenar dados como passwords e
detalhes de sesso seguramente quando no esto em
transmisso. No s temos de identificar os dados que
precisam de ser protegidos mas tambm os mecanismos que
se podem usar para os proteger. A seleco do mecanismo
de proteco segue o mesmo protocolo de escolha para
comunicao segura. Nunca criar o seu prprio mecanismo e
no usar mecanismos fracos como DES, MD4 ou SHA-0.

Regra 6 Acesso seguro a recursos


Acesso seguro a aplicao j foi um tpico falado mltiplas
vezes nas regras anteriores mas iremos agora falar em
detalhe sobre outras situaes. Os problemas de
autenticao e autorizao de utilizadores em conjunto com
uma gerncia segura de sesses j foram abordados
anteriormente mas tudo isto pode ser perdido por ms de
decises design.

No queremos que esta regra se torne numa aula de


criptografia mas deve-se pelo menos assegurar que os
valores seguintes so usados nos mecanismos simtricos,
assimtricos e de hash:

Se um design depende de segurana por obscuridade, ento


existe uma elevada probabilidade de que este venha a falhar.
Uma norma comum para criar um certo nvel de segurana a
volta de localizaes sensveis esconde-las do utilizador,
no publicando quaisquer links para estas localizaes. Isto
falha como proteco pois existem ferramentas automticas
que iro descobrir estas localizaes e permitir aos
atacantes acesso directo. Se a localizao contem
contedos sensveis como backups ou outras funes
(exemplo: /admin) devero usar-se medidas de controlo de
acesso fortes de maneira a ter a certeza de que apenas

* Simtricos 256 bits ou mais


* Assimtricos 2048 bits ou mais
* Hashes 168 bits ou mais
Tambm se deve usar uma localizao segura para
armazenamento das chaves de encriptao. Armazenar as
chaves no servidor da aplicao normalmente no
considerado seguro. A ltima parte a no esquecer no
escrever nenhuma das chaves no cdigo fonte.

64

COMUNIDADE PTCoreSec
SEGURANA NA WEB (PARTE 3)
Depois de instalado o seguinte ecr mostrado:

Regra 8 Auditoria e logging


Esta uma regra diferente das anteriores, foi criada apenas
como um princpio a seguir em desenvolvimento seguro e
no a causa de uma vulnerabilidade. importante
relembrar que todas as regras anteriores so essencialmente
proteces contra as causas principais de vulnerabilidades
comuns. Resumidamente, as regras anteriores explicam em
detalhe maneiras de prevenir vulnerabilidades comuns no
seu cdigo, enquanto que esta regra no est ligada a
nenhuma vulnerabilidade comum mas algo que no pode
ser ignorado se quiser criar aplicaes seguras.
Como vimos com a regra que falava de tratamento de erros/
excepes, estas iro ocorrer em todas as aplicaes e
dever estar preparado para lidar com elas. Temos de
pensar da mesma maneira para Auditoria e Logging, na
medida em que importante criar diversos logs de diferentes
eventos criados e usados pela nossa aplicao e aces dos
utilizadores.

Este o ecr principal de checklists no Agnitio. No entanto


antes de se comear a usar, temos de criar um profile de
aplicao. Para isso dirigimo-nos a 2 tab e preenchemos
todos os campos referentes aplicao que estamos a
auditar como se v no seguinte exemplo:

Quando est a tentar implementar esta regra, importante


perceber quando dever criar uma entrada nos logs, para
onde deve a entrada ser escrita, que informao deve ser
contida no log e tambm que informao no dever ser
contida.
Sempre que possvel, os logs devero ser armazenados
centralmente num servidor com controlos de acesso fortes.
Os logs devero ser monitorizados com um produto similar
ao Tripwire que ir monitorizar modificaes ou tentativas de
acesso no autorizadas. As entradas nos logs geradas pela
sua aplicao devero conter informao suficiente que seja
til para analise forense e resoluo de problemas resolver
problemas e mas no dados sensveis como dados relativos
a cartes de crdito. Dever sempre que possvel tentar
entender o que informao suficiente e dados sensveis
no seu trabalho. Alguns dos exemplos de coisas que se deve
logar so horas, data, nome do computador e endereo IP de
onde veio a ligao.
Agnitio Por a teoria em prtica
Depois de toda a teoria, chegou a hora de pormos em prtica
todas estas regras. Nesta parte do artigo iremos falar sobre o
Agnitio, um software gratuito usado para auditar e
desenvolver software seguro. Podem obter uma cpia deste
software em: http://sourceforge.net/projects/agnitiotool/ .

Depois de fazer save podemos seleccionar esta aplicao no

65

COMUNIDADE PTCoreSec
SEGURANA NA WEB (PARTE 3)
detectados diminuiu ou no.

menu principal e, depois de preencher todos os campos e


clicar em Start, ir ver um ecr semelhante a este:

A sub-tab "Application metrics" tambm mostra algo bastante


interessante, nomeadamente uma visualizao grfica das
diferenas entre as vrias anlises:

Aqui o Agnitio apresenta um conjunto de regras que so


baseadas em conceitos que falmos anteriormente. Depois
de tudo preenchido, dever ter-se algo parecido a:

Isto so apenas alguns exemplos do que se pode fazer com


o Agnitio.
Vamos agora verificar a ltima tab chamada Static
analysis.Nesta tab podemos escolher qual a linguagem que
estamos a auditar, o Agnitio ir ento dar load de um
conjunto de regras para essa linguagem e podemos escolher
um projecto. Em seguida, podemos, de maneira automtica,
auditar ficheiros, nos quais o Agnitio ir procurar keywords
que foram seleccionadas para esta linguagem e onde
normalmente se encontram vulnerabilidades. Ao encontrar

E carrega-se em Save. Depois de realizar 2 reviews a uma


aplicao poder usar-se a tab de reporting, na qual
podemos ver reports anteriores, comparar as diferentes
reviews que realizmos e verificar se o nmero de erros

66

COMUNIDADE PTCoreSec
SEGURANA NA WEB (PARTE 3)
estas keywords, o Agnitio ir evidenciar a sua presena no
cdigo mudando a sua font para azul e o fundo para amarelo
e, quando clicamos nestas keywords, o Agnitio mostra um
conjunto de perguntas de perigo associadas a estas funes.

Estes so apenas alguns exemplos de funcionalidades do


Agnitio. possvel tambm gerar relatrios e exportar em
diversos formatos. Para mais informao sobre o Agnitio,
dirijam-se a http://bit.ly/MVxr1o e http://bit.ly/MfiTM1
para verem apresentaes sobre programao segura e o
Agnitio.
O bom do Agnitio que disponibiliza uma forma de qualquer
utilizador possa criar o seu prprio conjunto de regras, no
estando por isso limitado s regras que se encontram por
defeito na base de dados do Agnitio (C#, Java, Objective-C,
e PHP). Desta forma, caso escreva cdigo Ruby, pode criar
o seu prprio conjunto de regras para Ruby .

Concluso:
Apresentmos durante esta trilogia de artigos, diferentes
vulnerabilidades, bem como um conjunto de regras para
evitar/corrigir estas vulnerabilidades. Mostrmos tambm
software que nos pode auxiliar neste processo e permite a
gerao de relatrios de modo a que todas as auditorias
fiquem organizadas. Agora cabe a vocs seguirem estas

AUTOR
Escrito Por Tiago Henriques @balgan, balgan@ptcoresec.eu
Equipa PTCoreSec:

http://www.ptcoresec.eu

67

No Code
Plano Tecnolgico da Educao: Seis anos depois
O empreendedorismo como uma opo de auto-emprego e inconformismo
Projecto em Destaque na Comunidade Portugal a Programar : Notification Agenda

No Code
Plano Tecnolgico da Educao: Seis anos depois
Em 24 de Novembro de 2005, aps um trabalho alargado de
recolha de ideias e contributos das diversas reas do
Governo e da sociedade civil, levado a efeito pela Unidade
de Coordenao do Plano Tecnolgico, o Conselho de
Ministros aprovou um documento de referncia e
compromisso pblico, visando a aplicao de uma estratgia
de crescimento e competitividade baseada no conhecimento,
na tecnologia e na inovao.

A igualdade de oportunidades no
equipamentos tecnolgicos;

A modernizao das escolas, possibilitando que os


estabelecimentos de ensino funcionem em rede e que
os professores trabalhem de forma colaborativa.

acesso aos

O Plano Tecnolgico da Educao tinha como metas


fundamentais:

O Plano Tecnolgico era uma agenda de mudana para a


sociedade portuguesa, que visava mobilizar as empresas, as
famlias e as instituies para que, com o esforo conjugado
de todos, pudessem ser vencidos os desafios de
modernizao que Portugal enfrentava. Indicava uma
estratgia de desenvolvimento e competitividade assente em
trs eixos:
Conhecimento
Qualificar os portugueses
para a sociedade do conhecimento, fomentando
medidas estruturais vocacionadas para elevar os
nveis educativos mdios da populao, criando um
sistema abrangente e diversificado de aprendizagem
ao longo da vida e mobilizando os portugueses para a
Sociedade de Informao.

Ligar todas as escolas Internet em banda larga de


alta velocidade. Todas as escolas com uma ligao de
pelo menos 48 Mbps;

Atingir um rcio de dois alunos por computador;

Formar e certificar 90 por cento dos docentes em


tecnologias da informao e da comunicao.

Para o cumprimento das metas definidas, o Plano


Tecnolgico da Educao, aprovado em agosto de 2007,
apostava em trs eixos de actuao: tecnologia, contedos e
formao.

Tecnologia Vencer o atraso cientfico e


tecnolgico, apostando no reforo das competncias
cientficas e tecnolgicas nacionais, pblicas e
privadas, reconhecendo o papel das empresas na
criao de emprego qualificado e nas actividades de
investigao e desenvolvimento (I&D).

Eixo Tecnologia

Eixo Contedos

Kit tecnolgico

Portal da escola

Internet de banda
Escola Simplex e
larga de alta veloci- Plataforma de gesdade
to escolar
Internet na sala de Portal institucional
aula e Redes de rea do Ministrio da
local
Educao
Carto da Escola
Escol@ segura e
Videovigilncia

Inovao
Imprimir um novo impulso
inovao, facilitando a adaptao do tecido produtivo
aos desafios impostos pela globalizao atravs da
difuso, adaptao e uso de novos processos, formas
de organizao, servios e produtos.

Eixo Formao
Competncias TIC
e Formao e Certificao
Avaliao electrnica
Estgios TIC
Academias TIC

Tabela 1. Eixos do plano tecnolgico

Caracterizao Geral do Plano Tecnolgico da Educao

1.

Tendo presente que estudos internacionais demonstram uma


correlao positiva entre a utilizao das tecnologias de
informao e comunicao (TIC) em contexto de sala de aula
e o aproveitamento escolar dos alunos, o Plano Tecnolgico
da Educao definiu como principal objetivo colocar, at
2010, Portugal entre os cinco pases europeus mais
avanados na modernizao tecnolgica do ensino.

Eixo Tecnologia

A insuficincia das infraestruturas de TIC constitua o


principal fator inibidor da utilizao de tecnologia no ensino.
As medidas do Plano Tecnolgico da Educao
implementadas no eixo Tecnologia pretendiam dar
resposta s principais barreiras observadas em termos de
infra-estruturas e acessos, nomeadamente a falta de
computadores e outros equipamentos de apoio nas escolas,
como impressoras, videoprojectores e quadros interactivos, e
o seu carter obsoleto em muitas situaes, a reduzida
acessibilidade aos equipamentos por parte de alunos,
docentes e no docentes, o acesso Internet no

Assim, o Plano Tecnolgico da Educao pretendia ser um


meio para:

A melhoria do ensino e dos resultados escolares dos


alunos;

69

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
Kit Tecnolgico Escola

generalizado a todos os computadores, com velocidades


insuficientes
e
abrangendo
reas
limitadas
dos
estabelecimentos de ensino e as redes de rea local no
estruturadas e ineficientes.

O nmero limitado de computadores e de outros


equipamentos de apoio, assim como a sua antiguidade,
constituam barreiras utilizao de tecnologia no processo
de ensino e impediam o cumprimento das ambiciosas metas
comunitrias relativas ao nmero de alunos por computador.

Paralelamente, as crescentes necessidades ao nvel de infraestruturas e o aumento acentuado do nmero de


equipamentos nas escolas vieram enfatizar a necessidade
de interveno ao nvel do apoio tcnico aos
estabelecimentos de ensino para as operaes de gesto e
manuteno das infra-estruturas TIC e da segurana dos
equipamentos e das escolas, dos alunos, docentes e no
docentes.

Neste contexto, foi crucial aumentar o nmero de


computadores e de equipamentos de apoio na escola e
promover a sua utilizao na sala de aula e na gesto
escolar.
O Kit Tecnolgico Escola tinha como objetivo promover a
utilizao de tecnologia no processo de ensino, dotando
todas as escolas de um nmero adequado de computadores,
de impressoras, de videoprojectores e de quadros
interactivos, de modo a atingir o rcio de dois alunos por
computador, a assegurar que nenhuma escola apresenta um
rcio de alunos por computador superior a cinco, a assegurar
um videoprojector em todas as salas de aula, um quadro
interactivo em cada trs salas de aula e garantir que a
proporo de equipamentos com antiguidade superior a trs
anos no ultrapassasse os 20%.

Neste contexto, definiu-se como prioritria a implementao


dos seguintes projectos:

Eixo de
Actuao

reas de
Interveno

Tecnologia

Computadores

Cartes de aluno

Equipamento de apoio

Sistemas de
electrnicos

Conectividade
Redes de rea local

segurana

Para a concretizao deste objectivo, foram estipuladas as


seguintes medidas:

Apoio Tcnico s escolas

Projectos Chave

Kit Tecnolgico Escola

Fornecer s escolas com 2. e 3. ciclos do ensino


bsico ou com ensino secundrio 310.000
computadores, 9.000 quadros interactivos por ano e
25.000 videoprojectores at ao final de 2010.

Celebrar contratos de manuteno e de renovao de


equipamento com as entidades fornecedoras de
equipamentos s instituies de ensino.

Internet em Banda Larga de Alta Velocidade

Aumento do nmero de computadores e de equipamento de apoio

As limitaes ao nvel da conectividade constituam entraves


significativos maior utilizao de tecnologia no ensino.
Grande parte das escolas registava velocidades de acesso
limitadas e cerca de 20.000 computadores no se
encontravam ligados Internet.

Aumento da disponibilidade e dos equipamentos


para utilizao fora dos perodos lectivos.
Internet de Banda Larga de Alta Velocidade
Reviso do modelo de conectividade
Internet nas Salas de Aula
Projectos

Dois teros das escolas contratavam mais de um acesso


Internet de banda larga, representando potencial duplicao
de custos na ordem dos 20%.Como tal, foi fundamental rever
o modelo de conetividade das escolas, assegurando que
todos os computadores nas escolas tinham ligao Internet
de banda larga com velocidade adequada, maximizando a
eficincia dos investimentos, de forma a aumentar
progressivamente a velocidade mnima de acesso das
escolas Internet de 4 Mbps para 48 Mbps, assegurar que
todos os computadores das escolas estivessem ligados
Internet de banda larga e que o rcio de alunos com ligao
Internet de banda larga fosse de 2:1 no final de 2010.

Reestruturao das redes de rea local


Carto Electrnico do Aluno
Generalizao da utilizao de plataformas de
carto de aluno
Videovigilncia
Generalizao da utilizao de sistemas de segurana electrnicos.
Outros Projectos
Centro de Apoio Tecnolgico s Escolas

70

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
Internet nas Salas de Aula. Redes de rea Local

Videovigilncia

A infra-estrutura de redes de rea local, at implementao


do PTE, no satisfazia as necessidades de conectividade e
de mobilidade dos agentes e constitua um entrave maior
utilizao de tecnologia. Existiam redes de rea local em
quase todas as escolas. No entanto, num tero das escolas,
as redes de rea local no eram estruturadas e, na maior
parte dos estabelecimentos, encontravam-se confinadas a
reas pr-definidas e limitadas, o que restringia a sua
utilizao. As operaes de manuteno e de gesto das
redes de rea local das escolas estavam, na maior parte dos
casos, a cargo de professores e de auxiliares
administrativos, o que afastava os agentes das suas funes
pedaggicas e de gesto e originava ineficincias na
administrao e na operao das redes. Neste contexto,
pretendia-se reestruturar as redes de rea local das escolas,
dotando as redes em causa das funcionalidades necessrias
para uma utilizao ubqua e segura de Internet e de
intranets. Para a implementao deste projecto pretendeu-se
instalar redes de rea local, com acesso remoto e separao
segura de redes em todas as escolas, conjuntamente com
pontos de acessos cablados e sem fios nas salas de aula,
nas principais reas de estudo e de convvio da escola.

Inicialmente, mais de metade das escolas no dispunha de


sistemas de alarme contra intruso. Nas escolas onde se
encontravam implementados sistemas de alarme (49%) ou
de videovigilncia (13%), observavam-se vrias ineficincias,
designadamente dificuldades de monitorizao, formatos de
interveno desadequados, tempos de interveno
demorados e formatos de operao e gesto ineficientes.
Desta forma, este projecto tinha como objectivo, at ao
terceiro trimestre de 2008, implementar sistemas de alarme e
de videovigilncia com monitorizao local e remota,
permitindo disponibilizar equipamentos e servios, de forma a
aumentar a segurana de pessoas e de bens, assegurando
a implementao de um modelo de monitorizao e de
interveno eficiente que salvaguardasse o investimento e
integridade dos equipamentos.
Medida: Programa E-escola e E-escolinha
At 2010 390 milhes de euros
200.000
Comforam fornecidos pelas empre(at Julho/08)
putad
sas de comunicaes pela
ores
285.000
obteno de licenas UMTS
En(at Nov/08)
(comunicaes mveis da 3
tregu
960.000
gerao). A partir de 2010
es
(2009)
financiado pelo oramento de
1.220.000 Beneficirios Inscriestado.
tos
Fonte: http://www.cmjornal.xl.pt/
detalhe/noticias/nacional/ensino/
faltou-distribuir-400-mil370.000
portateis, consultado em
10/07/2012
Medida: Kit tecnolgico

E-escola

E-escolinha
(n computadores entregues)

Carto Electrnico do Aluno


A implementao de plataformas de cartes electrnicos de
aluno aumenta a segurana e representa ganhos de
eficincia importantes para as escolas. Permite a utilizao
da tecnologia por docentes, no docentes e encarregados de
educao permitindo, entre outros aspectos, suprimir a
circulao de numerrio, controlar as entradas e as sadas
dos alunos e consultar o processo administrativo, o percurso
acadmico e os consumos dos alunos.

Computadores
(N Computadores Entregues)

228.361
(2009)

Verba mxima atribuda


279.000.000 + IVA
Fonte: Resoluo do Conselho
de Ministros n. 133/2007

310.00
(2010)

Medida: Kit tecnolgico (Continuao)


Projectores
(N Projectores
Entregues)

Verba mxima atribuda


25.100.000 + IVA
Fonte: Resoluo do Conselho
de Ministros n. 136/2007

Quadros
Interactivos
(N Quadros
Interactivos
Entregues)

Verba mxima atribuda


9.000.000 + IVA
Fonte: Resoluo do Conselho
de Ministros n. 132/2007

28.711
7.613
(2009)

9.000
(2010)
Medida: Internet em Banda Larga de Alta Velocidade
Verba mxima atribuda
14.500.000 + IVA
% das escolas
100 %
pblicas ligadas
Fonte: Resoluo do Conseem banda larga
lho de Ministros n. 23/2008
e Portaria n204/2008

O processo de implementao das plataformas em causa


regista ineficincias: as escolas tinham autonomia para
decidir sobre a implementao de sistemas de cartes
electrnicos de aluno, cabendo escola escolher o seu
fornecedor. Por essa razo, encontravam-se implementadas
plataformas de mais de 10 fornecedores distintos, o que
origina dificuldades de troca de informao de forma
electrnica entre as escolas e torna o investimento
ineficiente. Pelo acrscimo de segurana e de eficincia que
proporcionam, foi crucial generalizar a todas as escolas a
utilizao destas plataformas e de funcionalidades-chave
como o controlo de acessos e a substituio de numerrio.
Era igualmente fundamental assegurar que as plataformas
utilizadas fossem compatveis entre si, de maneira a permitir
acompanhar o registo do aluno ao longo do seu ciclo de vida
na escola, bem como a potenciar o desenvolvimento e a
utilizao de funcionalidades adicionais.

Medida: Internet na sala de aula e redes de rea local


% das escolas
pblicas com
internet na sala de
aula e redes de
rea local

Verba mxima atribuda


75.000.000 + IVA
Fonte: Resoluo do Conselho de Ministros n. 134/2007

35,11%
das escolas com 2. e 3. ciclos
do ensino bsico e com ensino
secundrio com redes de rea
local com e sem fios

Medida: Carto da Escola


Ponto de situao
do projecto

Verba mxima atribuda


18.000.000 + IVA
Fonte: Resoluo do Conselho de Ministros n. 124/2008

Contrato visado pelo Tribunal


de Contas em Outubro de 2009
Novo carto nas escolas em
2010

Medida: Escol@ segura e Videovigilncia

O projecto pretendia promover a utilizao de tecnologia,


dotando todas as escolas de plataformas de carto de aluno
at ao 2. trimestre de 2008.

71

Ponto de situao
do projecto

Verba mxima atribuda


30.000.000 + IVA
Fonte: Resoluo do Conselho de Ministros n. 135/2007
e Portaria n 300/2009

Verba mxima
prevista para o
eixo tecnologia
at 2010
(valor aproximado)

840.600.000 + IVA

51%
das cerca de 1 200 escolas
com 2. e 3. ciclos do ensino
bsico e com ensino secundrio com sistemas de videovigilncia instalados (561 escolas)

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
Quadro resumo do eixo tecnologia
2.

Eixo de
Actuao

Eixo Contedos

Os contedos e as aplicaes so essenciais para a


alterao das prticas pedaggicas, ao favorecer o recurso a
mtodos de ensino mais interactivos e construtivistas,
contribuindo para criar uma cultura de aprendizagem ao
longo da vida. Tm um forte papel catalisador da alterao
das prticas de gesto e da adopo de novos mtodos e
ferramentas de trabalho conducentes a melhores nveis de
eficincia nas escolas.

reas de
Interveno

Utilizao muito reduzida de meios de comunicao


electrnicos correio eletrnico, fruns, chats, etc.
resultando no uso intensivo do suporte papel na
maioria dos processos e das comunicaes entre
agentes da comunidade de ensino.

Software opensource

Portal da escola com funcionalidades de partilha


de contedos, ensino distncia e colaborao.
Escola Simplex
Plataforma electrnica de apoio gesto
Outros Projectos
Projectos

Manuais escolares electrnicos


Disponibilizao de manuais escolares e de contedos em formato electrnico
Incentivo utilizao de manuais e contedos
informticos
Plataforma de comunicao electrnica integrada
Generalizao da utilizao de ferramentas de
comunicao em suporte informtico entre os
agentes da comunidade educativa

A sua utilizao no se encontra generalizada a toda


a comunidade de ensino.

A partilha de conhecimento e de melhores prticas de


gesto est circunscrita ao crculo de relaes
informais dos membros dos conselhos executivos e
dos auxiliares administrativos.

Produo e partilha de
aplicaes de gesto

Mais-Escola.pt

O nmero limitado de funcionalidades disponibilizadas


pelas
plataformas
colaborativas
com
maior
penetrao em Portugal (p. ex., Moodle) e o
subaproveitamento das suas potencialidades (pois
so utilizadas fundamentalmente como canal de
comunicao e de partilha de documentos).

Informatizao de manuais
escolares

Projectos Chave

A baixa utilizao de contedos e de aplicaes


motivada, em parte, pela escassez de contedos
informticos de qualidade em lngua portuguesa e
adaptados utilizao pedaggica em ambiente de
aula.

A reduzida utilizao de TIC na gesto operacional


nas escolas e o conhecimento limitado das solues e
aplicaes disponveis, observando-se elevadas
assimetrias entre escolas.

Produo e partilha de
contedos

Certificao de contedos
e aplicaes

As medidas do Plano Tecnolgico da Educao


implementadas no eixo Contedos pretendiam
contrariar os principais inibidores de modernizao
identificados, nomeadamente

Contedos

Mais-Escola.pt
A necessidade de interveno no eixo Contedos era
ainda mais premente, uma vez que o caminho para a
sociedade do conhecimento implica no apenas a
massificao de equipamentos informticos e de
conetividade, mas tambm a alterao dos mtodos
tradicionais de ensino e de aprendizagem, para a qual era
preeminente a existncia de ferramentas, de materiais
pedaggicos e contedos adequados.
A nvel internacional, no mbito dos respectivos processos de
modernizao tecnolgica do ensino, a maior parte dos
pases desenvolveu internamente plataformas de e-learning.
Na maioria dos casos, a promoo do desenvolvimento e da
utilizao destas plataformas figurava nas prioridades das
medidas de poltica. O desenvolvimento de plataformas
prprias de e-learning era motivado pela necessidade de
assegurar a disponibilizao das funcionalidades desejadas,
de garantir fiabilidade e facilidade de utilizao, no
olvidando a importncia de criao de efeito de rede e as
preocupaes de segurana, de interoperabilidade e de
transferibilidade dos contedos entre diferentes aplicaes.

Neste contexto, os seguintes projectos foram considerados


prioritrios:

De acordo com os resultados do estudo de diagnstico, a


utilizao das plataformas em questo revelava as mesmas

72

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
limitaes identificadas
nomeadamente:

em

pases

de

Um elevado nmero de estabelecimentos de ensino j


recorria a aplicaes informticas para apoiar a gesto
escolar. No entanto, o leque de servios informatizados era
ainda muito reduzido e a maior parte dos processos recorria
ao suporte papel, gerando elevadas ineficincias na troca de
informao entre aplicaes e estabelecimentos de ensino, e
entre estes e os servios do Ministrio da Educao.

referncia,

Ao ser fundamentalmente utilizada por professores e


entre professores, a sua utilizao no se encontra
generalizada junto dos restantes membros da
comunidade educativa.

utilizada apenas como um novo canal para as


prticas de ensino tradicionais: um canal de
interaco e de comunicao entre agentes e de
distribuio de material de aula.

No esto a ser exploradas todas as potencialidades


disponveis em plataformas virtuais de conhecimento:

Subaproveitamento das plataformas como catalisador


para a alterao das prticas pedaggicas.

As plataformas ainda no esto a ser usadas para a


informatizao da gesto administrativa dos
estabelecimentos.

O facto de existirem mais de 10 fornecedores de sistemas


nas escolas sistemas que, na maioria dos casos, no
eram compatveis entre si, gerava ineficincias, dada a
reduo do efeito de escala e da flexibilidade de
fragmentao e de escalabilidade dos investimentos. A
partilha de boas prticas de utilizao intensiva de TIC na
gesto operacional das escolas era maioritariamente
efetuada com base em redes de contatos informais de
docentes e de auxiliares administrativos, no existindo
mecanismos que potenciassem a sua disseminao e
aclarassem a adopo de aplicaes ou processos eficazes.
Foi primordial, neste contexto, desenvolver uma plataforma
de apoio gesto administrativa escolar, incorporando a
informatizao de processos crticos (p. ex., matrculas,
faltas, actas, etc.) e ferramentas colaborativas, por forma a
dinamizar a produo de contedos e de aplicaes de
gesto e a potenciar a modernizao tecnolgica e a
massificao de boas prticas.

As plataformas de e-learning desempenham um papel fulcral


nos processos de modernizao tecnolgica do ensino, por
serem catalisadoras da produo e utilizao de
ferramentas, contedos e informaes em suporte
electrnico como complemento ou mesmo substituto aos
mtodos tradicionais de ensino em sala de aula. Permitem a
mudana das prticas pedaggicas, promovendo prticas de
ensino mais interactivas, construtivistas, assim como a
criao da cultura de aprendizagem ao longo da vida
minimizando a info-excluso, permitindo o acesso remoto e
de baixo custo a contedos, mdulos e cursos. Reduzem a
excluso do ensino e da aprendizagem de cidados com
necessidades especiais, sendo catalisadoras de abordagens
colaborativas ao ensino e gesto e permitindo a alterao
das prticas de gesto.

Para a concretizao foram estabelecidas as seguintes


medidas:

Lanamento durante o ano lectivo de 2008-2009 da


plataforma Escola Simplex, plataforma virtual que
permita, entre outros:

Informatizao de processos crticos das


escolas.

Comunicao entre agentes da comunidade de


ensino e agentes externos.

Este projeto tinha como objetivo promover a produo, a


distribuio e a utilizao de contedos informticos nos
mtodos de ensino e aprendizagem (p. ex., exerccios,
manuais escolares, sebenta electrnica, etc.); encorajar o
desenvolvimento
do
porteflio
digital
de
alunos;
complementar o ensino tradicional e promover novas prticas
de ensino, minimizar a info-excluso, disponibilizar
contedos e ferramentas que tornassem vivel o ensino a
distncia e o desenvolvimento da articulao entre a escola e
o mercado de trabalho (p. ex., integrando funcionalidades
como bolsas de emprego).

Partilha de melhores prticas de gesto e de


ferramentas de suporte gesto.

Definio e implementao de um modelo de gesto e


Medida: Mais-Escola.pt
Portal das escolas
Medida: Escola Simplex

Escola Simplex

Para se concretizar, o projecto tinha como medidas o


lanamento progressivo durante o ano lectivo de 2008-2009
da plataforma Mais-Escola.pt, plataforma virtual de
conhecimento.

Verba mxima atribuda


30.000.000+ IVA
Fonte: Resoluo do
Conselho de Ministros
n. 35/2009 e Portaria
n. 287/2009, de 20de
Maro

www.portaldasesc
olas.pt

de operao para a Escola Simplex que assegure a


sua dinamizao e utilizao auto-sustentada.

Escola Simplex

Quadro resumo do eixo contedos

73

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
3.

de mecanismos de certificao e valorizao profissional de


competncias

Eixo Formao

O dfice de competncias em TIC era apontado como uma


das principais barreiras utilizao da tecnologia nas
escolas em Portugal. Em qualquer esforo de modernizao
tecnolgica, o investimento em equipamentos, contedos e
aplicaes e o investimento em formao e certificao de
competncias TIC so mutuamente complementares.

Neste contexto, definiu-se como prioritria a implementao


dos seguintes projectos:
Formao e Certificao
Formao Pro

Competncias

TIC

Em Portugal, foram j dados alguns passos no sentido de


melhor adequar a formao em TIC s reais necessidades
dos agentes. Em 2006 foram definidos referenciais de
formao para diferentes perfis de professores, numa
tentativa de melhor adequar o investimento em formao s
necessidades dos docentes e de criar as bases necessrias
para a criao de planos de formao contnua para cada
tipologia de professores.

A utilizao das TIC, nomeadamente da WEB, contm um


potencial de mudana do paradigma pedaggico na
formao, apontando para um incremento da qualidade da
aprendizagem. A aprendizagem deve ser constituda por
aces humanas e tecnolgicas na mltipla rede de
construo de saberes e fazeres, de tal modo que a
aprendizagem em aula e a aprendizagem distncia se
combinem e complementem, extraindo de cada modelo as
mais-valias que proporcionam uma melhor aprendizagem.
Este processo privilegia a formao de competncias volta
das quatro aprendizagens fundamentais exigidas num tempo
marcado pela Sociedade da Informao: aprender a
conhecer, aprender a fazer, aprender a conviver e
aprender a ser (Unesco; 1996).

Este projecto pretendia promover uma eficiente formao em


TIC dos agentes da comunidade educativa, promover a
utilizao das TIC nos processos de ensino e aprendizagem
e na gesto administrativa da escola e contribuir para a
valorizao profissional das competncias TIC, sendo que
estabelecia, como objectivo inicial, ter 40% dos docentes
certificados em 2009 e 90% dos docentes certificados em
2010.

Com as medidas a implementar no eixo Formao,


pretendia-se dar uma resposta clara aos principais fatores
inibidores da modernizao em matria de competncias,
nomeadamente a reduzida utilizao das TIC nos mtodos
de ensino e aprendizagem; a formao de docentes pouco
centrada na utilizao pedaggica das TIC e a inexistncia

Eixo de
Actuao

de

No intuito de garantir a concretizao de tais pretenses,


foram criados cursos de formao modulares e progressivos
em TIC para docentes e no docentes, incorporando uma
forte vertente de utilizao das TIC em aula e na gesto
administrativa das escolas e institudo um programa de
certificao obrigatria dos agentes da comunidade de
ensino na rea das TIC.

Formao

Avaliao Electrnica
A utilizao de meios informticos na avaliao escolar tem
um forte papel indutor da modernizao, uma vez que
estimula a procura de tecnologia por todos os agentes da
comunidade educativa: alunos, docentes e Encarregados de
Educao. Adicionalmente, a adopo de sistemas
informticos na avaliao tem efeitos positivos na
harmonizao de critrios de avaliao e na monitorizao e
uniformizao de ritmos de aprendizagem, uma vez que
simplifica a aplicao generalizada de provas e critrios de
avaliao objectivos e permite o fcil acompanhamento
estatstico de resultados.

Formao de docentes e no docentes


reas de
Interveno

Certificao de competncias de docentes e alunos


Utilizao de
aprendizagem

TIC

nos

processos

de

ensino-

Projectos Chave

Formao e certificao de competncias TIC


Formao Pro
Reestruturao do modelo de formao de
docentes em TIC
Projectos

Este projecto tinha como objectivo promover a utilizao


pedaggica das TIC, reforar a segurana e imparcialidade
nos momentos de avaliao e uniformizar critrios de
avaliao e ritmos de aprendizagem. Para a concretizao
deste projecto, foram projectadas provas de avaliao
nacionais em suporte informtico, sendo que o projecto,
segundo as previses iniciais, teria incio com provas de
diagnstico e de aferio no decorrer do ano lectivo 20072008.

Instituio de mecanismos de certificao de


competncias TIC
Avaliao Electrnica
Utilizao de meios informticos na avaliao
escolar
Outros Projectos
Integrao das TIC nos mtodos de ensino e aprendizagem
Literacia em Aplicaes Open Source

74

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
O quadro apresentado abaixo enuncia o ponto de situao

banda larga mvel do mundo e um dos Pases com mais


computadores portteis por mil habitantes.

Medida: Formao e certificao de competncias TIC Formao Pro

A natureza da mudana que a integrao das TIC promove


na organizao pedaggica afecta no s o professor, mas
tambm o aluno. A ambos passa a ser solicitado que
interajam com diferentes meios e sujeitos, a compartilhem o
conhecimento, a construam novas relaes, fazendo e
desfazendo a informao, reconstruindo-a em novos
espaos, em diferenciados significados e novas forma de
organizao.

14.541.152,57

Custo total de
implementao de
competncias TIC

Nota: Alguns custos podero ser


equacionados no mbito dos
restantes eixos do Plano Tecnolgico da Educao
Fonte: Costa, F. A., Rodrigues, .,
Peralta, M. H., Cruz, E., Reis, O.,
Ramos, J. L., et al. (2008). Competncias TIC - Estudo de Implementao Vol.1. Lisboa: Editorial do
Ministrio da Educao.
URL: http:\\www.gepe.min-edu.pt

Em fase de
implementao.

Vale a pena enfatizar que a aco das TIC pode operar uma
mudana na cultura educativa; uma cultura de aprendizagem
colaborativa, seja do ponto de vistas das interaces, seja
das representaes. , no entanto, necessrio continuar a
melhorar os sistemas de formao de docentes para
aumentar a sua eficcia e assegurar que a utilizao das TIC
no est confinada a disciplinas especficas e que passe a
fazer parte do quotidiano da escola e do mtodo de
aprendizagem de todas as disciplinas.

de cada medida do plano ordenado por eixo.

Quadro resumo do eixo formao

Seis anos depois

O Plano Tecnolgico poderia contribuir para uma escola onde


se aprende mais e melhor, onde os professores utilizam
estratgias inovadoras e os alunos trabalham com mais
afinco. Tudo isto so pontos fortes que podem tornar a
sociedade portuguesa muito mais competitiva face a um
mundo em globalizao. Porm, o projeto morreu na praia,
e hoje, no final do ano letivo 2011 2012, o pas apresenta
dois tipos de ambientes escolares: as escolas onde existem
condies estruturais de excelncia para a prtica do ensinoaprendizagem e as escolas em que as condies estruturais
so to degradantes que a prtica de ensino-aprendizagem
se torna quase um ato de herosmo. Mais preocupante que
estes ambientes escolares usualmente coabitam, lado a lado,
evidenciando a desigualdade e excluso social.

Ao longo de seis anos, a implementao do Plano


Tecnolgico foi efectuada em contextos conjunturais muito
diversos. O Plano deveria ter a flexibilidade suficiente para
se enquadrar nos desafios de conjuntura, mas no deveria
afastar-se das linhas de fora para a mudana estrutural que
o justificam e lhe do sentido e oportunidade.
O progresso feito por Portugal neste domnio considerado
uma boa prtica global. Mais de um milho de computadores
foram distribudos no mbito dos programas e.Escolas e
e.Escolinhas a estudantes, docentes e trabalhadores em
formao profissional. Um computador com acesso Internet
por cada 5,6 alunos em cada escola do Ensino Pblico, um
quadro interactivo por cada trs salas de aula e um
videoprojector por cada sala foram algumas das metas
alcanadas pelo Plano Tecnolgico da Educao (PTE) at
2010.

A crise financeira e a instabilidade que a mesma trouxe para


a economia real, veio, em certa medida, afetar a
operacionalizao do Plano Tecnolgico da Educao. de
salientar que o ltimo relatrio disponibilizado ao pblico em
geral (www.planotecnologico.pt), data de 9 de julho de 2009.
Este facto deveras preocupante, pois traduz a falta de
acompanhamento da implementao do plano tecnolgico,
por parte do conselho consultivo. Uma outra preocupao
precariedade e reduo do pessoal especializado na rea da
informtica no ensino bsico e secundrio, uma vez que a
manuteno do parque escolar era garantida por estes
docentes. A ausncia de pessoal especializado, seja docente
ou tcnico, levar deteriorao e inutilizao dos
equipamentos, o que tornar o investimento efetuado no
parque tecnolgico intil e de curto prazo. As ferramentas
que tinham como objetivo promover a organizao
pedaggica e operar uma mudana na cultura educativa
tornar-se-o barreiras e entraves para o ensinoaprendizagem. Inquietante a fraca aposta na formao dos
docentes, os quais representam a principal barreira

O relatrio de balano, apresentado em Setembro de 2009,


revelava ainda que todas as escolas pblicas estavam
ligadas Internet atravs de fibra ptica a pelo menos 64
Mbps, existindo 112 instituies que navegavam a 112 Mbps.
No total, j tinham sido instalados 228 361 computadores,
quando estavam previstos 310 mil at ao final de 2010. Entre
os quadros interactivos faltavam instalar 1387 equipamentos
para atingir o valor de 9000 apresentado como meta. O
nmero de videoprojectores colocados j ultrapassava os 25
mil inicialmente previstos, somando 28 711, um por cada
sala de aula.
Este era um ambicioso Plano Tecnolgico da Educao, que
pretendia fazer das nossas escolas ambientes de
aprendizagem de referncia na modernidade e na inovao.
Portugal tem hoje uma das maiores taxas de penetrao de

75

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
integrao das TIC nos mtodos de ensino e uma dbil
disponibilizao do parque informtico, por parte dos rgos
de gesto, aos alunos, uma vez que os equipamentos so
disponibilizados de forma preocupantemente limitadora,
dispersos, na sua maioria, pelas salas de aula e
disponibilizados de forma exagerada em salas de trabalho da
equipa docente.

Bibliografia
(2005). Plano Tecnolgico: Uma estratgia de crescimento
com base no Conhecimento, Tecnologia e Inovao.
Documento de apresentao.
2006, C. C.-2. (2006). Relatrio de Progresso do Plano
Tecnolgico.

Em julho de 2012, aps um esforo coletivo da populao


portuguesa, no se compreende como que a crise
financeira tenha perturbado a operacionalizao do plano
tecnolgico. Observando os trs eixos de atuao,
verificamos que o eixo Tecnologia est neste momento ao
sabor do vento, sem a assistncia tcnica especializada
necessria, prev-se a degradao progressiva de todo o
parque tecnolgico e os eixos dos Contedos e Formao
esto muito aqum das expectativas. Observando os
projetos envolvidos nestes dois eixos, poderemos afirmar
que, neste momento, a alguns no chegaram a ser
concretizados, apesar dos investimentos, e os projetos que
apresentaram alguma fase concretizada, neste momento ou
esto extintos ou abandonados. Podemos comprovar isso
com o Portal das Escolas (www.portaldasescolas.pt) que
apresentam, em julho de 2012, sinais de abandono, com
vrios erros na interface grfica. No eixo de atuao
Formao, a degradao do Portal das Escolas induz
problemas no Sistema de Formao e Certificao de
Competncias TIC, a extino progressiva de centros de
formao coloca entraves formao e certificao de
docentes e no docentes e a lecionao das disciplinas com
domnio das TIC, por docentes sem habilitao prpria e
profissional para a lecionao da informtica, para alm de
estimularem a no abordagem de contedos tcnicos,
incitam a m utilizao das ferramentas e a iliteracia em
aplicaes opensource.

2007, C. C.-0. (2007). Relatrio de Progresso do Plano


Tecnolgico.
2007, C. C.-2. (2007). Relatrio de Progresso do Plano
Tecnolgico.
AICEP Portugal Global. (01 de 10 de 2009). Plano
Tecnolgico - Quatro anos depois. p. 6.
Conselho Consultivo do Plano Tecnolgico. (2009). 8.
Reunio do Conselho Consultivo - Nota de Imprensa Julho de
2009.
Costa, F. A., Rodrigues, ., Peralta, M. H., Cruz, E., Reis, O.,
Ramos, J. L., et al. (2008). Competncias TIC - Estudo de
Implementao Vol.1. Lisboa: Editorial do Ministrio da
Educao.
Coutinho, M. C., & Chaves, J. H. (2001). Desafios
Investigao em TIC na Educao. Universidade do Minho.
Fernando, H. P., & Costa, A. (2007). TIC e Inovao
Curricular. Ssifo - Revista de Cincias da Educao , 142.
GEPE. (2008). CATE Centro de Apoio Tecnolgico s
Escolas. Estudo de Implementao. Lisboa: Gabinete de
Estatstica e Planeamento da Educao (GEPE).
GEPE. (2007). Estudo de Diagnstico:a modernizao
tecnolgica do sistema de ensino em Portugal. Lisboa :
Gabinete de Estatstica e Planeamento da Educao.

Neste momento, o leitor questiona-se do porqu deste artigo


estar numa revista especializada em programao e
tecnologia informtica. muito simples, a forma de atuao
dos intervenientes do processo do Plano Tecnolgico no s
afeta todos os contribuintes, como insulta todos os
profissionais do ramo da informtica. O custo-benefcio das
plataformas e recursos envolvidos so absurdos, a falta de
suporte da alta administrao, a meio do projeto, levou ao
desgoverno de todo o processo e sua falta de eficcia.

GEPE. (2009). Kit Tecnolgico: Estudo de Implementao.


Ministrio da Educao, Gabinete de Estatstica e
Planeamento da Educao, LISBOA.
Miranda, G. L. (2007). Limites e possibilidades das TIC na
educao. Faculdade de Psicologia e de Cincias da
Educao da Universidade de Lisboa.
Pinto, S. M., Calixto, J. A., & Lopes, P. F. (2001). Gestores de
Recursos Electrnicos: Que formao na era digital? Tese de
Mestrado em Estudos de Informao e Bibliotecas Digitais.

Espero que este artigo permita ao leitor-programador refletir,


em primeiro lugar, sobre os custos e benefcios das
aplicaes e processos informticos, em segundo lugar,
sobre a importncia da qualificao humana num projeto e,
em terceiro, sobre a importncia dos fatores crticos de
sucesso, inerentes gesto de projetos na elaborao de
qualquer tarefa.

Plano Tecnolgico - Quatro Anos Depois. (2009). AICEP


Portugal Global , 7.
Ramos, J. L., Espadeiro, R. G., Carvalho, J. L., do Maio, V.
G., Matos, J. M., dos Santos, L. F., et al. (2009). Iniciativa
Escola, Professores e Computadores Portteis: Estudos de
Avaliao. Lisboa: DGIDC- Direco Geral de Inovao e de
Desenvolvimento Curricular.

76

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
Resoluo do Conselho de Ministros n. 132. (2007).
PLANOTECNOLGICO DA EDUCAO.

Universidade Aberta, DEPARTAMENTO DA EDUCAO E


DO ENSINO DISTNCIA.

Resoluo do Conselho de Ministros n. 134. (2007).


PLANOTECNOLGICO DA EDUCAO.

Portaria n. 204/2008 - Determina os encargos oramentais


decorrentes das ligaes Internet em Banda Larga sejam
assumidos nos anos de 2008 a 2010

Resoluo do Conselho de Ministros n. 135. (2007).


PLANOTECNOLGICO DA EDUCAO.

Portaria n. 287/2009 - Determina os servios do Plano


Tecnolgico da Educao

Resoluo do Conselho de Ministros n. 136. (2007).


PLANOTECNOLGICO DA EDUCAO.

Portaria n. 300/2009 - Determina os encargos oramentais


decorrentes da concretizao da melhoria das condies de
segurana nas escolas pblicas

Resoluo do Conselho de Ministros n. 137. (2007).


PLANOTECNOLGICO DA EDUCAO.

Despacho n. 1199/2008 - Autorizao de prestao de


servios no mbito do Plano Tecnolgico

Resoluo do Conselho de Ministros n. 23. (2008).


PLANOTECNOLGICO DA EDUCAO.

Despacho n. 145/2008 - Cria o Escalo Especial do Ensino


Secundrio, que define o valor de capitao at ao qual o
aluno deve ser enquadrado no escalo especial de apoio ao
programa de acesso aos computadores pessoais e banda
larga e no escalo especial de acesso Bolsa de Mrito do
Ensino Secundrio.

Resoluo do Conselho de Ministros n. 124. (2008).


PLANOTECNOLGICO DA EDUCAO.
Resoluo do Conselho de Ministros n. 35. (2009).
PLANOTECNOLGICO DA EDUCAO.
http://www.cmjornal.xl.pt/detalhe/noticias/nacional/ensino/
faltou-distribuir-400-mil-portateis, consultado em 25/07/2010

Despacho n. 143/2008 Aprova o modelo orgnico e


operacional relativo execuo, no mbito do Ministrio da
Educao, do Plano Tecnolgico da Educao.

Silva, B. D., & Gomes, M. J. Contributos da Internet para a


mudana do paradigma pedaggico: uma experincia de
trabalho colaborativo. Universidade do Minho.

Decreto-Lei n. 379/2007 - Estabelece um regime


excepcional para o procedimento de contratao com vista
aquisio de servios destinados ao desenvolvimento das
experincias piloto em execuo e cumprimento dos
objectivos do Plano Tecnolgico da Educao

(2009).
TECNOLOGIAS
DE
INFORMAO
E
COMUNICAO: UM ESTUDO DE ACTUALIZAO DE
TENDNCIAS EM CONTEXTO EDUCATIVO. Tese de
MESTRADO EM EDUCAO na especialidade de
COMUNICAO
EDUCACIONAL
MULTIMDIA,

AUTOR
Escrito por Ricardo Castro
Docente de CETs no Instituto Politcnico de Viana do Castelo, especializado em Gesto de Projetos e implementaes de
sistemas de informao para a gesto.

77

No Code
O EMPREENDEDORISMO COMO UMA OPO DE AUTO-EMPREGO E INCONFORMISMO
Em tempos de incerteza e de estrangulamento financeiro, o
empreendedorismo no s um discurso de circunstncia,
mas sobretudo uma atitude de proatividade e de resilincia
(resistncia e reao) face a um ambiente externo que
incerto e, muitas vezes, at adverso.

As capacidades tcnicas e os talentos pessoais


Alm das capacidades tcnicas (que sero o ncleo de todo
o trabalho / empresa), tambm importa ponderar os talentos
ou as habilidades pessoais, porque so as nossas
capacidades naturais que nos fazem trabalhar com paixo e
motivao numa determinada rea profissional, seja um
emprego, um hobbie ou um trabalho voluntrio. Os talentos
so desenvolvidos e aperfeioados com o estudo e com o
trabalho quanto mais se exercitam, mais aperfeioados
sero (como bvio), mas este trabalho de investimento
pessoal permitir ainda estimular a nossa criatividade e
atualizar conhecimentos. Portanto, investir na formao
pessoal e profissional permitir sempre vislumbrar novas
perspetivas, novos horizontes de ao e novas oportunidades
de trabalho. A atitude de verdadeiro empreendedor ser
sempre aquela que estar orientada para saber sempre mais
e melhor (alm do objetivo de fazer sempre mais e melhor).

Este artigo pretende pensar o empreendedorismo e o autoemprego como uma atitude de resilincia e de dinamismo em
tempos de contrao da economia, do emprego e do
investimento. Neste sentido, apresentaremos algumas
medidas para construir uma atitude empreendedora e fazer
uma escalada bem sucedida pelo auto-emprego e (porque
no?) pela criao de uma marca prpria.
O empreendedorismo acima de tudo uma atitude que
assenta numa mudana de mentalidades o tempo do
emprego para a vida, depois da formao acadmica,
praticamente terminou e o percurso profissional de cada
pessoa ser, mais do que nunca, multifacetado. Por isso,
para os mais ou menos jovens, para os freelancers ou
contratados, este o momento de pensar a longo prazo e ter
viso de futuro.

Conhecer o mercado e oferecer algo inovador

A hiptese do auto-emprego

Depois de analisar e aperfeioar as competncias pessoais,


necessrio conhecer todos os aspetos do negcio em que
se pretende investir, sobretudo o mercado e a concorrncia.
Alm de investidor, o empreendedor tambm um gestor,
por isso importa ter presente uma srie de questes,
nomeadamente: Quem so os potenciais clientes? Se h
espao para mais um produto (ou servio)? Qual o fator
diferenciador da soluo que apresenta face ao que j existe
no mercado? Quem so os concorrentes diretos? A que
necessidade responde a soluo proposta? Qual a
capacidade inicial de resposta procura? E de que forma
est preparado para um aumento da procura e, portanto, do
volume de negcios?

Ao perspectivar o emprego oportuno e legtimo colocar


tambm a hiptese do auto-emprego e da criao de um
novo negcio, sobretudo porque existem reas profissionais
congestionadas no seu formato tradicional de emprego e que
oferecem poucas perspectivas de carreira, estabilidade e
sustentabilidade, sobretudo em relao entrada de novos
profissionais, como acontece por exemplo, na rea do
jornalismo, marketing, publicidade e webdesign, assim como
acontece tambm na psicologia, no direito e na arquitectura.
Neste cenrio, o auto-emprego e a criao de uma marca
prpria e, portanto, de uma empresa que presta um
determinado servio ou que vende um determinado produto
encarada como uma alternativa de proatividade e de
resilincia face aos bloqueios e constrangimentos que se
colocam quer aos jovens recm-formados, quer quelas
pessoas que apesar de uma considervel experincia
profissional se vm tambm afastadas do mercado de
trabalho.

Neste sentido, opte por criar um produto ou servio realmente


inovador diferente do que j existe, ou assente em novos
valores e conceitos. Quanto mais apelativa, original e atrativa
for a nova marca mais facilmente ir captar e reter a ateno
do pblico. O essencial oferecer algo nico e inovador,
tornando a oferta diferente de tudo o que j existe no
mercado.

H, no entanto, algumas questes a ponderar e a ter em


conta antes de uma aventura como esta: a questo das
capacidades de cada empreendedor, o mercado em que vai
atuar, o acesso a financiamento e a formao da equipa de
trabalho, ou seja, todas as questes relacionadas com a
viabilidade do plano de negcio e o futura da empresa.

Num segundo nvel, torne clara a sua proposta de valor, isto


, apresente de forma verdadeira e simples o que faz, como
e de que forma a soluo que apresente torna a vida das
pessoas mais fcil.
Em termos do marketing, escolha um nome e uma imagem

78

No Code
O EMPREENDORISMO COMO UMA OPO DE AUTO-EMPREGO E INCONFORMISMO
originais que identifiquem a sua marca de forma imediata e
sugestiva toda a parte da imagem ser naturalmente
pensada depois de estar definido o plano de negcio e o
plano operacional da empresa sobretudo, procure
transmitir verdade, valor e confiana ao seu pblico-alvo.

no se limita introduo de capital, apoiando tambm os


empreendedores no crescimento e desenvolvimento da
startup (ao nvel da internacionalizao, recursos humanos,
parcerias, ou clientes, por exemplo) o que uma clara
vantagem sobre as outras formas de financiamento.

A imagem sempre uma questo inerente a qualquer marca,


empresa ou trabalho que se faa, ou seja, a imagem ser
sempre criada (de uma forma que pode ser vantajosa para a
empresa, ou nem tanto). Por isso, trabalhe essa imagem
para que seja exatamente aquela que est de acordo com os
seus objetivos e para que seja precisa (sem ambiguidades),
coerente com o trabalho que feito e positiva/ promocional.

Outra alternativa o crowdfounding, um tipo de


financiamento coletivo que parte da apresentao do projeto
numa plataforma online em Portugal existe o PPL
Crowdfounding a partir da qual o empreendedor procura
envolver a multido (o pblico) e conseguir o financiamento
de que precisa para o seu projeto.Com todas as
possibilidades que as redes sociais oferecem, esta forma de
conseguir financiamento pode resultar muito bem (e em
alguns casos superado o montante pretendido). Existem
plataformas de crowdfounding genricas e outras mais
especficas (umas direccionadas para projetos sociais, outras
de msica, cinema, etc). Neste caso o investidor pode ser
qualquer pessoa que acredite no projeto, com um valor
mnimo ou mais significativo, e existe a garantia de que,
depois de reunido o montante necessrio, o empreendedor
ter de criar a empresa e portanto o dinheiro nunca cai no
vazio. Depois desta fase os investidores, em alguns casos,
podero obter garantias financeiras (em funo do valor que
investiram) ou uma contribuio em termos de acesso ao
produto ou servio este aspeto depender do tipo de
projeto que est em causa (que poder ser a criao de uma
marca comercial, de uma exposio, de um CD, ou de uma
associao, por exemplo).

Ao nvel da equipa, trata-se de orientar o trabalho no sentido


de uma relao acessvel e prestvel para com os clientes,
de forma a construir um ambiente de empatia, confiana,
seriedade e de eficincia em torno da marca. Esta atitude ir
permitir, em primeiro lugar, corresponder s expetativas da
procura e, em segundo lugar, a postura ideal para fidelizar
os clientes.
Por outro lado, importa investir esforos numa outra
dimenso da empresa: a divulgao e comunicao da sua
misso e viso. Aliado ao profissionalismo e seriedade do
trabalho que feito, importa que sejam dadas a conhecer
(sem rudo e sem ambiguidades) a misso (o que oferecido
pela marca e de que forma) e a viso da empresa (isto , os
seus objetivos e o seu carter inovador/ visionrio) este
aspeto est relacionado com a questo da construo da
imagem que a empresa quer passar.

E ainda, podemos optar pela tradicional e mais antiga forma


de financiamento, o bootstrapping o conceito novo, mas a
ideia j todos conhecemos e consiste em reunir recursos
financeiros com a ajuda dos familiares e amigos, alm das
poupanas de cada empreendedor, e pensar a startup como
uma escalada de conquistas faseadas (e por vezes lentas, o
que natural neste formato de investimento). Por exemplo,
um profissional poder comear a trabalhar sozinho como
freelancer em nome individual e gradualmente evoluir no
sentido da criao de uma sociedade e com a contratao de
novos profissionais para poder tambm assim alargar e
inovar a oferta e o seu alcance em termos de mercado.

Opes de financiamento
Esta normalmente a parte mais crtica de um plano de
negcios os recursos financeiros e a projeo dos ganhos.
Esta parte do plano de negcios implica algumas questes:
quanto que preciso para dar incio ao negcio? Como
tenciono obter lucro? Ao fim de quanto tempo obtenho o
retorno do investimento inicial? E que montante preciso em
caixa para garantir que o negcio no pra?
Conseguir crdito nas instituies bancrias cada vez mais
difcil. Mas se a ideia de negcio revelar potencial de
crescimento e estiver bem planeada haver sempre outras
possibilidades que o empreendedor pode explorar para
conseguir reunir o investimento necessrio a uma startup.

Nas universidade e centros de incubao tm existido


programas de apoio ao empreendedorismo que so
relevantes e teis porque integram a componente de
formao do empreendedor (importante porque existem
sempre
aspetos
que
negligenciamos),
apoiam
o
desenvolvimento do plano de negcios e, em muitos casos,
orientam no sentido da angariao do financiamento que se
precisa. Portanto, a este nvel trata-se de estar atento e
procurar por oportunidades como estas (que tm sido
relativamente frequentes e gratutas).

Ter apenas de ponderar entre algumas diferentes formas de


financiamento e escolher de entre as opes disponveis
aquela que melhor se adequa aos desafios do seu plano de
negcios e aquelas que esto mais acessveis a cada
empreendedor. Para alm da banca, existem os bussiness
angels que so investidores de capital de risco (venture
capital) e investem em startups numa fase de arranque do
negcio. A participao dos bussiness angels temporria e

No momento de pedir ou procurar financiamento, alm da


apresentao das garantias de retorno do negcio e da sua
sustentabilidade, importante assegurar a disponibilidade de

79

No Code
O EMPREENDORISMO COMO UMA OPO DE AUTO-EMPREGO E INCONFORMISMO
probabilidades de resultar se for pensada sem presses. A
este nvel, podemos falar por isso da importncia do
networking, ou seja, de criar uma rede de pessoas e
profissionais (amigos ou apenas conhecidos) com quem
possamos trabalhar, criar sinergias, estabelecer parcerias ou
simplesmente pessoas com quem podemos ter algum apoio
tcnico quando precisemos. O networking assenta sobretudo
nos conceitos de troca e partilha de ideias, conhecimentos e
referncias, ou seja, dar e ajudar para tambm receber e ser
ajudado.

todo o capital necessrio ao clico de vida de uma startup. Ou


seja, ser preciso dinheiro no s para montar toda a
estrutura inicial do negcio adquirir as matrias-primas e/
ou todos os materiais necessrios a toda a logstica da
empresa - mas tambm ser necessrio garantir que existe
financiamento para assegurar o crescimento, a renovao e
a expanso do negcio. O ideal, portanto, o negcio ser
lucrativo ao ponto de oferecer garantias para poder saldar a
curto prazo as dvidas passadas e ir gerindo a contratao
de novos profissionais, assim como a aquisio de novo
financiamento para se expandir.
Outra poltica de gesto que parece adequada garantir ou
preservar alguns recursos financeiros para realizar
investimentos, ou dinamizar o negcio numa perspectiva que
se venha a revelar promissora. Por outro lado, reter alguns
recursos financeiros poder ser til tambm para fazer face
aos imprevistos e ameaas que acontecem sempre na vida
das empresas.

Resilincia
Menos tcnico, mas igualmente exigente, a capacidade de
resilincia dos empreendedores. O empreendedor e
investidor vai encontrar muito provavelmente no seu caminho
dificuldades vrias: comerciais, financeiras, logsticas,
pessoais e relacionadas com os parceiros e os amigos. Por
isso, essencial que tenha uma relativa dose de resistncia
frustrao e ao desnimo, com maior persistncia ainda.
Portanto, importa aqui a capacidade de adaptao rpida s
mudanas e aos imprevistos, porque o mercado dinmico e
os clientes sero cada vez mais exigentes. No mesmo
sentido, importa ser rico otimismo e motivao para manter
um negcio e motivar tambm as pessoas que trabalham
connosco.

Formar uma equipa pluridisciplinar


Apesar de ser um negcio por conta prpria que podes
desenvolver sozinho, parte do xito de uma startup est
associada existncia de profissionais de outras reas
porque permitem reunir outras vises do mesmo problema,
por um lado, e porque permitem alargar o mbito de trabalho
e o alcance da marca o que crucial na fase inicial do
negcio.
Tentar fazer tudo sozinho pode ser uma tentao, mas
trabalhando em equipa no s o trabalho evolui mais rpido
como existe uma maior probabilidade de evitar erros e
lacunas. Alm disso, trabalhar em equipa poder ajudar a
atravessar com maior criatividade e positivismo as
dificuldades que surgirem ao longo do caminho.

Contudo, convm no ficar cego de entusiasmo, para ser


capaz de identificar com realismo as ameaas do ambiente
externo (no sentido de as poder contrariar) e perceber o que
deve ser melhorado a nvel interno para melhorar tambm a
oferta.

Na gesto de equipas, uma nota que me parece importante,


a capacidade para confiar e delegar tarefas, ou seja, dar
espao de liberdade e de ao a cada pessoa para que
ningum se sinta atrofiado na sua criatividade e para que o
trabalho evolua com dinmica e comprometimento.

Finalmente e, acima de tudo, ser resiliente ser capaz de


reagir perante as adversidades e as limitaes (tcnicas,
financeiras e logsticas) com criatividade e proatividade,
apoiado por um plano de negcio sustentvel e uma equipa
slida, por um lado, e em conhecimentos tcnicos
verdadeiros, por outro condies que permitem criar uma
startup num ambiente de confiana, profissionalismo e
competncia, logo, com maiores probabilidades de ser bem
sucedida.

Formar uma equipa de trabalho motivada e empenhada


algo que se pode fazer com tempo e ter maiores

AUTOR
Escrito por Marisa Almeida
licenciada em comunicao e trabalha em assessoria na mesma rea, gesto de comunicao para empresas, estratgia
de marketing e estudos de mercado. Membro da comunidade http://www.maistrafego.pt

80

No Code
PROJECTO EM DESTAQUE NA COMUNIDADE P@P: Notification Agenda
A Notification Agenda foi bem recebida quer pela
comunidade do Google Play, quer pelo Portugal-aProgramar. Numa questo de meses, o nmero de
downloads registados aumentou para mais de 10.000, com
bastantes crticas positivas e ideias que foram aplicadas ao
longo do desenvolvimento. No Portugal-a-Programar, houve
algum feedback positivo e construtivo, que motivou a
correco de pequenos erros e a implementao de novas
funcionalidades. A aplicao foi ainda alvo de apreciao
pela equipa Android Developers, que a analisou na sua
rbrica The Friday App Review e, no geral, achou o projecto
promissor.

A Notification Agenda um projecto criado pelo Ricardo


Amaral (Nazgulled). Trata-se de uma aplicao Android,
originalmente criada com o objectivo de concorrer ao
concurso de programao da comunidade AndroidPT, sendo
mais tarde lanada publicamente no Android Market (agora
Google Play).

A aplicao transforma pequenas notas em agradveis


notificaes na barra de estado com elegantes cones e de
alta qualidade. Todas as notas so facilmente acessveis
para que o utilizador nunca se volte a esquecer de todos
aqueles compromissos importantes.
Entre as diversas caractersticas, destacam-se os cones,
com aspecto moderno e de alta resoluo; possibilidade de
personalizao das notas que aparecem nas notificaes,
sendo possvel escolher exactamente quais as notas que
aparecem; editar as notas visveis de forma rpida; carregar
as notas no arranque do dispositivo, para que fiquem visveis
permanentemente; interface de utilizador agradvel e
coerente com o sistema.

A aplicao gratuita (suportada por publicidade) e pode ser


descarregada no Google Play em:
https://play.google.com/store/apps/details?
id=net.ricardoamaral.apps.notificationagenda
ou directamente no Google Play em qualquer dispositivo
Android.

81

Veja tambm as edies anteriores da


Revista PROGRAMAR
33 Edio - Fevereiro 2012

31 Edio - Outubro 2011

30 Edio - Agosto 2011

32 Edio - Dezembro 2011

34 Edio - Abril 2012

354 Edio - Junho 2012

e muito mais em
www.revista-programar.info

Você também pode gostar