Você está na página 1de 29

editorial

ndice
3 4 7 19 23 24 27 notcias tema de capa a programar segurana anlise eventos internet

Um poder demasiado grande para ser partilhado

equipa PROGRAMAR administrao


Rui Maia David Pintassilgo

coordenador
Miguel Pais

Tudo nasce na ideia. dela que o projecto surge, sobre ela que o produto concebido e no final testado. A ideia move a inovao e a tecnologia, mas existe uma entidade sem a qual todo e qualquer pensamento inovador morre por si, pois dela dependente: o utilizador. Qualquer pedao de software, site web ou qualquer outro produto feito para ser usado por algum, tem em vista ultimamente satisfazer a falha naquela necessidade especfica do utilizador e esse desejo que move quem concebeu o produto, ou deveria. Como reagir se a maneira como concebemos o nosso produto acaba por ser tida como no a melhor, como a que no resolve da melhor maneira as necessidades que deveramos cobrir?

Coordenador Adjunto desde a 4 edio, actualmente o Coordenador da Revista Programar. Entrou este ano no curso de Engenharia Informtica e de Computadores, no IST.

Miguel Pais

coordenador adjunto
Joel Ramos

editor

Pedro Abreu

redaco

Antnio Silva Augusto Manzano Ciro Cardoso David Ferreira Francisco Ribeiro Joo Brando Joo Rodrigues Joel Ramos Lus Antunes

Fui informado h uns dias que o famoso cliente de instant messaging Pidgin (antigo Gaim) havia levado um duro golpe moral. Culpados de no cobrir as necessidades dos utilizadores ou as suas reivindicaes, developers externos ao projecto Pidgin decidiram criar um fork deste, denominado FunPidgin, numa tentativa de apresentar um produto que realmente cobriria as necessidades especificas necessrias ou a criar num sistema de mensagens instantneas. Tentado responder pergunta que finalizou o primeiro pargrafo, e pelo que me foi dado a entender por uma mensagem escrita por um developer do Pidgin no blog oficial, a equipa desculpou-se tentando provar que de facto ouvia os utilizadores, no entanto, pouco mais que isto poderiam fazer, pois o Pidgin est sob licena GNU GPL que permite que isto mesmo seja feito. No me cabe, nem interessa, analisar se o que aconteceu foi merecido ou injusto, mas apenas constatar um facto: quem ganhou com tudo isto? Quem tem neste momento a possibilidade de escolher entre dois produtos semelhantes em que um deles se tentou aproximar ainda mais das necessidades requeridas? A resposta est no utilizador, a base do projecto que por vezes esquecida e posta de parte, quando tudo comeou nesta. Quo maravilhoso poder ter um sistema em que quem ganha, acima de tudo o resto, o utilizador, pela competio cobrindo necessidades, pela cooperao melhorando-se cada vez mais, sem impedimentos ou restries? Este de facto um poder demasiadamente grande para ser partilhado embora esteja por a para todos os que o queiram adoptar, visto de soslaio pelas alternativas que na mesma rua deste circulam. o poder do software livre.

colaboradores
David Ferreira Jos Fontainhas Ricardo Amaral

contacto

revistaprogramar @portugal-a-programar.org

website

www.revista-programar.info

<2>

notcias

Governo alarga e-escolas


O Programa e-escolas vai ser alargado a federaes, associaes juvenis e de estudantes, abrangendo um universo de mais de meio milho de jovens. Os primeiros computadores so entregues j hoje numa cerimnia nas instalaes do Instituto Portugus da Juventude, no Parque das Naes. Este novo alargamento do programa s associaes juvenis e estudantis feito no Dia do Associativismo Jovem e abrange as instituies que integram o Registo Nacional do Associativismo Jovem - RNAJ. Segundo dados do Ministrio das Obras Pblicas Transportes e Comunicaes, que tutela esta iniciativa, existem mil associaes juvenis e duzentas associaes de estudantes, distribudas por todo o pas, representando um universo de mais de meio milho de jovens. No so ainda conhecidos muitos detalhes desta nova iniciativa mas pela informao fornecida pelo ministrio depreende-se que os jovens destas associaes tero acesso aos computadores portteis por um custo mximo de 150 euros e a ligaes de banda larga mvel com uma reduo de 5 euros em relao ao valor praticado pelos operadores, tal como acontece para os restantes escales de utilizadores. O objectivo para j entregar um porttil a cada associao, podendo este modelo ser alterado conforme a adeso iniciativa. Recorde-se que os operadores mveis se dispuseram a investir neste programa os fundos reservados para o desenvolvimento da Sociedade da Informao, sendo a TMN a empresa que colocou mais alto a fasquia, definindo que queria distribuir pelo menos 50 por cento dos 600 mil portteis estimados no arranque da iniciativa, prevendo um investimento de 150 milhes de Euros. J a Optimus apontava para os 116 milhes de euros, uma verba que previa ser suficiente para a entrega de 250 mil notebooks. At agora j foram entregues cerca de 150 mil portteis no programa e-escolas e o programa j recebeu perto de 250 mil inscries.

Centros indianos pagam a funcionrios para quebrar CAPTCHAs


A Trend Micro detectou que os cibercriminosos encontraram uma forma de contornar os sistemas CAPTCHA. No caso dos acessos serem levados a cabo por robots, a probabilidade dos controlos de segurana serem quebrados de 30 a 35 por cento. Contudo, a empresa descobriu agora que existem centros na ndia que pagam entre 2,5 a 3,75 euros por dia aos seus colaboradores para que estes enganem as validaes de segurana CAPTCHA, o que acaba por fazer com que a taxa de sucesso nas tentativas de entrada em pginas protegidas por estes sistemas seja de 100 por cento. Desta forma, os utilizadores maliciosos conseguem aumentar o nmero de contas que tm disponveis para distriburem as suas ameaas. De acordo com a Trend Micro, o processo malicioso detectado consiste no acesso do programa robot a uma pgina de inscrio de um servio. preenchido o formulrio com dados aleatrios e, quando aparece a verificao CAPTCHA, o programa envia a mensagem a um terminal sedeado na ndia. A partir da, os utilizadores pagos decifram os caracteres e reenviam a informao para o programa que insere o cdigo e abre uma conta a partir da qual pode enviar spam para muitos utilizadores.

Fedora 9 lanado
No passado dia 13 de Maio, a 9 verso da distribuio Fedora patricionada pela Red Hat foi lanada ao pblico. Entre as novidades encontramos a verso 2.22 do GNOME e o novo KDE4, melhoramentos no NetworkManager, a Beta 5 no novssimo Firefox 3, o OpenJDK6 (a verso do SDK do Java da Sun lanada sobre uma licena grtis e opensource) e suporte ao novo filesystem ext4. O download est disponvel atravs do site do projecto: http://fedoraproject.org/get-fedora

<3>

tema de capa

java.lang.reflect[1], que passou a possibilitar um

Reflexo

Antes de comear por explicar de que se trata a reflexo, talvez seja melhor perceber o que a Meta Programao. A Meta Programao consiste na escrita de programas que manipulam ou escrevem outros programas. Pode parecer um conceito um pouco esquisito primeira vista, mas softwares como sejam debuggers ou softwares de profile so exemplos clssicos de meta programas largamente utilizados. Os meta programas so escritos em meta linguagens, enquanto que os programas manipulados so escritos em linguagem objecto. A reflexo no mais nem menos que, a capacidade de uma linguagem ter como meta linguagem ela prpria. Ou seja, com a reflexo uma entidade tem a capacidade de manipular a representao da sua estrutura e comportamento durante a sua prpria execuo. A reflexo pode existir em dois graus diferentes mas que podem coexistir, a Introspeco e a Intercesso. A Introspeco a capacidade que um sistema tem de observar a sua prpria estrutura e comportamento. Como exemplo de introspeco podemos ter a determinao do tipo de um objecto em run time. Por outro lado, a Intercesso a capacidade do sistema de modificar a sua estrutura e comportamento. Um exemplo querermos mudar a classe de uma determinada instncia. Ao usarmos a reflexo, seja introspeco ou intercesso, queremos poder interagir com os componentes do sistema como se fossem objectos normais da nossa linguagem. Queremos poder dizer quais so os mtodos da classe X? ou de que classe esta instncia?. Isto conseguido porque existe o conceito de Reificao. A reificao trata-se da transposio de um conceito abstracto para um objecto acessvel para o programador. Se pretendemos perguntar a uma classe quais os seus mtodos, ento temos de ter disponvel um objecto que represente uma classe, e assim por diante. O Java comeou sem nenhumas capacidades de reflexo, na evoluo para a verso 1.1 foi introduzido o package

mecanismo de reflexo para a linguagem ainda sem grande capacidade. Essa capacidade tem vindo a ser aumentada com o lanamento de novas verses da linguagem. Actualmente o Java permite introspeco estrutural, mas muitssimo limitado em termos de intercesso. Esta limitao existe sobretudo porque quando uma classe Java carregada para a mquina virtual j no pode ser alterada, todas as alteraes tm de ser feitas antes do carregamento. Existem ferramentas com esse objectivo, a mais conhecida talvez o Javassist[2]. O Javassist consegue meter-se antes do carregamento da classe e fazer alteraes ao seu bytecode. Vamos ento ver um exemplo do uso da reflexo do Java. Imaginemos que se quer mostrar os mtodos no privados de uma determinada classe: import java.lang.reflect.*; public void mostrarMetodos(Class c) { System.out.println(c + " {"); //Vamos pedir os mtodos que no so privados da classe for (Method m : c.getDeclaredMethods()) { if (! Modifier.isPrivate(m.getModifiers())) { System.out. println(" " + m); } } System.out.println("}"); } Neste exemplo estamos efectivamente a usar meta objectos que representam os objectos da linguagem Java. Um desses meta objectos a Class. Para cada tipo, seja primitivo ou referncia, h uma instncia desta classe para representar esse tipo. Este meta objecto (java.lang.Class) possui diversos mtodos para a reflexo, uns exemplos so[3]:
String getName() - Retorna o nome da entidade. boolean isInterface() - Verifica se o tipo representado

uma interface. primitivo.

boolean isPrimitive() - Verifica se o tipo representado

int getModifiers() - Retorna os modificadores para o

tipo (codificado em inteiro) representado.

<4>

Class getSuperclass() - Retorna a classe que

representa a superclasse, da classe representada

iae){ System.out.println(iae+": No tem permisso."); throw new RuntimeException(); } catch(NullPointerException npe){ throw new RuntimeException(); } } O que acontece que por vezes um objecto herda fields da sua super classe, ento tambm queremos que esses sejam visveis quando inspeccionamos o objecto:

Field[] getFields() - Retorna um array contendo os

Fields que representam os fields de acesso publico da classe ou interface.


Method[] getMethods() - Retorna um array contendo os

Mtodos que representam os mtodos de acesso pblico da classe ou interface. So muito diversas as aplicaes possveis para o uso da reflexo, um exemplo interessante era fazermos um inspector de objectos. Um inspector de objectos basicamente uma ferramenta de depurao, que apresenta uma descrio visual do estado dos objectos do nosso programa. A ideia era o nosso programa chamar o inspector com um determinado objecto a inspeccionar: MyObject m = new MyObject(); Inspector inspector = new Inspector(); inpector.inspect(m); Ento ia ser listada informao sobre o objecto m inspeccionado. Informao como os fields existentes, mtodos aplicveis, etc. Vamos comear ento por listar os fields de um objecto:

for(Field field : object.getClass().getSuperclass().getFi elds()){ System.out. print(modToString(field.getM odifiers())+" "); System.out. print(field.getType().getCan onicalName()+" "); System.out. print(field.getName()+" = "); try{ field.setAccessible(true); System.out.println(field.get(object). to String()); } catch(IllegalAccessException iae){ System.out.println(iae+": No tem permisso."); throw new RuntimeException(); } catch(NullPointerException npe){ throw new RuntimeException(); } }

for(Field field : m.getClass().getDeclaredFields()){ //Aqui vamos buscar os modificadores do field (public, private...) System.out. print(modToString(field.getM odifiers())+" "); //Aqui vamos buscar o tipo e o nome do field System.out. print(field.getType().getCan onicalName()+" "); System.out. print(field.getName()+" = "); //Finalmente vamos buscar o valor do field try{ field.setAccessible(true); System.out.println(field.get(object). to String()); } catch(IllegalAccessException

Este exemplo bastante parecido com o anterior, a nica coisa que fizemos foi aceder super classe do objecto atravs do mtodo getSuperClass(). H uma linha em comum nos dois exemplos anteriores que pode merecer alguma curiosidade, a linha onde aparece field.setAccessible(true). Isto no passa de uma pseudo proteco que o sistema de reflexo do Java tem de maneira a que o programador no posso explicitamente alterar um valor de um field, sem primeiro dar autorizao para tal. Ou seja o programador que d autorizao a ele prprio para fazer a alterao.

<5>

tema de capa

Agora o desejvel seria alterar um determinado valor de um field, tambm possvel com a reflexo:

//Carregamos a classe com nome "Foo" Class cls = Class.forName("Foo"); //Vamos "bar" e Field f Foo foo buscar o field que tem nome criamos uma instncia de Foo = cls.getField("bar"); = new Foo();

System.out.println("bar = " + foo.d); //Aqui damos um novo valor ao field f.setInt(foo, 1024); System.out.println("bar = " + foo.d); ligao que existe entre ambas. A reflexo no est, de maneira nenhuma, directamente ligada ao Java. Muitas outras linguagens tm um sistema de reflexo, to bom ou melhor que o Java. Exemplos disso so o Common Lisp, Smalltalk, Python, etc. [4]

Estes exemplos no so nada de mais, comparado com o que se pode fazer com a reflexo do Java. A reflexo do Java tem uma API considervel, que pode ser explorada poupando trabalho ao programador. O poder que se tem sobre esta linguagem no o mesmo de outras como o Common Lisp, por exemplo, onde existe uma igualdade entre dados e programas, o que permite inspeccionar programas como se fossem dados. Mas o maior problema do sistema de reflexo do Java definitivamente a parte da intercesso, que muito limitada.

Referncias
[1] https://cis.med.ucalgary.ca/http/java.sun.com/docs/books/jls /first_edition/html/1.1Update.html [2] http://www.csg.is.titech.ac.jp/chiba/javassist/ [3] http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Class.html [4] http://en.wikipedia.org/wiki/Reflection_%28computer_scienc e%29

Concluses
Com este artigo pretendeu-se que o leitor tenha ficado com a ideia geral do que a meta programao e a reflexo, e a

Estudante do Instituto Superior Tcnico, est a tirar o Mestrado em Engenharia Informtica. As principais reas de interesse so os Sistemas Distribuidos e a Engenharia de Software, e como linguagens preferidas tem o C, o C# e o Java.

Lus Antunes

<6>

a programar

import MySQLdb

Interaco Python/MySQL

Ligao ao servidor
O primeiro passo na ligao base de dados a ligao ao servidor MySQL. Por muito complicado que isto possa parecer, faz-se numa linha de cdigo:

Introduo
Bases de dados so armazns estruturados de informao, nas quais guardada uma variedade imensa de dados. Na verdade, so muitas vezes o ncleo duro de aplicaes informticas, sem que, tambm na maioria das vezes, o utilizador final se aperceba. A importncia desta tecnologia hoje em dia imensa, sendo que foi necessrio o desenvolvimento de ferramentas para que programadores possam dela tirar partido. Entre essas ferramentas, incluemse diversos sistemas de gesto de bases de dados, como o MySQL, o SQLServer, a Oracle, entre outros, que permitem a manuteno das bases de dados de uma maneira relativamente simples. Porm, tambm para estas ferramentas de gesto foi desenvolvido software para facilitar ainda mais a vida a quem desenvolve. Neste artigo pretende-se explicar e exemplificar o uso de uma API que permite a manuteno de bases de dados usando MySQL a partir de scripts de Python. Porm, no limitado apenas a MySQL. Outros adaptadores para outros sistemas de gesto de bases de dados funcionam de maneira muito semelhante, por vezes at bastando apenas mudar uma linha de cdigo.

ligao = MySQLdb.connect('localhost', 'utilizador', 'password') E j est. Caso isto no funcione, convm rever quer a localizao do servidor, quer o nome e password do utilizador da base de dados. Claro que podemos substituir cada elemento por uma varivel previamente definida pelo utilizador (ou pelo prprio script). Tambm podemos optar por ligar (ou tentar ligar) directamente a uma base de dados (BD). O cdigo que se segue tira partido desta ltima abordagem:

nome_utilizador = 'utilizador' palavra_chave = 'password' servidor = 'localhost' base_de_dados = 'teste' MySQLdb.connect(servidor, nome_utilizador, palavra_chave, base_de_dados) Se tudo correr bem a consola age silenciosamente, ligandose ao servidor e BD em questo. Mas caso nos tenhamos enganado no nome da BD, ou, um caso provvel, se esta no existir, muito provavelmente aparece algo como: Traceback (most recent call last): [ ...... ] _mysql_exceptions.OperationalError: (1049, "Unknown database 'teste'" ) -nos devolvida uma excepo, que pode ser aproveitada. De facto, uma vez perguntei numa mailing-list se no havia maneira de ligar a um servidor e verificar se dada base de dados ou tabela existia. A resposta foi consensual: mesmo que exista, lidar com estas excepes torna o processo mais simples. A biblioteca MySQLdb traz consigo um mtodo que permite ento lidar com as excepes: MySQLdb.Error. Chamando este mtodo atravs de um except, pode-se aceder a 2 argumentos: o nmero do erro e a mensagem do erro. No nosso caso, vemos que o erro tem o nmero 1049. Vamos ento melhorar o nosso cdigo para incluir o tratamento deste erro:

Instalao
Antes de mais nada h que fazer o download do software necessrio. Este artigo e o cdigo foram criados e testados numa distribuio de GNU/Linux, neste caso Ubuntu, mas deve funcionar da mesma forma noutros sistemas operativos. Primeiro, necessrio ter o Python instalado (www.python.org). Depois, preciso ter o MySQL instalado (www.mysql.com). Por ltimo, a nossa pea de ligao entre os dois: http://sourceforge.net/projects/mysql-python. Na minha mquina, o processo no demorou mais de 2 minutos graas ao gestor de pacotes do Ubuntu. Antes de se dirigirem ao site, caso usem linux, verifiquem se no vosso gestor de pacotes j no est uma verso disponvel. Para verificarem se est tudo a funcionar, cheguem a uma qualquer consola Python e tentem importar o mdulo (cuidado com as maisculas!):

<7>

a programar
erro. Porm, conseguimos contornar esse erro, tirando partido, entretanto, da criao de uma base de dados a partir do nosso script. Como o conseguimos?

try: connection = MySQLdb.connect(servidor , nome_utilizador, palavra_chave, base_de_dados) except MySQLdb.Error, e: if e.args[0] == '1049': if (raw_input('Base de dados inexistente. Deseja criar?')) == 's': connection = MySQLdb.connect(servidor , nome_utilizador, palavra_chave) cursor = connection.cursor() command = 'CREATE DATABASE %s' %base_de_dados cursor.execute(command) cursor.close() Este excerto de cdigo inclui exemplos de mtodos ainda no explicados, mas cada coisa a seu tempo. De facto, como se pode observar, a excepo gerada tem 2 argumentos, sendo o primeiro, tal como j havia dito, o nmero do erro (e.args[0]). Podemos depois decidir como lidar com o problema. Neste caso, optei por perguntar ao utilizador se queria criar a base de dados teste, uma vez que esta ainda no existia. Caso a resposta fosse afirmativa, o programa encarregava-se de ligar ao servidor, criar um cursor, construir a query de SQL que cria a base de dados, e executar o comando. Antes de avanarmos para a definio de cursor, e dos seus mtodos, deixo antes um link para uma listagem dos erros, e respectivos cdigos numricos: http://dev.mysql.com/doc/refman/5.0/en/error-messagesserver.html

cursor.execute('CREATE DATABASE %s' %base_de_dados) Este pequeno pedao de cdigo ilustra um mtodo associado ao cursor que nos indispensvel: execute(). este mtodo que permite a interaco directa, por assim dizer, com a base de dados. atravs dele que passamos os comandos de SQL e que fazemos perguntas, que criamos tabelas e campos, que preenchemos bases de dados, ou que as actualizamos, ou mesmo destruimos. Como vimos, a sintaxe relativamente simples: o cdigo SQL passado como argumento funo execute(), sob forma de uma string. Para alm do mtodo execute (), supondo que queremos efectuar vrios comandos similares de uma s vez, por exemplo, uma mltipla insero, podemos recorrer a um mtodo irmo, mais guloso: executemany(). A sua sintaxe semelhante do execute(). Construamos a lista seguinte, de modo a ser inserida na base de dados a que j estamos ligados:

listaValores = [ ('Vermelho', 'Benfica'), ('Azul', 'Campeo'), ('Verde', 'Sporting')] O cdigo do mtodo executemany() ser:

cursor.executemany("INSERT INTO tabela1 (campo1, campo2) VALUES (%s, %s)", listaValores) A vantagem de usar este mtodo est na performance (bem como na organizao do cdigo). De facto, s temos que aceder uma vez base de dados, em vez de mltiplos acessos com vrios execute(). O outro mtodo relevante na interaco com as bases de dados o mtodo fetchone(). At aqui, tnhamos apenas interagido com a base de dados numa relao unidireccional (utilizador > base de dados). Contudo, o mtodo fetchone(), bem como os associados fetchmany() e fetchall(), permitem-nos tornar essa interaco bidireccional, tornando possvel ao utilizador recuperar informao inserida na base de dados. A sintaxe do comando relativamente simples. Aps um execute() com uma string de SQL que envolva um SELECT e que nos devolva n resultados, podemos aceder aos resultados

Cursores
Um cursor no passa de um apontador para a base de dados. De facto o que nos permite interagir com ela. Irei abordar 2 dos seus propsitos: execuo de comandos e recuperao de resultados. Como vimos no exemplo acima, caso no tivssemos uma base de dados qual ligar, ramos confrontados com um

<8>

a programar

usando uma das trs funes - fetchone(), fetchmany(), fetchall() - consoante queiramos um, vrios, ou todos os resultados. Para definirmos o nmero de resultados a ver no fetchmany() usamos outro mtodo do cursor: arraysize. Este, aceita um valor inteiro que, por defeito, 1. Segue-se um exemplo:

resultado = cursor.fetchone()

Concluso
Este mtodo devolve uma tupla de resultados, contendo uma linha por cada resultado, e caso o SQL no devolva resultados, o mtodo devolve None. Simples e eficaz. Para aceder ao contedo da linha podemos ou imprimir a varivel linha ou, caso queiramos uma coluna em especfico, aceder tal como a uma lista: resultado[0], resultado[2], etc. Outro mtodo til o rowcount(). Este devolve o nmero de linhas afectadas/produzidas pelo ltimo execute() (ou executemany()). Exemplificando, um SELECT que devolva um resultado de uma linha, tem um rowcount() igual a 1, enquanto um INSERT que afecte, digamos, 3 linhas, tal como o caso dos clubes l em cima, d um rowcount() igual a 3. Por fim, um ltimo mtodo que deve ser sempre chamado no final de todos os acessos base de dados, o commit. Chama-se tendo como classe-me a connection e sem argumentos. Depois deste commit, fecha-se o acesso base de dados, pelo mtodo close, tambm derivado da classe connection. Pondo estas ideias na prtica: connection.commit() connection.close() Como vimos, interagir com bases de dados em MySQL atravs de scripts de Python torna-se, graas MySQLlib, como dizem os ingleses, a walk in the park, ou, em bom portugus, como tirar o doce a uma criana. Uma vantagem interessante desta biblioteca, que o seu cdigo exactamente igual ao usado por outras bibliotecas que acedem a outros provedores de bases de dados, como a SQLite ou o PostgreSQL. Deixo, em jeito de despedida, links para bibliotecas em Python para fazer ligao a outras bases de dados, bem como o desafio de lhes aplicarem este cdigo e, ou me dizerem que funciona, ou me enviarem hate-mails porque no funciona! PostgreSQL: http://pypgsql.sourceforge.net/ http://www.initd.org/ http://www.pygresql.org/ SQLite sqlite3 (includa com o Python 2.5)

Estranhamente, Joo Rodrigues no vem das hostes dos informticos tendo tido o primeiro contacto com a programao no 3 ano do curso. Um descontrado finalista da Licenciatura em Bioqumica em Coimbra, com particular interesse pelas reas da Bioinformtica e da Protemica, entrou para a Revista PROGRAMAR e com o objectivo de mostrar que h mais na informtica para alm de bits e bytes.

Joo Rodrigues

<9>

a programar

O Namespace MY em VB.Net 2005

My.WebServices - mantm uma propriedade por cada servio Web que o projecto referencie, possibilitando o acesso aos mesmo sem haver a necessidade de criar um objecto proxy de cada vez que seja necessrio invocar um mtodo no servio Web(este no ser to abordado).

My.Application
Aqui possvel obter aspectos relacionados com a aplicao em si, tal como a verso, o ttulo, quem a produziu, a empresa, entre outros Vamos criar um boto que nos mostra uma messagebox com alguma desta informao.

O VB.NET 2005 introduziu uma caracterstica muito interessante em relao s outras verses, criando o namespace My. O namespace My contm um conjunto de objectos que simplifica o acesso a diversas reas do .NET Framework, como o sistema de ficheiros ou dados da aplicao. Este namespace no est disponvel noutras linguagens .NET. Para alm de reduzir a quantidade de cdigo (na implementao de diversas funcionalidades era necessrio recorrer a APIs) o namespace My expe alguns objectos que so gerados dinamicamente medida que se acrescentam caractersticas aos projectos. Por exemplo, cada classe form que se acrescenta a um projecto fica disponvel atravs de uma propriedade distinta do objecto My.Forms.

Objectos do Namespace My
My.Application - expe informao acerca da aplicao actual, tal como o seu percurso no sistema de ficheiros, a sua verso, e modo de autenticao do utilizador; My.Computer - encerra um conjunto de subclasses destinadas a lidar com as caractersticas mais importantes do computador, tais como o sistema de ficheiros, subsistemas de udio e vdeo, memria, teclado, rato, rede, portas srie, impressoras, etc; My.Forms - apresenta uma propriedade por cada classe form definida no projecto e possibilita referenciar a instncia desse form sem se ter de criar explicitamente um objecto da mesma; My.Resources - possui um objecto derivado por cada recurso(mais frente explicarei melhor o que um recurso) definido no projecto; My.Settings - expe uma propriedade por cada valor de configurao(setting) definida nas configuraes do projecto; My.User - devolve informao sobre o utilizador actualmente registado, possibilitando a implementao de mecanismos de autenticao;

Dim sbInfo As New System.Text.StringBuilder With My.Application.Info sbInfo.Append("Ttulo: " & .Title & vbNewLine) sbInfo.Append("Verso: " & .Version.ToString & vbNewLine) sbInfo.Append("Descrio: " & .Description & vbNewLine) sbInfo.Append("Empresa: " & .CompanyName & vbNewLine) sbInfo.Append("Direitos: " & .Copyright) End With MessageBox.Show(sbInfo.ToString(), "Informao do Sistema" , MessageBoxButtons.OK, MessageBoxIcon.Information) Podemos tambm chamar a aplicao com parmetros. Dim fInfo As New IO.FileInfo(Application.ExecutablePath) System.Diagnostics.Process. Start(fInfo. Name.ToString(), "m nome:anolsi") 'Aqui chamada uma nova instncia da aplicao No event load do form principal obtemos os parmetros:

For Each s As String In My.Application.CommandLineArgs Select Case s Case "m" : MessageBox.Show("Bem-Vindo") 'Argumento que mostra a mensagem de boas vindas

<10>

a programar

Case "nome:" & ChrW(0) To "nome:" & ChrW(65535) : MessageBox.Show(s.Substring(5)) 'Argumento que mostra o nome do utilizador End Select Next

Este constitui ainda uma excelente porta de comunicao entre o programa e os perifricos do computador, como o rato (My.Computer.Mouse), o teclado (My.Computer.Keyboard), o monitor (My.Computer.Screen), as Portas (My.Computer.Ports). Ainda mais importante o My.Computer.Network, que nos permite fazer Ping, DownloadFile, UploadFile Funes que em verses anteriores nos obrigavam a ter mais linhas de cdigo. Aqui est uma maneira simples de verificarmos o acesso ao P@P:

My.Computer
Atravs do My.Computer vamos ler um ficheiro para uma textbox, alter-lo e depois grav-lo. Antes de mais, no cdigo, vamos acrescentar duas linhas no incio do cdigo antes de Public Class (zona de declaraes): 'Aqui iremos declarar constantes. Public Const FICHEORIGINAL As String = "c:\exemplo.txt" Public Const FICHENOVO As String = "c:\copia.txt" Private Sub btnAbrir_Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles btnAbrir.Click If My.Computer.FileSystem. FileExists(FICHE ORIGINAL) Then 'Verifica se o ficheiro existe Me.txtFiche.Text = My.Computer.FileSystem. ReadAllText(FICH EORIGINAL) 'L o texto todo para a TextBox End If End Sub Private Sub btnGravar_Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles btnGravar.Click My.Computer.FileSystem. WriteAllText(FIC HEORIGINAL, Me.txtFiche.Text, False) 'Escreve o texto da TextBox para o ficheiro sem adicionar (sobrepe). End Sub Private Sub btnCopiar_Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles btnCopiar.Click My.Computer.FileSystem. CopyFile(FICHEOR IGINAL, FICHENOVO) 'Copia o ficheiro FICHEORIGINAL para FICHENOVO End Sub

If My.Computer.Network. IsAvailable() Then 'Verifica se est ligado a alguma rede Try 'O Try...Catch apanha o erro no caso de estar ligado a uma rede mas no internet If My.Computer.Network.Ping("portugal-aprogramar.org") Then 'Tenta fazer um ping para "portugal-a-programar.org" MessageBox.Show("Acessvel!", "Teste de Ligao ao P@P", MessageBoxButtons.OK, MessageBoxIcon.Information) Else MessageBox.Show("Inacessvel!", "Teste de Ligao ao P@P", MessageBoxButtons.OK, MessageBoxIcon.Information) End If Catch ex as Excepcion MessageBox. Show("No foi possvel realizar o pedido de Ping." , "Erro!", MessageBoxButtons.OK, MessageBoxIcon. Error) End Try Else MessageBox.Show("No est ligado a nenhuma rede.", "Erro!", MessageBoxButtons.OK, MessageBoxIcon. Error) End If

Como podem verificar bastante simples de usar. claro que as nossas constantes poderiam ser variveis, obtidas at a partir de uma dialogbox onde iramos obter o ficheiro para abrir ou para gravar, ou mesmo para copiar. No entanto isso fica fora das competncias do namespace My.

<11>

a programar

My.Forms
O My.forms permite, pura e simplesmente, acesso aos formulrios criados, sendo tambm possvel recorrendo simplesmente ao nome do formulrio. Exemplo: frmPrincipal.text = "Aqui fica o ttulo!" My.Forms.frmPrincipal.text = "Aqui fica o ttulo!" A nica vantagem consiste na ajuda do intelliSense que disponibilizada. Ao escrevermos My.Forms., o intelliSense apresenta todos os formulrios criados at altura. Outro exemplo verificar se um determinado formulrio est ou no a ser exibido e caso no esteja, mostra-o:

Resources.FICHEORIGINAL, Me.txtFiche.Text, False) End Sub Private Sub btnCopiar_Click(ByVal sender As System. Object , ByVal e As System.EventArgs) Handles btnCopiar.Click My.Computer.FileSystem. CopyFile(My.Reso urces.FICHEORIGINAL, My.Resources.FICHENOVO) End Sub

My.Settings
Tal como referi anteriormente o que distingue as settings dos resources o facto de as settings se comportarem como variveis globais, enquanto os resources como constantes globais. Ainda de referir que as settings podem ser de qualquer tipo como as variveis mas que no so esquecidas ao terminar o programa. Estas possuem uma extrema relevncia, uma vez no necessitamos de guardar as variveis em ficheiros ou no registry do Windows, nem que sejamos confrontados com a necessidade de proteger a informao, ou garantir que ela no alterada. A prpria linguagem encarrega-se disso. Para criarmos uma nova setting, vamos ao My Project e, como no poderia deixar de ser, ao separador Settings. Vamos criar uma setting cuja funo guardar o ltimo tamanho do formulrio. Essa setting ser do tipo System.Drawing.Size. Convm ter um valor por defeito. Depois inserirmos o seguinte cdigo: Private Sub frmPrincipal_Load(ByVal sender As Object , ByVal e As System.EventArgs) Handles Me.Load Me.Size = My.Settings.Tamanho End Sub Private Sub frmPrincipal_ResizeEnd (ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.ResizeEnd My.Settings.Tamanho = Me.Size My.Settings.Save() End Sub Para voltarmos a coloca o valor por defeito das settings, devemos incluir esta instruo quando o quisermos fazer: My.Settings.Reset()

If My.Forms.frmSec Is Nothing Then My.Forms.frmSec.Show()

My.Resources
Os recursos esto muito ligados s settings, as quais vamos tratar a seguir, mas constantes porque no possvel ser alterado a nvel do cdigo em run-time. Vamos criar um exemplo onde iremos colocar os valores das constantes criadas a propsito do My.Computer. 1. Abrir o My Project no Solution Explorer e ir para o separador Resources; 2. Iremos dar-lhes o mesmo nome FICHEORIGINAL e FICHENOVO com os mesmos valores.

Private Sub btnAbrir_Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles btnAbrir.Click If My.Computer.FileSystem. FileExists(My.Re sources.FICHEORIGINAL) Then Me.txtFiche.Text = My.Computer.FileSystem. ReadAllText(My.R esources.FICHEORIGINAL) End Sub Private Sub btnGravar_Click(ByVal sender As System. Object, ByVal e As System.EventArgs) Handles btnGravar.Click My.Computer.FileSystem. WriteAllText(My.

<12>

a programar

My.User
O My.User serve essencialmente para saber se o utilizador est autenticado, qual o nome do utilizador e se este administrador, limitado, convidado, etc. De salientar que se o My.User for usado em aplicaes Windows este refere-se ao utilizador que est a executar a aplicao, enquanto em aplicaes web este refere-se a quem acede aplicao e no onde ela est a correr.

End If MessageBox.Show(String.Format("Nome do Computador: {0} " + vbNewLine + "Utilizador: {1} " + vbNewLine + "{2}", parte(0), parte(1), tipo), "Utilizadores", MessageBoxButtons.OK, MessageBoxIcon.Information) Else 'Caso o utilizador no esteja autenticado (caso do convidado) a aplicao termina MessageBox.Show("No est autenticado.", "Erro!", MessageBoxButtons.OK, MessageBoxIcon. Error) Me.Close() End If

If My.User.IsAuthenticated Then 'Verifica se o utilizador est autenticado 'O valor do My.User.Name ser algo do tipo "Nome_do_Computador\Utilizador" e por isso vamos separ-los pela \ Dim parte() As String = My.User.Name.Split("\"c) Dim tipo As String = "" If My.User.IsInRole(ApplicationServices.Bu iltInRole.Administrator) Then 'Verifica se administrador atravs do IsInRole tipo = " Administrador" Else tipo = "No administrador"

Concluso
Como podemos constatar, a existncia deste namespace veio trazer muitas vantajens ao programador, servindo at como um ponto de partida para as funcionalidades mais simples e, mesmo assim, aqui apenas foram apresentadas algumas funcionalidades do namespace My, porque o artigo no possui extenso suficiente para serem abordadas todas as suas funcionalidades. Mesmo assim o leitor pode, a partir deste momento, explorar sozinho todas as outras funcionalidades do namespace.

Frequentando actualmente o 2ano do Curso Profissional de Informtica de Gesto, Antnio Silva adora programar em VB e C. Estou tambm a aprender JavaScript, PHP e ainda XHTML.

Antnio Silva

<13>

a programar

Engenharia de Software

manuteno/evoluo. Assim, existem trs fases que do origem a trs documentos fulcrais: Requirement Analysis, Requirement Defination e Requirement Specification. Requirement Analysis um documento simples, resultante de uma reunio entre a equipa de desenvolvimento, ou o gestor da equipa, e o cliente. Funciona como uma espcie de acta, onde so apresentados de forma corrente (linguagem normal), os pedidos do cliente e aquilo que ser possvel fazer. possvel tambm encontrar diagramas e maquetas, que facilitem a compreenso por parte do seu leitor. Requirement Definition J se trata de um documento mais cuidado, onde os dados j foram filtrados e estruturados por grau de importncia/risco. Continua a ser escrito em linguagem corrente, e a contar com alguns diagramas/maquetas. Requirement Specification Nesta fase, estudam-se os resultados da discusso com o cliente e cria-se um documento mais abstracto e profissional, nele j poder existir algum algoritmo/bloco de cdigo que esclarea situaes dbias. Ocasionalmente, devido ao seu nvel de preciso, este documento pode ser utilizado com contrato entre ambas as partes.

Introduo
A engenharia de Software(ES) pode ser considerada uma das reas mais abstractas, mais importantes, porm, das reas menos exploradas da Informtica. Esta subseco da Informtica aborda de forma precisa e consistente os passos para a criao de uma boa aplicao de Software, desde a sua gnese at ao lanamento do produto. Neste pequeno artigo, ser abordado de forma simples e bsica o Engenharia de Software, e os conceitos adjacentes.

Estudo de fiabilidade
Metaforicamente falando possvel fazer uma analogia entre a criao de uma aplicao de software e a construo de um edifcio. Ambos so faseados. O plano de fiabilidade uma fase crtica para concretizao de um projecto, dado ser neste ponto que a equipa de desenvolvimento verifica se existem condies para a sua concretizao. Isto acontece pois necessrio ter certezas absolutas que o software ter a menor quantidade de falhas possvel. Para facilmente absorvermos este conceito, basta imaginarmos um avio, que hoje em dia pilotado automaticamente por uma aplicao de software extremamente complexa. Um pequeno bug por si s basta para que possam existir erros no sistema de voo e causar a morte a dezenas/centenas de pessoas e prejuzos de milhares de euros.

Modelos de desenvolvimento de aplicaes


Existem vrios modelos de desenvolvimento. Aqui apenas sero abordados de forma superficial dois deles, que influenciaram de forma muito significativa, Modelo em cascata e Modelo em espiral. Modelo em Cascata o modelo mais simples, e tambm mais desactualizado. No entanto, para se falar neste modelo, necessrio fazer uma pequena aluso poca em que foi usado. Foi proposto por volta dos anos 70, por Royce, e teve um grande impacto pela sua simplicidade/facilidade de utilizao. necessrio recordar que nessa poca os compiladores (que existiam) levavam bastante tempo a fazer o seu trabalho, por isso

Documentao
Uma boa pea de software est devidamente documentada. Deste modo, facilita-se no s a apresentao dos requisitos, como tambm possvel fazer uma boa

Modelo em Cascata

<14>

a programar

uma aplicao no podia ser baseada em tentativa erro, mas sim em fundamentos tericos. Este modelo veio consolidar esses factos. No modelo em Cascata (WaterFall), para se poder avanar uma fase, necessrio que a fase anterior esteja completamente terminada, como se pode ver pela imagem. Este modelo sequencial, e qualquer fase pode ser revista em qualquer momento do desenvolvimento. Modelo em Espiral O modelo em espiral um modelo ainda hoje muito utilizado. Foi apresentado no final da dcada de 80 (1988) por Boehm. Trata-se de um modelo iterativo, em que existe em cada momento de do ciclo, pelo menos uma anlise de riscos e a criao de um prottipo (como se pode verificar pela imagem abaixo). Este modelo ainda muito actual, e apesar de aparentar ser bastante complexo, permite a criao de aplicaes muito fiveis.

Validao/Verificao
Validao e verificao so dois conceitos, que apesar de terem escrita diferente, tm significados muito idnticos, e por isso so muitas vezes confundidos. Em 1979, Boehm, criou uma definio bastante simplista sobre estes dois conceitos, que permite a sua fcil distino: - Validation - Are we building the right product? - Verification - Are we building the product right? Sendo assim, possvel afirmar que a validao de uma aplicao de software consiste na certeza de que o produto corresponde s especificaes do cliente e aos requisitos impostos pela equipa de desenvolvimento, enquanto a verificao consiste na confirmao que o software contm o menor nmero de bugs possvel, que estvel e robusto.

Evoluo/Manuteno
Sendo parte integrante do processo de desenvolvimento de uma qualquer aplicao de software, a evoluo/manuteno, esto dependentes de uma documentao precisa, rigorosa, e bem estruturada. Isto porque muitas vezes quem oferece suporte a uma aplicao ou quem a far evoluir, devido s necessidades dos utilizadores, no a equipa que desenvolveu o software. Sendo assim, caso no haja bons documentos, ser necessria muita engenharia reversa, o que far os custos do software aumentar abruptamente.

Custos
Para alm de englobar mtodos de trabalho, documentao, a engenharia de software engloba ainda um rea de anlise de custos. Esta anlise de custos no se refere apenas a analisar o custo financeiro que poder ter o desenvolvimento de uma determinada aplicao, mas tambm os custos humanos/psicolgicos. Neste ponto entra a agilidade de um bom gestor/coordenador da equipa de desenvolvimento, que ter por obrigao manter a equipa de desenvolvimento motivada para que no existam derrapagens, e deste modo tudo seja concretizado dentro dos tempos previstos.

Francisco Ribeiro, estudante do segundo ano da Licenciatura em Engenharia Informtica, na Universidade do Minho. Tem interesse especial por haskell, C, e Linux. Como autodidacta, estuda AS2 e Python.

Francisco Ribeiro
<15>

a programar

Proposta Sintctica: Linguagem Projecto de Programao


Introduo
Este artigo prope e discute um formato padro para a elaborao da documentao escrita da linha de raciocnio lgico do cdigo de programao de computadores em lngua portuguesa, por meio do uso de uma Linguagem de Projecto de Programao (LPP), de maneira que possa tal cdigo textual ser traduzido para qualquer linguagem formal estruturada de programao de computadores. O tema aqui exposto no assunto indito, pois j foi discutido em 1975 no artigo PDL - A Tool for Software Design, escrito pelos investigadores Stephen H. Caine e E. Kent Gordon. Neste artigo os autores apresentam uma forma de escrita que objectiva representar, de forma clara, as aces a serem executadas em um computador sem levar em considerao o uso especfico de uma linguagem formal de programao de computadores. No se trata de apresentar uma traduo da proposta PDL, mas sim formatar e propor critrios que permitam o uso de uma nomenclatura em lngua portuguesa mais equilibrada e homognea em relao forma que vem sendo utilizada. Deseja-se assim sugerir algumas regras de escrita que possam evitar a multiplicidade de dialectos encontrados. O factor que motivou a elaborao desta discusso decorre do facto de vrios profissionais da rea de desenvolvimento de programas de computadores principalmente no Brasil ao fazerem (quando fazem) uso de alguma tcnica semelhante a tcnica PDL no o fazem segundo uma regra ou forma nica, cada qual, quando a usa, f-lo de uma forma particular e diferente, ocasionando dificuldades no uso da tcnica.

da tcnica em portugus, pois vrios so os nomes sugeridos, como: portugol (GUIMARES & LAGES, 1994), linguagem de descrio (VELOSO, et. al., 1996), linguagem universal de programao (TERADA, 1991), linguagem de leitura simples (SZWARCFITER & MARKENZON, 1994), e outras tantas formas encontradas e definidas no sentido de tentar representar e indicar a mesma ideia. O facto de cada autor ou profissional definir uma forma particular de escrever a estrutura funcional de um cdigo computacional e tambm o seu nome de identificao no caracteriza nenhuma espcie de erro, mas estabelece uma srie de dialectos que se tornam confusos e geram interpretaes e discusses desnecessrias sobre que forma ou no vlida. A tabela 1 mostra as palavras-chave de pseudocdigo usadas pelos autores pesquisados e suas correlaes com as linguagens formais de programao de computadores PASCAL e STRUCTURED BASIC e tambm a proposta de comandos da Linguagem de Projecto de Programao. Para melhor interpretao da tabela considere o nome de cada coluna segundo a legenda: BAS Cdigo em Structured BASIC; GUL Guimares e Lages; LPP Linguagem de Projecto de Programao; PAS Cdigo Pascal; SZM Szwarcfiter & Markenzon; TER Terada; VEL Veloso, et. al. A indicao das linguagens formais de programao PASCAL e STRUCTURED BASIC so consideradas no sentido de ajudar a demonstrar o motivo em propor a definio de uma regra de codificao mais genrica para a forma LPP em relao ao formato utilizado pelos demais autores. Note que a LPP engloba um conjunto maior de instrues em relao ao conjunto de instrues das linguagens PASCAL e STRUCTURED BASIC e tambm do conjunto proposto no trabalho particular de cada um dos autores apontados. Os campos da tabela que se encontram grafados em branco em qualquer uma das formas apresentadas mostram a ausncia de comandos referentes s aces indicadas pelos autores de cada obra consultada. Quanto aos campos relacionados com as linguagens formais de programao PASCAL e STRUCTURED BASIC que esto em branco, estes indicam a ausncia da aco na linguagem em si. Alm da proposta de padronizao do conjunto de palavras reservadas, h a necessidade de definir um padro para a representao genrica de uso dos operadores aritmticos, operadores lgicos e operadores relacionais. Assim sendo,

LINGUAGEM DE PROGRAMAO LPP

PROJECTO

DE

Uma das questes aqui discutidas o facto de se definir um formato textual padro e homogneo para a utilizao dos comandos de pseudocdigo portugus a ser utilizado na documentao do cdigo de um programa de computador. Alm da preocupao em relao s palavras de comandos a serem definidas, existe a questo relacionada com o nome

<16>

a programar

segue-se na tabela 2 a apresentao e as comparaes entre as vrias definies dos operadores aritmticos, lgicos e relacionais a serem utilizados pela LPP. Definida a proposta de estrutura de codificao a ser utilizada pela LPP cabe mostrar na tabela 3 a relao dos comandos propostos e sua classificao sintctica dentro da esfera da lngua portuguesa, de acordo com a representao da aco a ser executada por cada um dos comandos. Uma linguagem de programao de computadores de alto nvel (mesmo que seja uma linguagem de documentao como a proposta da LPP) formada por um conjunto de preposies, conjunes, substantivos, adjectivos, advrbios, verbos e interjeies e devido a estas caractersticas recebe o nome de linguagem de programao, que o conjunto de instrues e regras de

composio e encadeamento, pelo qual se expressam aces que so executadas por um computador. Assim sendo, passa-se a ter um instrumento eficiente e eficaz de comunicao.

Concluso
Este artigo no pode ser conclusivo, uma vez que abre a proposta de discusso em apresentar uma forma de documentao que seja oficializada para uma representao mais formal e homonea do formato escrito da linha de raciocnio computacional. Sugere-se assim uma forma mais homognea de escrita que seja til para os profissionais de desenvolvimento de software, professores, alunos e demais interessados.

<17>

a programar

Bibliografia
CAINE, S. H.; GORDON, E. K. PDL: A Tool for Software Design. In PROCEEDINGS OF THE I975 NATIONAL COMPUTING CONFERENCE, 1975, Anaheim, CA. Montvale, NJ: AFIPS Press, 1975, 271-276. GUIMARES, A. de M.; LAGES, A. de C. Algoritmos e Estruturas de Dados. 18. ed. Rio de Janeiro: Livros Tcnicos e Cientficos, 1994, 216 p.

SZWARCFITER, J. L.; MARKENZON, L. Estruturas de Dados e seus Algoritmos. Rio de janeiro: Livros Tcnicos e Cientficos, 1994, 320 p. TERADA, R. Desenvolvimento de Algoritmos e Estruturas de Dados. So Paulo: Makron Books, 1991, 255 p. VELOSO, P. et. al. Estruturas de Dados. Rio de Janeiro: Campus, 1996, 228 p.

Natural da Cidade de So Paulo, Augusto Manzano tem 23 anos de experincia em ensino e desenvolvimento de programao de software. professor da rede federal de ensino no Brasil, no Centro Federal de Educao Tecnolgica de So Paulo. tambm autor, possuindo na sua carreira mais de cinquenta obras publicadas..

Augusto Manzano
<18>

segurana

scans e que alguns administradores instalam para confundir e boicotar as tentativas de scan.

Network Scanning

Mas como que um Network Scanner determina qual a aplicao que est a correr?
Para respondermos a esta pergunta temos que analisar como o protocolo TCP/IP funciona. Grande parte das aplicaes usa dois protocolos da Camada 4 do modelo OSI: o protocolo TCP (Transmission Control Protocol) e o UDP (User Datagram Protocol). Ambos os protocolos tm que comunicar com as camadas acima e com diversas aplicaes e sesses, assim para no se confundir os dados usam-se portas que permitem mltiplas conexes existir apesar de ser usado apenas um IP. Tanto o UDP como o TCP podem usar ambos 65536 portas. Muitos protocolos e programas tm portas definidas. Os network scanners (NS) determinam quais as aplicaes a correr testando as portas mais usadas e verificar quais aceitam conexes. Alm de verificar quais as portas abertas, certos NSs ainda conseguem ir mais longe: conseguem verificar a verso da aplicao que est a correr. Exemplo de um NS que consegue fazer isso o famoso Nmap. Vamos ento ver como funciona o scanning em TCP e depois em UDP, porque existem certos parmetros que devem ser conhecidos. No nos interessa saber usar um programa se no soubermos como ele funciona.

Quando chega a hora de verificar se uma rede ou no segura, a melhor opo talvez fazer um scan rede e verificar se existem falhas ou outras situaes que possam comprometer a integridade de uma rede. Basicamente para cada ataque a uma determinada rede necessrio levar em conta dois parmetros e so eles o endereo de IP e o nmero da porta do host que vamos atacar ou testar. Por exemplo, se tivermos um exploit para o IIS ser necessrio o endereo de IP do host que esteja a correr o IIS e talvez necessitemos do nmero da porta no caso de o IIS no estar a usar a porta standard. Ora temos aqui um obstculo. necessrio termos estes dois parmetros para que possamos efectuar qualquer tipo de tentativa quer para atacar quer para testar as defesas de uma rede, mas como que podemos ento saber qual o endereo IP de um host assim como as portas abertas e os servios que esto a correr nele? Essa a funo de um network scanner. Na verdade este tipo de ferramentas so muito teis no s para verificar estes parmetros, como tambm para sabermos a topologia de uma rede ou at mesmo verificar as regras de um firewall.

Scanning usando o TCP


O objectivo deste scan como bvio determinar quais so as portas TCP que tem aplicaes a correr. Usando o protocolo TCP possvel descobrir quais as portas abertas sem ser necessrio para isso completar a conexo. Como? O protocolo TCP um protocolo que presta um servio fivel, no sentido em que aquilo que o TCP recebe aquilo que envia, contrariamente ao que acontece com o UDP, usando para isso o flow control e uma comunicao connection-oriented.

Como que os scanners funcionam?


Apesar de existir uma grande variedade de scanners, praticamente todos eles seguem os mesmos princpios. Que princpios? Como que aplicaes, como por exemplo o FTP, funcionam? Estas aplicaes usam frames para enviar informao. No entanto uma aplicao no comea logo a enviar dados. necessrio primeiro proceder a uma srie de averiguaes que vo definir por exemplo qual a sequncia das frames, qual a quantidade de informao enviada antes de receberem um acknowledgement e muitos outros parmetros. Os scanners usam estas conversas para fazer o scan, eles enviam frames para o host e depois esperam a resposta. To simples como isto. Se for dada uma resposta bem provvel que determinada aplicao esteja a correr. Mas, existe sempre um mas, no se deixem enganar porque existem programas como o PortSentry cujo objectivo confundir os

<19>

segurana

Temos que compreender que o protocolo TCP, contrariamente ao UDP, um protocolo que prima pela fidelidade e integridade da conexo. E isso visto na maneira como o TCP inicia uma conexo, usando o threeway handshake. Como podemos ver pela figura, o host primeiro envia um acordo de conexo com um pacote SYN (de sincronizao). Depois o server enviam um pacote de ACK (acknowledgment) e estabelece as regras. A sincronizao dos pacotes tambm definida nesta altura o que requer o tal pacote com o SYN. Por fim o ultimo segmento tambm um ACK do host que notifica o server de que as regras de conexo foram aceites e a conexo est estabelecida e que os dados vo comear a ser transferidos. Assim para verificar se uma aplicao est escuta numa determinada porta, o NS pode enviar um pacote com TCP SYN e esperar pelo resultado. Se a resposta for um SYN/ACK podemos dizer que a porta est aberta, se for RST podemos dizer que a porta est fechada, se no houver uma resposta podemos dizer que ou uma firewall est a bloquear as conexes a essa porta, ou simplesmente no existe um servio a escutar naquela porta do host com aquele IP address. Existem diversos tipos de scans com TCP, isto porque existem 6 tipos diferentes de flags nas frames enviadas: URG (URGent pointer); ACK (ACKnowledgement); PSH (PuSH); RST (ReSeT). SYN (SYNchronisation); FIN (FINished). A flag URG usada para identificar informao que (logicamente) urgente. A vantagem do uso desta flag que esses segmentos passam frente de todos os outros e processados imediatamente. A flag ACK usada para avisar que a recepo de um pacote foi bem sucedida. Mas j esto a ver como seria se em cada pacote enviado fosse recebido um ACK, por isso possvel definir a quantidade de pacotes a receber antes de se enviar um ACK. A flag PSH que, similarmente URG, garante que a informao seja trata com prioridade mas acompanha o processo dos dados do princpio ao fim do envio. Na verdade, um pouco mais complexo do que isto, mas apenas estamos a fazer um pequeno resumo. A flag RST usada quando um segmento chega mas por engano ou quando o servio que requisitado no est disponvel. Esta uma das flags usadas para verificar se determinada aplicao est a correr. A flag SYN talvez a mais conhecida de todas e que usada no 3-way Handshake, como vimos acima.

A flag FIN usada para terminar as conexes e caminhos virtuais criadas pela SYN e acompanhada pela flag ACK para confirmar em ambos os lados que a conexo vai ser terminada. Como podemos ver neste pequeno resumo, estas flags so usadas pelo TCP/IP para indicar o estado de uma comunicao feita. Por omisso, um scan TCP apenas usa a flag SYN porque esta a que produz resultados mais fiveis e tambm a que menos d nas vistas, porque encarada como trfego normal, igual a qualquer outro. No entanto, podem ser usadas diversas combinaes de flags que podem retornar resultados interessantes. Com o nmap, para usarmos uma combinao de flags basta fazer, por exemplo, isto:
C:\>nmap scanflags SYNFIN nmap.org

Neste caso dizemos ao Nmap que faa um scan ao nmap.org mas usando para isso apenas as flags SYN e FIN.

Tipos de Scan TCP com Nmap


O Nmap permite a combinao arbitrria de flags mas algumas certamente apresentaram resultados mais teis que outros. Por isso o Nmap prev atalhos para os mais conhecidos. De seguida mostro alguns:
SYN scan sS

o scan feito por defeito pelo nmap.


Connect scan sT

similar ao feito com o sS, mas neste caso a conexo feita totalmente e depois desligada. inferior ao sS porque envolve mais pacotes e tem maior probabilidade de dar nas vistas.
Windows scan sW

Este scan trabalha da seguinte forma, primeiro faz um scan com o ACK e depois verifica o tamanho da janela TCP enviada pelo host destinatrio. Alguns sistemas operativos usam diversos tamanhos da janela dependendo se a porta esta aberta ou no.
ACK scan sA

Este scan particularmente til para descobrir as regras de firewall de certos firewalls. Um host que receba este pacote dever retornar um RST independentemente se a porta est aberta ou no. Se o RST enviado o Nmap assume ento que a porta no est a ser filtrada por um firewall ao passo que se no houver qualquer resposta da parte do alvo o Nmap deduz ento que existe algures um firewall. Mas, claro que isto depende muito do tipo de firewall que esteja a proteger. Apesar disso sempre d para ficarmos com uma ideia do que se passa.

<20>

segurana

Mas ateno que este scan demora muito tempo, por isso, se possvel, limitem as portas a serem testadas.

Mapeamento de Rede
Agora que sabemos como cada protocolo se comporta ao ser feito um scan, podemos passar para outra parte que o mapeamento da rede, descobrindo quais so os endereos de IP que tem um PC associado a ele. Quando nos deparamos com um rede desconhecida, uma das primeiras coisas a ser feita determinar qual o endereo IP que tem um PC associado e isto importante porque grande parte das redes usa o chamado NAT (Native Address Translation) em que apenas uma pequena percentagem dos IPs so usados. Mas ao fazermos um scan host rapidamente podemos identificar quais os IPs com PCs associados a eles. Usando o Nmap podemos usar uma opo para fazer este scan host:
C:\>nmap n sP 12.125.10.1-15

UDP Scanning
Agora que as coisas ficam um pouco mais complicadas. Fazer um scan usando o UDP um pouco mais complicado devido forma como o protocolo UDP funciona. Contrariamente ao TCP, que tem o cuidado de verificar o estado da ligao e definir at mesmo regras para a transferncia de dados, o UDP no usa o handshakes e o primeiro pacote de dados enviado logo enviado para a aplicao, no existe qualquer tipo de preocupao por parte do UDP em verificar se os dados foram ou no entregues. Mas mesmo assim este protocolo pode ser usado para fazer um scan, como vamos ver de seguida.

Tipos de scan UDP com o Nmap


Existem dois tipos de scan que podemos fazer usando o UDP: o scan com pacotes vazios e o scan com informao do protocolo. O primeiro scan, o dos pacotes vazios, envolve enviar pacotes UDP sem nenhum dado para uma porta e esperar o resultado. um scan muito incerto, mas existe um scanner de nome Unicornscan que produz resultados mais fidedignos em virtude da maneira como trabalha. Para fazlo com o Nmap basta:
C:\>nmap sU nmap.org

A primeira opo que usamos a n que diz ao Nmap para no fazer lookups no endereo IP em que est a ser feito o scan isto porque um reverse DNS lookups demora mais tempo e por isso d mais nas vistas. Na prxima opo a -sP o Nmap envia um ping assim como tambm um pacote SYN para a porta 80 para determinar se naquele endereo IP algum PC est a escutar. Acontece tambm que se estivermos na mesma subrede que o IP a que estamos a fazer o scan o ARP usado para sabermos quais so os endereos IP em uso. Como vimos, a opo sP faz com que o Nmap envie um ping para o endereo IP para verificar se este tem ou no um PC associado, mas bem provvel que exista uma firewall pelo caminho e o que acontece que estes pings so ento bloqueados. At mesmo a firewall que vem com o Windows XP faz isso. claro que existe maneira de dar a volta a esta situao, usando a opo P0 que diz ao Nmap para se conectar a cada porta apesar de parecer no existir um PC. Como se pode imaginar, um processo bastante moroso. Mas sendo o Nmap uma ferramenta bastante completa, podemos usar outras opes para chegar quase ao mesmo resultado. Ao usarmos as opes Psportlis (para os pacotes SYN) e PAportlist (para os pacotes ACK) bastar definir as portas que queremos que sejam usadas. Estas so algumas das opes que podemos usar, mas existem outras tais como a PE, -PP e PM em que se utiliza o ICMP para fazer scans. claro que necessrio fazer scans s portas certas e no perder tempo com outras. Quais que so as mais comuns? E quais que so as mais propcias a dar bons resultados?

O scan usando dados de protocolo so mais sofisticados que envolve enviar dados de aplicaes vlidas em pacotes UDP para portas para ver se alguma aplicao responde. Usando esta tcnica apenas so consideradas portas abertas se responderem a esses dados enviados com um nonerror. Mas este tipo no muito aconselhvel porque demora muito tempo, o que aumenta a possibilidade de ser detectado. Mas mesmo assim se querem fazer este tipo de scan podem faz-lo com o nmap bastando para isso:
C:\>nmap sU sV nmap.org

<21>

segurana

Bem, depende do sistema operativo que est a ser usado pelo endereo de IP que queremos fazer um scan. Esses sistemas operativos requerem que determinadas portas estejam abertas de maneira a que o sistema possa, por exemplo, partilhar recursos. As portas mais usadas em Windows so TCP - 135, 139, 445, 1025-1030, 3389 e em UDP - 137, 138, 445 e 1025-1030. Em sistemas Unix so TCP - 21, 22, 23, 25, 80, 111 e em UDP - 53, 67-69, 111, 161 e 514. Estas no so as nicas portas que podemos usar, existem muitas outras usadas tanto em sistemas Windows como em sistemas Unix. Por omisso, o Nmap verifica perto de 1700 portas TCP. Mas claro que o Nmap no limitado s as estas 1700 portas. possvel usar as portas que bem entendermos bastando para isso usar a seguinte opo p:
C:\>nmap p 135-139,80,3389 12.125.10.1

da 67 a 69 e da 111 a 120:
C:\>nmap pT:1025-1030,U:67-69,111-120 12.125.10.1

Reparem que usamos o T: para identificar as portas TCP e o U: para as portas UDP. Para terminar, bom salientar que com o Nmap podemos usar 3 maneiras para identificarmos os hosts pretendidos. Pode-se usar a opo de um nico host, a opo em que se define uma escala de IPs e por fim uma no to conhecida, a CIDR (Classless Inter-Domain Routing) em que basicamente se indica o endereo de IP e a subrede pretendida da seguinte maneira: 10.0.1.2/24.

Concluso
Chegmos ao fim deste artigo onde foi demonstrado que usando um scanner como o Nmap, pode-se obter muita informao de uma rede. Com pacincia e experincia possvel definirmos a cartografia da rede, os sistemas a correr em cada host e at mesmo saber quais so as regras de firewall e se existem falhas. Tambm vimos como os protocolos TCP e UDP so usados ao ser feito um scan.

possvel tambm usar uma outra opo do Nmap, a F, que indica ao Nmap para fazer um scan rpido as todas as portas especificadas no ficheiro nmap-services que contm perto de 1200 portas. Outra possibilidade bastante interessante podermos combinar no mesmo scan, um scan a portas TCP e outro a portas UDP. No caso de queremos fazer um scan s portas TCP 1025 a 1030 e nas portas UDP

Residente em Lisboa, Ciro Cardoso um grande amante do vasto mundo que a informtica em especial a segurana. Est actualmente a trabalhar na prxima etapa do percurso Cisco com a certificao CCNP. Gosta bastante da rea de redes, configurao de protocolos assim como a implementao.

Ciro Cardoso

<22>

anlises

Python Curso Completo

mesmo tempo de forma bastante completa. Infelizmente nem tudo so rosas, e o livro peca por no abordar com mais pormenor como se usar a smtplib. Um captulo que prova que este livro se destina a todos o Extender o Python, onde se explica como criar extenses usando C, e o captulo sobre ZOPE, onde se apresenta de forma completa esta framework. Como concluso pode-se dizer que este livro destinado a quem quer dar os seus primeiros passos na programao ou na linguagem Python, no sendo considerado a melhor compra para quem quer aprofundar os seus conhecimentos de Python, onde os livros das editoras internacionais de renome como a OReilly reinam. Nome: Python Curso completo Coleco Curso Completo Editora FCA Autores Pedro Morais / Jos Nuno Pires ISBN 972-722-270-6 Abril de 2002

Este livro apresenta-se como uma escolha para quem quer conhecer todos os aspectos do Python, tanto no desenvolvimento web como no desenvolvimento para Desktop. Apesar de ter sido lanado h alguns anos, o livro alcana, actualmente, a maior parte dos objectivos a que se props. Houve evolues na linguagem que no esto reflectidas neste livro, como a existncia de tipos booleanos. Os primeiros 4 captulos deste livro esto claramente direccionados para as pessoas que nunca tiveram contacto com linguagens procedimentais ou orientadas a objectos, pois faz da melhor forma possvel a abordagem ao mundo da programao para um iniciante. No captulo 5 nota-se que o livro j est algo ultrapassado, uma vez que no Python 2.1 ainda strings no eram consideradas objectos. A abordagem das bibliotecas grficas de Python est bem actualizada e tem uma referncia bastante completa da biblioteca Tkinter, no entanto peca por falar de outras bibliotecas multi-plataformas e no da wxPython, baseada no wxWidgets para C++. Em relao ao acesso a bases de dados, houve um claro desenvolvimento durante este tempo neste campo, e no h qualquer referncia a uma das melhores e mais usadas bibliotecas do momento para acesso ao MySQL, MySQLdb . O captulo que fala sobre manipulao de XML apenas peca pela passagem demasiado breve em relao SAX (Simples API for XML). Um dos captulos mais interessantes do livro o que trata da programao em redes, onde se explica o uso de sockets e threads de uma forma extremamente simples, mas ao

David Ferreira um jovem apaixonado pelo mundo da informtica. Deu os seus primeiros passos na programao aos 12 anos atravs da linguagem PHP, tendo hoje conhecimentos de XHTML, JavaScript, Python, redes, e outros. um entusiasmado pelo mundo do hardware e software open-source, que o levou a explorar os sistemas GNU/Linux, com a distribuio Kurumin e depois Ubuntu.

David Ferreira
<24>

eventos

Techdays 2008

vrios Hands on Labs foram muito concorridos, tendo havido muitas pessoas que no tiveram oportunidade de realizar os vrios laboratrios por se encontrarem cheios. Devido impossibilidade de assistir a todas as sesses, pois so realizadas vrias em simultneo, em seguida deixo uma breve descrio de algumas sesses a que assisti.

INT04 - Qual o Contexto desta Conversao? Activando Conversaes Longas em Servios de Workflow. Servios Durveis
O maior evento tecnolgico nacional esteve de volta ao Centro de Congressos de Lisboa, para mais uma edio de conhecimento, inovao e entretenimento, dedicada a profissionais de IT, programadores e acadmicos desta rea. Este evento veio na continuidade dos anos anteriores e dos vrios eventos realizados pela Microsoft nesta rea. A cerimnia de abertura contou com a presena de Carlos Zorrinho, o coordenador do Plano Tecnolgico, e teve o Alto Patrocnio do Presidente da Repblica. A edio 2008 do Techdays ficou marcada pelo enorme interesse e participao dos profissionais de IT e programadores nacionais ligados s tecnologias Microsoft. No final do perodo de registo antecipado, 70% dos lugares estavam j vendidos e a 1 semana do evento, atingiu-se um impressionante nmero de 2500 inscries (2000 profissionais e 500 estudantes). A capacidade mxima foi atingida, tendo sido dadas mais de 150 sesses tcnicas por 120 oradores, claramente a maior edio deste evento. Durante os trs dias foram demonstradas novas formas de utilizar, rentabilizar, gerir sistemas de informao e o que se pode fazer com toda a riqueza de abordagem e ferramentas de desenvolvimento aplicacional. Durante o Techdays, a Microsoft aproveitou tambm para apresentar a sua nova gama de servidores Windows Server 2008, Microsoft SQL Server 2008 e Visual Studio 2008. Entre os vrios objectivos apontados para o evento, a Microsoft identificou a criao junto dos seus programadores da nova figura do Devigner (resultante do cruzamento entre o designer e o developer) e do Admilaxado (um administrador de sistemas mais relaxado) para o qual a empresa acredita que os seus novos produtos vo contribuir decisivamente. O Techdays associou-se este ano causa do ambiente lanando o slogan For a world 2.0, possibilitando a todos os participantes a entrega de material informtico obsoleto para posterior reciclagem, bem como efectuando a plantao de rvores junto com a Quercus para contrabalanar as emisses de CO2 resultantes da energia consumida durante o evento. As sesses deste ano focaram-se particularmente na Web 2.0, na mobilidade, no meio ambiente e na forma como as novas tecnologias podem ser utilizadas ao servio desta temtica e no desenvolvimento econmico e social. Os Orador: Jos Antnio Silva, Microsoft Tendo em considerao a natureza dos workflows onde uma instncia de workflow pode estar activa durante um perodo de tempo longo (long running instance), necessrio desenvolver os servios WCF de forma a suportar este tipo de cliente. Esta sesso abordou o tema de servios durveis. Estes so um novo tipo de servio da .NET Framework 3.5 que permite simplificar a persistncia de estado numa conversao entre um servio WCF e um cliente (ex: um workflow). O modelo de persistncia do estado de um servio WCF em tudo idntico ao de WF, sendo possvel guardar o estado em BD, files system, etc . De forma a tornar um servio WCF durvel basta usar o prefixo Durable nos atributos da classe do servio.Mais informao sobre Durable Services em http://weblogs.asp.net/gsusx/archive/2007/06/14/orcasdurable-services.aspx (post antigo mas com uma boa explicao) e em http://www.microsoft.com/uk/msdn/nuggets/nugget/270/Dur able-Services-with-WCF-V35.aspx (screencast). Algumas tools interessantes para WCF referidas durante a sesso: Configuration Editor Tool aplicao que permite que permite a edio das configuraes de servios WCF com uma interface grfica. Mais informao em http://msdn2.microsoft.com/en-us/library/ms732009.aspx. WCF Test Client aplicao que permite efectuar testes offline sobre servios WCF. Mais informao em http://msdn2.microsoft.com/en-us/library/bb552364.aspx. Service Trace Viewer Tool aplicao que permite analisar logs de mensagens geradas pelo WCF. Mais informao em http://msdn2.microsoft.com/en-us/library/ms732023.aspx.

ARC01 - Software + Services: The Convergence of SaaS, SOA and Web 2.0
Orador: Beat Schwegler, Microsoft Esta sesso retratou um tema muito em voga: o Software + Services. A sesso no teve qualquer demo, tendo tido uma componente bastante terica, tendo sido iniciada com a

<25>

eventos

referncia a trs conceitos importantes: SaaS (http://msdn2.microsoft.com/enus/architecture/aa699384.aspx), SOA (http://msdn2.microsoft.com/enus/architecture/aa948857.aspx) e Web 2.0 (http://twopointouch.com/2006/08/17/10-definitions-ofweb-20-and-their-shortcomings/). Foram referidos alguns exemplos de modelos de negcio usados com S+S: Subscription/License Model, Advertisement Base Model (ex: Google) e exemplos de aplicaes S+S: Eve Online, o Amazon S3 e a British Library. Por fim, foram ainda referidos alguns exemplos concretos de implementao do S+S pela Microsoft: Finished Services Windows Live, Office Online Attached Services XBOX Live Building Blocks BizTalk Services

BizTalk Services a de permitir a comunicao segura entre as aplicaes das organizaes atravs de firewalls.

DEV06 - ADO.NET Entity Framework e LINQ To Entities


Orador: Lus Falco (ISEL) Nesta sesso foi abordada a ADO.NET Entity Framework (http://msdn2.microsoft.com/enus/library/aa697427(VS.80).aspx), uma nova framework cujo objectivo aumentar o nvel de abstraco no que diz respeito programao da camada de acesso a dados. Um dos problemas mais comuns no desenho das classes DAL o esforo associado ao mapeamento entre as classes DAL e a BD. A Entity Framework facilita esta tarefa ao disponibilizar um diagrama integrado no Visual Studio 2008. Usando o Solution Explorer possvel importar a estrutura de uma base de dados para um diagrama de classes que a transformao do modelo de dados num modelo de classes mapeado directamente com a estrutura da BD. Depois possvel definir novas relaes e heranas entre as classes (no possvel definir herana ao nvel da BD), mapear os dados de uma classe para que estes sejam divididos entre duas ou mais tabelas entre outras funcionalidades. Na nova API vem includo um novo .NET provider para Entity Framework (Entity Client) que o correspondente ao SqlClient (para SQL Server) para actuar sobre as entidades criadas com a Entity Framework. Ainda se encontra em verso beta e nesta fase s permite gerar o Entity Model a partir da BD, no permitindo ainda criar primeiro o modelo antes e gerar a BD a partir deste. Concluso Em suma, foi, sem dvida nenhuma, um ptimo evento no qual se viu que a Microsoft procura recuperar da imagem negativa e tambm dar a conhecer o quanto poderoso neste momento o .NET. Para mais informaes sobre este evento visitem o site oficial http://www.techdays.pt/

INT06: Viagem ao Centro da Nuvem O Internet Service Bus (ISB) e os BizTalk Services
Orador: Joo Pedro Martins a.k.a Jota, Create IT A sesso comeou de uma forma muito interessante com o Jota a provocar a audincia com algumas ideias sobre a forma como ser o mundo das aplicaes no futuro como a transio de um mundo com data centers nas prprias empresas para um em que o hosting feito por grandes empresas com super data centers dedicados a fazer o hosting de milhares de aplicaes. Foi uma forma interessante de cativar desde incio a audincia. Neste sentido, foram dadas algumas estatsticas interessantes como a previso do aumento de nmero de servidores de hosting da Microsoft de 200000 actuais para 800000 em 2011, indo de encontro adopo do conceito de Software como um servio (S+S) com as aplicaes a ser alojadas em hosting externo e serem expostas como servios. Os BizTalk Services, so basicamente a viso da Microsoft da forma como as aplicaes iro comunicao entre si no futuro, facilitando o desenvolvimento de aplicaes orientadas a servios (SOA). A ideia fundamental dos

Residente no Porto, Joo Brando tem 9 anos de experincia em desenvolvimento de software e em montagem e elaborao de redes de computadores. Ocupa desde Dezembro de 2005 o cargo de Senior Engineer no Software Development Center da Qimonda AG. Tem como principais actividades e responsabilidades o desenvolvimento software e gesto de projectos numa grande variedade de aplicaes na rea web e no web.

Joo Brando
<26>

eventos

Festival Nacional de Robtica 2008

Realizou-se entre os passados dias 2 a 6 de Abril a 8 edio do Festival Nacional da Robtica na Universidade de Aveiro (provas snior) e no Pavilho Gimnodesportivo da Escola Bsica Joo Afonso (provas jnior). O Festival Nacional da Robtica teve nicio em 2001 e tem como objectivo a promoo da Cincia e da Tecnologia junto dos jovens e do pblico em geral, atravs de competies de robs. O Festival ocorre todos os anos em cidades distintas, incluindo ainda um Encontro Cientfico onde investigadores nacionais e estrangeiros da rea da Robtica se renem para apresentar os mais recentes resultados da sua actividade. Este evento tem tido desde o seu incio um enorme crescimento, quer em nmero de equipas e participantes, quer em termos de pblico. Em relao edio deste ano houve uma novidade em relao aos anos anteriores: a introduo das provas MicroRato e Ciber-Rato no calendrio das provas, uma vez que este estas so provas realizadas todos os anos pela Universidade de Aveiro, sendo por isso este ano includas. As provas Jnior so as que atraem mais participantes, tendo atrado 13 equipas para o Futebol Robtico 2x2, 103 para a Busca e Salvamento e 25 para a Dana, num total de 141 equipas. J do lado das equipas Snior houve 12 equipas inscritas para a prova de Conduo Autnoma, 4 para o Futebol Robtico (INFAIMON Cup), 12 equipas para o MicroRato e 7 para o Ciber-Rato, totalizando 35 equipas.

A prova de Futebol Robtico Snior sempre a que atrai mais pblico, e este ano no fugiu regra. O Pavilho Aristides Hall (da Universidade de Aveiro), encheu para ver a final e alguns jogos. O facto de serem robs grandes e jogar (e no os pequenos do Futebol Robtico 2x2) chama muito o pblico. Para alm das provas acima mencionadas, estiveram tambm no Pavilho Aristides Hall exposies do ISEP (Instituto Superior de Engenharia do Porto) com algumas demonstraes, destacando-se a apresentao do projecto FALCOS (Flight Autonomous Light Cooperative Observation System) com os seus dois mini-avies autnomos, o ROAZ e o ROAZ II (qualquer coisa como dois barcos autnomos) e o seu mini-submarino, operado tambm remotamente. J do outro lado da Avenida da Universidade, no Pavilho Gimnodesportivo da Escola Bsica Joo Afonso, o Futebol Robtico 2x2 foi o que chamou mais ateno do pblico, vibrando o pblico com cada golo marcado por cada um dos pequenos robs. Pela negativa h a destacar o facto das candidaturas ao programa Cincia Viva estarem encerradas e por isso, este ano, foi imposto um limite s equipas Jnior: apenas seriam permitidas 3 equipas por escola (para cada competies). Isto teve mais impacto nas equipas de Busca e Salvamento mas, de um modo geral, podemos dizer que a edio deste ano do Festival Nacional da Robtica foi um sucesso. Haver mais para o ano, s no se sabe ainda a cidade.

Sendo participante na Revista PROGRAMAR desde a 4 Edio, Joel Ramos , actualmente, o coordenador-adjunto desta. Os seus primeiros passos na programao foram aos 13 anos com o PHP sendo ainda a sua linguagem predilecta. tambm um aficcionado pela rea da robtica, sobretudo desde que em 2007 participou no Festival Nacional da Robtica tendo repetido a participao em 2008.

Joel Ramos
<27>

internet

</Xssed>
O Xssed um portal onde podem ser encontradas informaes relacionadas com falhas de crosssite scripting. Em particular, mostra como descobrir este tipo de falhas, como as corrigir, e como programar de forma a que estas no aconteam. Tem tambm o maior arquivo da Internet ao nvel deste tipo de vulnerabilidades, onde mostra quais os sites vulnerveis, por quem foram descobertas ( reportadas ) essas vulnerabilidades, e se j foram corrigidas, para alm de detalhes sobre o erro em si.

www.xssed.com

ExtJS
A Ext JS uma biblioteca de JavaScript cross-browser, ou seja, funciona correctamente nos browsers mais usados. Tem como objectivo auxiliar programadores de software web-based na criao das suas aplicaes, para que possam proporcionar aos utilizadores uma navegao interactiva, simples, e descomplicada.

www.extjs.com

Google Doctype
O Google Doctype pretende ser uma enciclopdia assente numa wiki escrita por web developers para web developers. Abrange temas como a segurana (actualmente com especial nfase a falhas de XSS), manipulao do DOM em JavaScript, dicas sobre CSS, entre outros. E o melhor disto tudo que todos podemos contribuir.

http://code.google.com/doctype/

<28>

Queres participar na Revista PROGRAMAR? Queres integrar este projecto, escrever artigos e ajudar a tornar esta revista num marco da programao nacional? Vai a

www.revista-programar.info
para mais informaes em como participar, ou ento contacta-nos por

@portugal-a-programar.org
Precisamos do apoio de todos para tornar este projecto ainda maior... contamos com a tua ajuda!

revistaprogramar

Equipa PROGRAMAR
Um projecto Portugal-a-Programar.org

Você também pode gostar