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 ISSN 1 647-071 0

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!

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 57 Enigmas de C#: Avaliao da Lista de Argumentos (Paulo Morgado) Mais um enigma da linguagem de programao C#, desta vez envolvendo Lista de Argumentos. 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 61 Fundamental do MAC OS X (Miguel Oliveira) 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 78 81 Plano Tecnolgico da Educao: Seis Anos Depois (Ricardo Castro) O Empreendedorismo Como Uma Opo de Auto-emprego e Inconformismo (Marisa Almeida) 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
Investigadores portugueses ganham prmio da Google
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. 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. 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. 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. 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.

Jelly Bean disponvel para todos os programadores


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. 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. O novo tablet Nexus 7 j utiliza esta verso. Escrito ao abrigo do novo Acordo Ortogrfico Fonte: exameinformtica.sapo.pt

TMN aposta em plataforma de empreendedorismo


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 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
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. 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. 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. De acordo com o post, as novidades introduzidas pelo Windows 8 a nvel grfico centram-se sobretudo em quatro reas:

Novo sistema operativo para Mac disponvel para download


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. 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. 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. "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. 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. 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 Joana M. Fernandes Fonte: TEK Sapo

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;

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

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


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. Para conhecer em pormenor as justificaes da Microsoft poder ler o post oficial no blogue Building Windows 8, atravs do endereo http://blogs.msdn.com/b/b8_br/. Escrito ao abrigo do novo Acordo Ortogrfico Fonte: TEK Sapo

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

TEMA DA CAPA
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#. 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.

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. 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.

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.

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. 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
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. 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. 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. 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. 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 Poder ser fcil de rastrear, porque pequeno e no contm nada, mas at aqui se consegue demonstrar a utilidade da hierarquia de chamadas.

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. 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
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. Ao nvel da linguagem Ao nvel da linguagem tambm encontramos melhorias significativas, que provm da novssima .NET 4.5. 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. 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. 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. 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. 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. 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: 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
WC.DownloadStringTaskAsync(tmpURI) Trace.Write(tarefaAsync) End Sub 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. 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. 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 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. Para executar este mtodo assincronamente bastaria: 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 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. Para receber essas informaes, basta acrescentar assinatura do mtodo a monitorar as propriedades que se pretendem recolher identificadas por o seu atributo. 10 Existem 3 possveis:
Atributos Descrio Tipo de dados CallerFilePathAttribute Caminho complete do ficheiro fonte onde o membro pertence CallerLineNumberAttribute Nmero da linha no cdigo do ficheiro fonte onde o membro pertence CallerMemberNameAttribute Nome do membro em questo String Integer String

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 que produz algo assim: Chamada disparada de btCallerInfo_Click 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. 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.

TEMA DA CAPA
AS NOVIDADES DO VISUAL STUDIO 2012 RC
Sempre que utilizamos a keyword Yield dentro de um mtodo assinalado com o modificador Iterator estamos a instruir uma nova iterao. 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: 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 O cdigo acima produzia o seguinte output: 6,8,10,12,14,16,18,1,5,8,11,57,12, Namespaces ambguos Tambm os namespaces receberam algum foco nesta nova verso, nomeadamente ao que toca a ambiguidade dos nomes. 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. Vamos imaginar que temos um projecto onde precisamos de chamar a determinado objecto nosso, TextBox, que vamos definir da seguinte forma: Namespace MeusObjectos Public Class TextBox Sub New(Linhas As Integer) End Sub End Class End Namespace Num projecto Windows Forms, criamos uma suposta instncia desse objecto: Dim T As New TextBox 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 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: Dim T1 As New TextBoxNativa Dim T2 As New MinhaTextBox(1) Este tipo de referncia um excelente atalho e uma mais valia para a legibilidade do cdigo. Existem outros casos de ambiguidade mais graves, que geram quebras em namespaces importantes. Por exemplo, vamos alterar a nossa TextBox para a seguinte: Namespace System.MeusObjectos Public Class TextBox Sub New(Linhas As Integer) End Sub End Class End Namespace 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. 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
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 Mas no possvel aninhar namespaces com o nome Global, por motivos bvios. 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 desenvolvimento 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. 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.

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.

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. 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.

Ou seja, esperamos que o resultado final da utilizao da unidade por ns criada para este feito seja semelhante ao da Figura 1.

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. 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. Para se ter uma noo geral da imensido desta unit, esta contm: 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: CloseGraph; 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: 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. A unit Graph permite, ento, desenhar e preencher objectos variados (Figura 3), tais como:

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.

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: 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-

Pontos; Linhas; Rectngulos; Polgonos; Elipses; Crculos;

15

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. A nossa classe ser, ento, a TPlotter e esta ir herdar daquela que classe principal do Object Pascal: a TObject. TPlotter = class(TObject) Como propriedades e respectivos tipos de dados, a classe TPlotter incluir: Grelha, do tipo Estilo de Linha, a definir mais frente; Eixos e Estilo da Funo, do mesmo tipo de dado; Posio, do tipo TPoint; Dimenso, do tipo TSize; Zoom, do tipo Zoom, igualmente a definir mais frente; Cor de fundo, do tipo Word; 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:

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 Plotter funcionalidades e personalizaes a incluir

A nossa Plotter, como calculadora grfica que , dever incluir:

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

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


(Axes);

Uma grelha que marca os pontos relevantes do zoom


actual (Grid);

Um Zoom;
Para a personalizar, poderemos incluir as seguintes opes:

Cor de fundo; Estilo de linha dos eixos; Estilo de linha da grelha; Estilo de linha da funo.
Para esclarecer bem o que so a grelha, os eixos, a funo e a rea de trabalho segue-se uma imagem elucidativa (Figura 4).

Criar (construtor); Libertar (destrutor); Mostrar; Apagar; 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. 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. 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. Como vamos necessitar dos tipos de dados TPoint e TSize, necessitaremos igualmente da unit types. UNIT GraphCalc; INTERFACE uses graph, types; // declarao IMPLEMENTATION // implementao END. A nossa classe TPlotter herda da classe genrica TObject, e ter valores privados e mtodos e propriedades pblicas: TYPE TPlotter = CLASS(TObject) PRIVATE // privado PUBLIC // pblico END; 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: PUBLIC BackColor : Word; Em cdigo, teremos o seguinte: PRIVATE vPosition : TPoint; vSize : TSize; PUBLIC property Position : TPoint read vPosition; property Size : TSize read vSize; 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: TYPE TSize = packed record cx: LongInt; // largura em pixis cy: LongInt; // altura em pixis end; TPoint = packed record X: LongInt; // posio horizontal Y: LongInt; // posio vertical end; 3. Estilos das linhas da grelha, dos eixos e da funo definio do tipo de dados TLineStyle 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: PUBLIC Grid : TLineStyle; Axes : TLineStyle; FunctionLine : TLineStyle; 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.


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.

Este tipo de dados incluir as seguintes definies de linha: Cor; Espessura; Estilo (contnua, tracejada); Visibilidade.

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. 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. 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:

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. 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. 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; Ora, temos de definir o tipo de dados TZoom. A Figura 6 representa os dados que devem estar presentes neste.

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:

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: PRIVATE DistBetweenGrid : TPoint; procedure CalcDistGridAndCenter; Implementando este procedimento segundo a frmula infra apresentada: 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; Falta acrescentar a este procedimento o clculo do centro. O centro depende do Zoom, e poder no ser necessrio calcul-lo: 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)); 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; 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 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. 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; Estes valores podem ser alterados ao gosto do leitor:

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.

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 :=

Zoom padro: XMin = -10 XMax = 10

19

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; 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; No sero criados destrutores j que, para esta classe, bastar utilizar o Free, visto que esta herda da classe genrica TObject. 8. Mtodo Show desenho da Plotter 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. Para mostrar a Plotter vamos utilizar um procedimento denominado Show: 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: 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); 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

Estilo padro da linha da funo:

Tipo de linha contnua (solid) Espessura espessa (1 pixis) Cor vermelho Visvel sim

Cor de fundo padro verde. 7. Construtores 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. 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 constructor Create (cPosition : TPoint; cSize : TSize); constructor Create (cPosition : TPoint; cSize : TSize; cZoom : TZoom; cGrid, cAxes, cFnLine : TLineStyle; cBkColor : word); overload; 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: Mais uma srie de mtodos da unit Graph foram utilizados:

Mtodo & sintaxe

Descrio
Define o estilo de preenchimento de todos os mtodos da famlia.

Mtodo & sintaxe

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.

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. Preenche um rectngulo com o estilo definido pelo SetFillStyle.

SetColor (cor);

SetLineStyle(estilo, padro, espessura);

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

Estilo do tipo Word, define o estilo da linha; Padro regra geral ignorado; Espessura do tipo Word, define a espessura da linha. Desenha uma linha entre dois pontos com o estilo definido pelo SetLineStyle. (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 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. Para desenhar a grelha necessitamos de uma estrutura de repetio, ou seja, um ciclo. Para tal, iremos utilizar um ciclo Repeat Until. if self.Grid.Visible then begin // linhas verticais: SetColor(self.Grid.Color); SetLineStyle(self.Grid.Style, 0, self.Grid.Thickness); 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; // 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); Inc(counter, 1); until counter >= self.Zoom.YMax; end;

De referir que o contador utilizado, counter, do tipo Integer. 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. Por fim, deve-se desenhar os eixos que so colocados em funo do centro do grfico, tambm previamente determinado: 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; 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. 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;

21

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
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; 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. 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; Este mtodo simplesmente limpa a actual Plotter e desenhaa toda do zero: PROCEDURE TPlotter.Refresh; begin self.Clear; self.Show; end; 11. Mtodo Relocate relocalizao 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) 2) 3) Limpa-se o desenho da Plotter actual; Muda-se a propriedade desejada; Volta-se a desenhar a Plotter, j com as propriedades desejadas. agora mesmo discutido, o Refresh no pode ser utilizado: 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. Implementando um destes mtodos, o outro pode-se basear nesse: PROCEDURE TPlotter.Relocate (cNewPosition : TPoint); begin self.Clear; self.vPosition := cNewPosition; self.Show; end; PROCEDURE TPlotter.Relocate (cX, cY : LongInt); OVERLOAD; var NewPos : TPoint; begin NewPos.X := cX; NewPos.Y := cY; self.Relocate(NewPos); end;

12. Mtodos para a funo 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: Receber (carregar) a funo: LoadFunction; Desenhar a funo: DrawFunction; Limpar a funo da Plotter: ClearFunction; 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; Denota-se de imediato que os valores da funo vo ser guardados num Array. Mais frente veremos como este ser

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. Para comear vamos criar o mtodo Relocate, pblico, que ir relocalizar a Plotter numa nova posio. Como foi

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. PUBLIC procedure LoadFunction (fn:TRealFunction); Este mtodo deve: 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:

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;

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

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;

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:

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: 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; repeat // clculo do ponto: self.vValuesOfFunction[counter]:= self.vCenter.Y self.vFunction(abscissa) * (self.DistBetweenGrid.Y / self.Zoom.YScl); // incrementa contadores: abscissa := abscissa + step;

Este factor , ento: 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). 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. 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. 13. Mtodo Resize redimensionar a Plotter Redimensionar a Plotter implica que a funo seja redesenhada, da j termos tratado de todos os mtodos relativos manipulao da funo. O mtodo Resize ter dois cabealhos:

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. De seguida, poderemos querer limpar a funo (ClearFunction), ou seja, voltar a ter a Plotter sem qualquer funo desenhada. PUBLIC procedure ClearFunction; 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: PROCEDURE TPlotter.ClearFunction; begin self.FunctionLine.Visible:=False; self.Refresh; self.FunctionLine.Visible:=True; end; Por fim, vamos libertar os recursos ocupados pela funo (DisposeFunction), deixando a Plotter sem qualquer funo com que trabalhar.

Recebe um parmetro do tipo TSize; Recebe dois parmetros largura e altura do tipo
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.Resize (cNewSize : TSize); begin self.vSize := cNewSize; self.CalcDistGridAndCenter; if not(self.vFunction = nil) then self.LoadFunction(self.vFunction);

24

A PROGRAMAR
PASCAL CONSTRUO DE UMA CALCULADORA GRFICA
self.Refresh; end; PROCEDURE TPlotter.Resize (ccx, ccy : LongInt); OVERLOAD; var NewSize : TSize; begin NewSize.cx := ccx; 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. PUBLIC procedure Rezoom(cNewZoom : TZoom); 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; Vamos alterar algumas propriedades da Plotter para termos um resultado diferente do das imagens iniciais. Segue, portanto, o cdigo do programa seguido de uma breve explicao. PROGRAM Teste; uses Graph, CalcGraph, SysUtils, Windows; FUNCTION f(x:real):real; begin f := sqr(x)-8; end; 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; 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; 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

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. 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. 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: 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. 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. 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 7 Output gerado pelo programa de testes antes da pausa.

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
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 o HTML5 nos trouxe. Sem mais demoras, esto enumerados a baixo os novos elementos: do number: <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.

Autofocus - Foca o campo no carregamento da pgina.

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

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.

A sua implementao feita da seguinte forma: <input type=elemento name=whatever/> 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

Placeholder - Define ajuda para o usurio preencher


o campo com os dados corretos.

Step - Utilizado juntamente com os tipos "datetime",


"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> 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. 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>

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. The last but not the least, temos o nosso submit button. Antigamente declarado como input type=button. 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;} Dentro do body damos margem a esquerda e direita automticas, definimos a largura, fonte do texto e damos um padding de 20px. O nosso formulrio tem uma border-radius que so os cantos redondos em torno dele, neste caso de 5px.

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
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;} Pseudo-classe :not engloba todos os outros elementos fora daquele input, neste caso radio, lhes sejam atribudos os valores declarados. 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; }

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.

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 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'; Validao do email 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. Se encontrar erros, retorna-os onde sero visveis atravs do reason. function validatePhone(fld) { var error = ""; var stripped = fld.value.replace(/[\(\)\.\\ ]/g, ''); 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; } 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; } Varivel stripped - substitui quaisquer caracteres ilegais por um espao em branco. Validao do numero de telefone Se vazio, reporta o erro de no insero de numero de telefone.

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. 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
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. 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 entender o que irei falar hoje. 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.

ENIGMAS DO C#: AVALIAO DA LISTA DE ARGUMENTOS


por Paulo Morgado
Enigma Dado o seguinte mtodo: E os seguintes mtodos: private static void M( int x = 10, int y = 20, int z = 30) { Console.WriteLine( "x={0}, y={1}, z={2}", x, y, z); } int a = 0; M(++a, ++a, ++a); 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
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. natura pode ser encontrada nos logs dos Servidores Web, atravs do header do protocolo HTTP: 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). 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

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. 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. 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 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. 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 motores 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.

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. 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.

De acordo com uma prpria definio antiga da Google

36

A PROGRAMAR
SEO SEARCH ENGINE OPTIMIZATION INTRODUO PARTE II
(2005), PageRank : 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). 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): 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:

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. 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
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. 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:

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. Conexo: Permite a criao de conexes, no nvel de IP entre computadores locais e aplicaes do Windows Azure.

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.

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. 3.

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. 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.

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:

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. 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 40

1.

Web Roles: A sua principal finalidade facilitar a criao de aplicaes baseadas na Web. Cada ins-

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. 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. 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 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.

Ilustrao 4 - Esquema Representativo dos Componentes da Plataforma Windows Azure

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. 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 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. 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

Conexo 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-

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.
Ilustrao 9 - Esquema Representativo da Segurana do Windows Azure

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

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

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.

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. Servidor Auxiliar Usado GlassFish

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. 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

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. 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

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. 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. importante referir que o tutorial apresentado, baseado no tutorial oficial que a prpria Microsoft disponibiliza em http:// bit.ly/sKLmeM 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. Ficheiros
Ilustrao 12 - Pgina Inicial da Aplicao

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>

A ilustrao 12, mostra a pgina de apresentao gerada por este ficheiro de cdigo.

Upload.jsp <%@ 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);

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: " );

45

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
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> 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. So ainda apresentados dois botes que permitem ao utilizador escolher se quer encriptar ou desencriptar o ficheiro, como mostra a ilustrao 13. Encripta.jsp <%@ 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> 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.

Decripta.jsp <%@ 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;

Ilustrao 13 - Pgina de escolha da Aplicao

46

A PROGRAMAR
IMPLEMENTAO DA CIFRA ARSD EM AMBIENTE EMULADO WINDOWS AZURE
charset=ISO-8859-1"> <title>Desencriptar</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[] desenc = new char[8]; int cod2, len2; FileReader dr = new FileReader ("C:\\Azure\\encriptado.txt"); FileWriter dw = new FileWriter ("C:\\Azure\\desencriptado.txt"); 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() ; %> <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. 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. mostraEncriptado.jsp <%@ 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>Mostrar ficheiro Encriptado</title> </head> <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(); %> </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. 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. 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 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.

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:

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.

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. 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-

Agradecimentos

Gostaramos ainda de agradecer ao professor Nuno Garcia, docente da Universidade da Beira Interior, toda a ajuda prestada.

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:
Microcontrolador 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. ATmega328

Voltagem de Trabalho Voltagem Recomendada no Input Limites de Voltagens Pinos Digitais I/O Pinos Analgicos de Entrada Corrente DC por Pino I/O

5V 7V 12V 6V 20V 14 Pinos(6 deles PWM) 6 Pins 40mA 50mA 32Kb (0.5Kb Usados no Bootloader) 2Kb 1Kb 16MHz

Arduno Uno:

Corrente DC no Pino 3.3V Memria Flash SRAM EEPROM Velocidade de Relgio 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. Especificaes: Tenso de Alimentao Mnima Tenso de Alimentao Mxima Iq Aumento na Leitura Preciso Mxima do Sensor Impedncia de Sada Faixa de Temperatura Operacional 3V 5V 1000 uA 10 mV/C +\- 3C 0.6 Ohm -40C at 100C 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); } 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. 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. 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; 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: 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.

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

Esquema Elctrico: 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:

(Figura3 Esquema Eltrico)

51

A PROGRAMAR
ESTAO DE CONTROLO DE TEMPERATURAS
Pequena tabela de converso de temperaturas: 0k = -273.15C 0C = 271.15K. Arduino IDE + SerialMonitor viamente escolhido. 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
(O script est acima descrito e comentado)

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. 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-

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
ou semelhante.

52

A PROGRAMAR
ESTAO DE CONTROLO DE TEMPERATURAS
Criar uma pequena Aplicao em C para tratamento estatstico dos dados } 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) { case 1: { printf("\n\n1- Escolheu Ler o Ficheiro de Da dos:\n\n"); ler_ficheiro(dia, mes, ano, hora, min, seg, temperatura); 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);

53

A PROGRAMAR
ESTAO DE CONTROLO DE TEMPERATURAS
num_linhas = ler_ficheiro(dia, mes, ano, hora, min, seg, temperatura); printf("Num Linhas = %d", num_linhas); printf("\n\n\n"); break; } 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(); } } } 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 sua mdia das temperaturas de todo o conjunto de dados recolhidos. A aplicao ir ler dados armazenados num ficheiro de dados .txt que ser o output do script VBS com a seguinte estrutura: 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.

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) O resultado vai depender da verso de C# que se est a usar. Usando C# 4.0, o resultado ser: x=1, y=2, z=3 x=5, y=20, z=4 Usando C# 5.0, o resultado ser: x=1, y=2, z=3 x=4, y=20, z=5 Explicao O conjunto de argumentos de invocao de um mtodo designa-se por lista de argumentos (7.5.1 Argument lists). 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). Todos os efeitos colaterais (side effects) ocorrem antes da invocao do mtodo do lado do chamador. 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. Concluso 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: Ligaes C# Reference Visual C# Breaking Changes in Visual Studio 2012 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. 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. 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. 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. 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.

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. 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.

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 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. Enciclopdia do Mac OS X, mas nunca como iniciao ao 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 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 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
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)
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. 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. 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. 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.

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. 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. 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

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. 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)
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. 2. Quando usar estes mecanismos; Que verso usar. 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. Dever sempre assumir que se o seu recurso acessvel por qualquer um dos seus utilizadores, qualquer pessoa ir aceder a esse recurso.

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. 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.

Regra 7 Armazenamento seguro 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. 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: * 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.

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. 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

64

COMUNIDADE PTCoreSec
SEGURANA NA WEB (PARTE 3)
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. 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/ . 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: Depois de instalado o seguinte ecr mostrado:

Depois de fazer save podemos seleccionar esta aplicao no

65

COMUNIDADE PTCoreSec
SEGURANA NA WEB (PARTE 3)
menu principal e, depois de preencher todos os campos e clicar em Start, ir ver um ecr semelhante a este: detectados diminuiu ou no.

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:

A sub-tab "Application metrics" tambm mostra algo bastante interessante, nomeadamente uma visualizao grfica das diferenas entre as vrias anlises:

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. 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. 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). 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. Caracterizao Geral do Plano Tecnolgico da Educao 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. Assim, o Plano Tecnolgico da Educao pretendia ser um meio para:

A igualdade de oportunidades no equipamentos tecnolgicos;

acesso aos

A modernizao das escolas, possibilitando que os estabelecimentos de ensino funcionem em rede e que os professores trabalhem de forma colaborativa.

O Plano Tecnolgico da Educao tinha como metas fundamentais:

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.

Eixo Tecnologia Kit tecnolgico

Eixo Contedos Portal da escola

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

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

Tabela 1. Eixos do plano tecnolgico

1.

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

A melhoria do ensino e dos resultados escolares dos alunos;

69

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
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. 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, definiu-se como prioritria a implementao dos seguintes projectos: Kit Tecnolgico Escola 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. 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%. Para a concretizao deste objectivo, foram estipuladas as seguintes medidas:

Eixo de Actuao

Tecnologia

Computadores Equipamento de apoio reas de Interveno Conectividade Redes de rea local

Cartes de aluno Sistemas de electrnicos segurana

Apoio Tcnico s escolas

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.

Projectos Chave

Kit Tecnolgico Escola Aumento do nmero de computadores e de equipamento de apoio 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 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

Internet em Banda Larga de Alta Velocidade 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. 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.

70

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
Internet nas Salas de Aula. Redes de rea Local 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. 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. 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. O projecto pretendia promover a utilizao de tecnologia, dotando todas as escolas de plataformas de carto de aluno at ao 2. trimestre de 2008. Videovigilncia 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 Verba mxima atribuda 279.000.000 + IVA Fonte: Resoluo do Conselho de Ministros n. 133/2007 Medida: Kit tecnolgico (Continuao) Projectores (N Projectores Entregues) Quadros Interactivos (N Quadros Interactivos Entregues) Verba mxima atribuda 25.100.000 + IVA Fonte: Resoluo do Conselho de Ministros n. 136/2007 Verba mxima atribuda 9.000.000 + IVA Fonte: Resoluo do Conselho de Ministros n. 132/2007 28.711 7.613 (2009) 228.361 (2009) 310.00 (2010)

E-escola

E-escolinha (n computadores entregues)

Computadores (N Computadores Entregues)

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 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 Contrato visado pelo Tribunal de Contas em Outubro de 2009 Novo carto nas escolas em 2010

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

Medida: Escol@ segura e Videovigilncia Verba mxima atribuda 30.000.000 + IVA Fonte: Resoluo do Conselho de Ministros n. 135/2007 e Portaria n 300/2009 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)

Ponto de situao do projecto Verba mxima prevista para o eixo tecnologia at 2010 (valor aproximado)

840.600.000 + IVA

71

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
Quadro resumo do eixo tecnologia 2. Eixo Contedos
Eixo de Actuao 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.

Produo e partilha de contedos reas de Interveno Produo e partilha de aplicaes de gesto Certificao de contedos e aplicaes

Informatizao de manuais escolares Software opensource

As medidas do Plano Tecnolgico da Educao implementadas no eixo Contedos pretendiam contrariar os principais inibidores de modernizao identificados, nomeadamente 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. 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). A sua utilizao no se encontra generalizada a toda a comunidade de ensino. 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. 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. 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.

Projectos Chave Mais-Escola.pt 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

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. De acordo com os resultados do estudo de diagnstico, a utilizao das plataformas em questo revelava as mesmas

Neste contexto, os seguintes projectos foram considerados prioritrios:

72

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
limitaes identificadas nomeadamente: em pases de referncia, 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. 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. Para a concretizao foram estabelecidas as seguintes medidas:

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.

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. 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). 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. Escola Simplex

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.

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 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

Escola Simplex

de operao para a Escola Simplex que assegure a sua dinamizao e utilizao auto-sustentada. Quadro resumo do eixo contedos

73

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
3. Eixo Formao de mecanismos de certificao e valorizao profissional de competncias Neste contexto, definiu-se como prioritria a implementao dos seguintes projectos: Formao e Certificao Formao Pro de Competncias TIC 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. 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). 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 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. 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. 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. Avaliao Electrnica
Formao de docentes e no docentes reas de Interveno Certificao de competncias de docentes e alunos Utilizao de aprendizagem TIC nos processos de ensino -

Eixo de Actuao

Formao

Projectos Chave

Formao e certificao de competncias TIC Formao Pro Reestruturao do modelo de formao de docentes em TIC Projectos 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

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. 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 2007 2008.

74

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
O quadro apresentado abaixo enuncia o ponto de situao
Medida: Formao e certificao de competncias TIC Formao Pro

banda larga mvel do mundo e um dos Pases com mais computadores portteis por mil habitantes. 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. 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. 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 ensino aprendizagem 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. 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

14.541.152,57 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

Custo total de implementao de competncias TIC

Em fase de implementao.

de cada medida do plano ordenado por eixo.

Quadro resumo do eixo formao

Seis anos depois 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. 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. 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. 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. 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. 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. 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. 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.

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.

76

No Code
PLANO TECNOLGICO DA EDUCAO: SEIS ANOS DEPOIS
Resoluo do Conselho de Ministros n. 132. (2007). PLANOTECNOLGICO DA EDUCAO. Resoluo do Conselho de Ministros n. 134. (2007). PLANOTECNOLGICO DA EDUCAO. Resoluo do Conselho de Ministros n. 135. (2007). PLANOTECNOLGICO DA EDUCAO. Resoluo do Conselho de Ministros n. 136. (2007). PLANOTECNOLGICO DA EDUCAO. Resoluo do Conselho de Ministros n. 137. (2007). PLANOTECNOLGICO DA EDUCAO. Resoluo do Conselho de Ministros n. 23. (2008). PLANOTECNOLGICO DA EDUCAO. 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 Silva, B. D., & Gomes, M. J. Contributos da Internet para a mudana do paradigma pedaggico: uma experincia de trabalho colaborativo. Universidade do Minho. (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, Universidade Aberta, DEPARTAMENTO DA EDUCAO E DO ENSINO DISTNCIA. Portaria n. 204/2008 - Determina os encargos oramentais decorrentes das ligaes Internet em Banda Larga sejam assumidos nos anos de 2008 a 2010 Portaria n. 287/2009 - Determina os servios do Plano Tecnolgico da Educao Portaria n. 300/2009 - Determina os encargos oramentais decorrentes da concretizao da melhoria das condies de segurana nas escolas pblicas Despacho n. 1199/2008 - Autorizao de prestao de servios no mbito do Plano Tecnolgico 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. Despacho n. 143/2008 Aprova o modelo orgnico e operacional relativo execuo, no mbito do Ministrio da Educao, do Plano Tecnolgico da Educao. 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

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. Este artigo pretende pensar o empreendedorismo e o auto emprego 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. A hiptese do auto-emprego 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. 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. 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).

Conhecer o mercado e oferecer algo inovador 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? 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. 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. 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. 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. 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. 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). 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. 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). 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

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. 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

79

No Code
O EMPREENDORISMO COMO UMA OPO DE AUTO-EMPREGO E INCONFORMISMO
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. 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. 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. Formar uma equipa de trabalho motivada e empenhada algo que se pode fazer com tempo e ter maiores 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.

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. 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. 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.

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 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 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 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

30 Edio - Agosto 2011

34 Edio - Abril 2012

31 Edio - Outubro 2011

354 Edio - Junho 2012

32 Edio - Dezembro 2011

e muito mais em www.revista-programar.info

Você também pode gostar