Revista Programar 6

  • Uploaded by: Marcelo
  • 0
  • 0
  • December 2019
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Revista Programar 6 as PDF for free.

More details

  • Words: 27,725
  • Pages: 44
e ditorial

índice

3 notícias 4 te m a de capa 11 a program ar 24 s e gurança 28 te cnol ogias 31 tutorial 37 gnu/l inux 40 anál is e s 41 inte rne t 42 bl ue s cre e n 43 com unidade

e q u ipa PR O G R A M A R

adm inis tração

coorde nador S érg io S antos

coorde nador adjunto M ig ue lPais

re dacção

M igue lW ah non Fábio Corre ia D iogo Al ve s João M atos Fábio Pe dros a Pe dro Ve rrum e Luís Re nte Tiago Sal gado Joe lRam os

col aboradore s Rui G onçal ve s D anie lCorre ia Jos é O l ive ria

contacto

re vis taprog ram ar @ portug al -a-prog ram ar.org

w e bs ite

w w w .re vis ta-prog ram ar.info

Um ano, s e is e diçõe s Es ta s e xta e dição m arca o finaldo prim e iro ano da Re vis ta PRO G RAM AR. Para nós trata-s e de um fe ito, para al ém de te rm os cons e guido e ditar s e is e diçõe s , o facto de o proje cto te r cre s cido de e dição para e dição, com m ais e m e l h ore s artigos , m ais participante s e , principal m e nte , m ais l e itore s . M uitas ve ze s , ne s te tipo de proje cto, o m ais difícilnão é re unir um conjunto de artigos e form ar um a re vis ta, é cons e guir m ante r o proje cto activo e , s e pos s íve l , e m e vol ução, na dire cção dos l e itore s . Ne s ta e dição contam os com um te m a de capa m ais e xte ns o q ue o norm al , vantage ns de s e r um a re vis ta onl ine , s e m re s pons abil idade s para com e ditoras . Es pe ram os q ue o te m a s e ja do vos s o agrado e , cas o s e ja de s conh e cido, o q ue de ve rá aconte ce r ainda para m uitos , q ue abram a m e nte e e xpe rim e nte m um a nova m ane ira de ve r a program ação, ne m q ue s e ja pe l os frutos q ue de l a pode rão e xtrair futuram e nte . Te m os tam bém um a nova s e cção, "Se gurança", q ue s urge na continuação do trabal h o e fe ctuado na te rce ira e dição da re vis ta. Ne s te m om e nto cons e guim os atingir um a varie dade cons ide ráve l e m uito apre ciada de ntro do nos s o grupo de re dactore s e continuam os à procura de novos te m as para abordar, novas s e cçõe s para acre s ce ntar e novas ide ias para apl icar, e todos os novos m e m bros q ue s e juntam a nós traze m s e m pre novas opiniõe s ao grupo.

<2 >

Sérgio Santos

Rui M aia D avid Pintas s il go

notícias

O s principiais aconte cim e ntos te cnol ógicos de 2006 2006 ch e gou ao fim e a re vis ta Program ar re corda as novidade s m ais im portante s do ano q ue agora te rm inou. O ano com e çou com um a re vol ução na Appl e . D e pois de um a década a us ar Pow e rPC, a e m pre s a de Ste ve Jobs re s ol ve u m udar para a arq uite ctura da Inte l . Ape s ar do de s e m pe nh o dos novos m acs te r mel h orado s ignificativam e nte , e s te prim e iro ano fica m arcado por al guns probl e m as de s obre aq ue cim e nto do proce s s ador. Em Abrila Appl e apre s e ntou tam bém o Boot Cam p, um s oftw are q ue pe rm itiu aos novos com putadore s corre re m nativam e nte W indow s . Na áre a dos proce s s adore s foi tam bém um ano agitado, inicial m e nte com a AM D a cons e guir am e açar o dom ínio da Inte l , s obre tudo nos s e rvidore s com os O pte ron. A Inte l re s ponde u com o l ançam e nto dos Core 2 D uo, q ue l h e pe rm itiu re gre s s ar à l ide rança no pode r de proce s s am e nto. Tive m os tam bém a pas s age m da te cnol ogia de 9 0 nm para 65, prim e iro por parte da Inte l , e no fim do ano pe l a AM D . No q ue diz re s pe ito aos brow s e rs , s urgiram igual m e nte novidade s , prim e iro com o l ançam e nto do IE 7 da M icros oft, de pois com a Fundação M ozil l a a l ançar o Fire fox 2.0. Es tas novas ve rs õe s trouxe ram várias novidade s , das q uais s e de s taca o fil tro antiph is h ing, de notando a cada ve z m aior pre ocupação com a s e gurança por parte dos produtore s de s oftw are .

D e pois de m uitas prom e s s as , a Sun final m e nte abriu o código do Java. As pl ataform as J2SE e J2M E e ncontram -s e agora s ob a l ice nça G PL, ace s s íve is a todos . D e pois de s uce s s ivos adiam e ntos , o Vis ta foi final m e nte l ançado. Com um vis ualm uito atractivo, o novo SO da M icros oft trouxe tam bém novidade s a níve l da s ua organização, do s is te m a de fich e iros e da s e gurança. O utra novidade foi a capacidade de s e adaptar ao h ardw are da m áq uina e m q ue é ins tal ado, pe rm itindo de s ta form a q ue tam bém pos s a s e r us ado e m PC's com m e nore s re curs os de h ardw are .

Em 2006 as s is tim os ao l ançam e nto de duas novas cons ol as , a W ii e a PS3. Talcom o s e ria de e s pe rar, a ve ndas da PS3 s ó não foram m aiore s por fal ta de cons ol as nas l ojas . Com um proce s s ador re vol ucionário e com e xce l e nte s gráficos , o único probl ema foi m e s m o o e l e vado pre ço. Já a W ii apos tou num a m aior jogabil idade , com o s e u com ando inovador, o W ii-m ote . Tal facto, juntam e nte com o pre ço ace s s íve l da cons ol a contribuiu para o s e u e norm e s uce s s o. 2006 foi igual m e nte o ano da afirm ação da w e b, com o e norm e s uce s s o de s ite s com o o YouTube , o M y Space , a W ik ipe dia, e tc. e a prol ife ração dos bl ogs . A confirm ar is to ve io a e s col h a da re vis ta Tim e para a pe rs onal idade do ano: todos aq ue l e s q ue contribuiram para e s ta nova s ocie dade do conh e cim e nto.

<3 >

te m a de capa Com o e m q ual q ue r l inguage m de program ação, e m Sch e m e e xis te m vários tipos de dados . Es te s vão de s de e xpre s s õe s atóm icas , a núm e ros s ím bol os e val ore s bool e anos , a l is tas e a ve ctore s . Exe m pl os : (define (define (define (define

a b c d

5) #t) ‘(1 2 3)) (+ 1 2 3 a))

Ligado ao prim itivis m o da l inguage m , e xis te o conce ito do cál cul o das funçõe s l am bda. Q ue não s ão m ais do q ue um proce dim e nto anónim o. Es te conce ito é m uito im portante para as s ociar nom e s a proce dim e ntos . Um e xe m pl o:

Sch e m e Sch e m e é um a l inguage m de program ação q ue s uporta o us o de m úl tipl os paradigm as , e m particul ar, a program ação im pe rativa e funcional . Foi de s e nvol vida, original m e nte , por G uy L. Ste e l e e por G e ral d Jay Sus s m an por vol ta dos anos 70. É um a l inguage m q ue de riva do Lis p e , portanto, o s e u dial e cto e a form a s intáctica s ão idênticas . A util ização da program ação funcional , e m ve z da program ação im pe rativa (de s truição de variáve is ), torna a s ua apre ndizage m m ais cl ara, um a ve z q ue nada é m odificado. Re ce be m -s e obje ctos e re tornam -s e obje ctos . Por s e r um a l inguage m bas tante intuitiva e de s im pl e s com pre e ns ão, é pos s íve l apre nde r-s e a program ar e m Sch e m e com o prim e ira l inguage m de program ação. É um a l inguage m m uito m inim al is ta q uanto às s uas funçõe s de bas e . No e ntanto, graças à criação de bibl iote cas e de pe nde ndo do q ue s e q ue r faze r ou e xpl orar na l inguage m , é pos s íve lcriare m s e program as , apl icaçõe s w e b, jogos , ou outro tipo de s oftw are com o e m q ual q ue r outra l inguage m de al to níve l nom e adam e nte C, C+ + ou Java.

<4 >

(lambda (x) (* 2 x))

Es ta e xpre s s ão l am bda, s e e xe cutada, de vol ve ria um proce dim e nto m as q ue não fazia nada pois não l h e é pas s ado um argum e nto de inputà variáve l‘x’. No e ntanto, s e fizés s e m os : > ( (lambda (x) (* 2 x)) 5) 10

O bte ríam os o val or 10 q ue é o val or obtido ao pas s ar o argum e nto de input 5 ao ‘x’ e de o proce dim e nto anónim o l am bda o ope rar cons oante o s e u corpo, onde , ne s te cas o é m ul tipl icar o ‘x’ por 2. No e ntanto, s e ria m ais inte re s s ante pode r ch am ar um nom e a e s te proce dim e nto para não e s tarm os cons tante m e nte a invocar e s te l am bda anónim o de cada ve z q ue q ue re m os dupl icar um re al ‘x’. Para is s o faze m os : (define duplica (lambda (x) (* 2 x)))

E para o e xe cutarm os faze m os : > (duplica 5) 10

te m a de capa Um a ve z q ue o nom e da função “dupl ica” e s tá as s ociado a um proce dim e nto l am bda q ue por s ua ve z e s tá à e s pe ra de um val or ‘x’ para o ope rar no s e u corpo. Se be m re pararam , o dial e cto do Sch e m e pode pare ce r um tanto e s tranh o um a ve z q ue e s tam os h abituados a e s cre ve r, e m m ate m ática, os ope radore s no m e io dos ope randos : (5 + 3). E portanto, um outro ponto forte do Sch e m e , q ue já ve m do Lis p, é o facto de m inim izar a am biguidade da criação de funçõe s e da s ua aval iação. Por e xe m pl o, e m m ate m ática te m os e num e ras m ane iras de re pre s e ntar um a função, s e ja e l a um a função factorialn!, pol inom ialx2+ 3x, ou m e s m o um a função ge nérica f(x,y,z). Contudo, ainda h á m ais confus ão porq ue e xis te m prioridade s de ce rtas ope raçõe s , com o a prioridade da m ul tipl icação pe rante a s om a. O Sch e m e torna a cois a bas tante m ais s im pl e s e portanto te m a s ua s intaxe da s e guinte form a (função argum e ntos *). No início da e xpre s s ão a s e r aval iada ve m o nom e da função (ope rador) e s e guido de s s e nom e ve m um conjunto de argum e ntos a s e re m ope rados (ope randos ).

as s ociar às ope raçõe s prim itivas de s om ar e m ul tipl icar re s pe ctivam e nte . Para s e pe rce be r, pas s e m os aos 2 argum e ntos do l am bda, dois argum e ntos de input: > ((lambda (+ *) (+ 5 (* 2 3) 4))* +) 100

Um a ve z q ue trocám os os nom e s das ope raçõe s q ue vão s e r ch am ados no corpo do l am bda, as ope raçõe s de s om ar pas s am a s e r m ul tipl icaçõe s e as ope raçõe s de m ul tipl icar pas s am a s e r s om as . Com o vêe m , o pode r de as s ociação de nom e s e de pas s age m de argum e ntos no Sch e m e é m uito inte re s s ante e ve rs átil . Um a ve z m ais , com o e m q ual q ue r l inguage m q ue s e pre ze , e m Sch e m e e xis te m e xpre s s õe s condicionais . A util ização de val ore s e e xpre s s õe s l ógicas para condicionarm os al goritm os , util izando os e l e m e ntos l ógicos > , <, =, > =, <=, not, and e or.

Exe m pl os : (* 2 x) (+ 5 3) (* 2 (+ 5 3) 9)

São cas o dis s o o “if” e o “cond”. A s intaxe do “if” é:

E util izando a as s ociação de e xpre s s õe s a nom e s , pode ríam os as s ociar q ual q ue r um a e xpre s s ão das acim a m e ncionadas a um nom e q ue s e tornava, por as s im dize r, um a variáve l .

(if (condição) (expressão1 se condição é #t) (expressão2 se condição é #f))

D e m ons trando, um pouco m e l h or, o pode r da program ação funcional , fica o e xe m pl o:

Exe m pl o: (define a 5) (define b (+ a 1))

(lambda (+ *) (+ 5 (* 2 3) 4)) > (if(> a b) a b) 6

Es te proce dim e nto anónim o fica à e s pe ra da pas s age m de dois argum e ntos cujos nom e s s ão ‘+ ’ e ‘*’ e h á a te ntação de os

<5 >

te m a de capa M uito s im pl e s . No e ntanto, e s e q uis és s e m os com pl icar a cois a, pode ríam os pôr com o e xpre s s ão de # t ou de # f, um outro if e ncade ado e portanto te ríam os , por e xe m pl o:

A aval iação e inte rpre tação de e xpre s s õe s e m Sch e m e pode pare ce r confus a por não e s tarm os h abituados à notação no e ntanto ficam aq ui al guns e xe m pl os q ue pe ns o s e re m bas tante e l ucidativos :

> (if(> a b) a (if(= b (+ a 1)) a b)) 5

> (+ 2 3) 5 > (- 7 (+ 2 3) 2) 0

Já s e q uis és s e m os e ncade ar novo if nas s ub-e xpre s s õe s do s e gundo if, o código com e çava a tornar-s e um pouco confus o de pe rce be r. Para is s o, util izam os o acim a m e ncionado “cond” q ue é, portanto, “açúcar s intáctico” para um conjunto de ifs e ncade ados com o no e xe m pl o e m cim a. O cond re ce be um conjunto de pare s condição / e xpre s s ão-if-# t e aval ia-l as por orde m . Se a prim e ira de r # t, o s e u corpo é e xe cutado, cas o contrário pas s a para a s e guinte e por aí e m diante , até ch e gar a um e l s e / e xpre s s ão, cas o ne nh um a das e xpre s s õe s ante riore s s e ja ve rdade ira. Conve rs ão da e xpre s s ão do e xe m pl o ante rior dos ifs e ncade dos para o cond: > (cond((> a b)a) ((= b (+ a 1))a) (else b)) 5

Com o vêe m é m uito s im pl e s e dá m uito je ito q uando q ue re m os e ncade ar várias s uce s s õe s de condiçõe s .

>(* (+ (- 7 1) 3) 4) 36 > (> 3 4) #f > (= 5 6) #f > (>= 4 3) #t > (and (> 4 3) (not (< 4 3))) #t

Contudo, para apre nde rm os o q ue é program ar, te re m os de te r noção de “o q ue é um al goritm o? ”. Um al goritm o é um conjunto de ope raçõe s finitas , e xe cutadas de form a m e cânica num e s paço de te m po finito de m odo a re al izare m um a de te rm inada tare fa ou probl e m a. Por e xe m pl o, s e q uis és s e m os criar um al goritm o para cal cul ar o factorialde um núm e ro e m m ate m ática tính am os e m m e nte q ue : 0! = 1 n! = n(n-1)! Pas s ando is to para Sch e m e , um a form a s im pl e s de o faze r s e ria: (define (factorial n) (if (= n 0) 1 (* n (factorial ( - n 1)))))

<6 >

te m a de capa Ao criarm os e s te al goritm o q ue ge ra um proce s s o ite rativo, e s te te m com o caracte rís tica não de ixar ope raçõe s pe nde nte s e l ogo, de cons um ir m e m ória cons tante , onde por s ua ve z, actual iza um a variáve lde e s tado q ue ditará o re s ul tado final . O u s e ja, a cada ite ração, o val or do acum ul ador é actual izado com o produto do ‘n’ actualda ite ração e m q ue s e vai pe l o val or pas s ado ao acum ul ador na ite ração ante rior. Se re parare m , a prim e ira ite ração é ch am ada com o ‘n’ s upe rior (da função factorialoriginal ) e com o acum ul ador e m 1. Is to porq ue o 1 é o e l e m e nto ne utro da m ul tipl icação e as s im , não “de s trói” o val or n.

Is to s e ria um a form a re curs iva de criar um al goritm o q ue cal cul a o factorialde um inte iro natural . Exe m pl o de us ada:

inte racção com

a função

> (factorial 4) (* 4 (factorial 3)) (* 4 (* 3 (factorial 2))) (* 4 (* 3 (* 2 (factorial 1)))) (* 4 (* 3 (* 2 (* 1 (factorial 0))))) => 1 (* 4 (* 3 (* 2 (* 1 1)))) (* 4 (* 3 (* 2 1))) (* 4 (* 3 2)) (* 4 6) 24

Se re parare m , e xis te um a fas e de e xpans ão e de pois um a fas e de contracção. Is to de ve s e ao facto de e s te al goritm o do factorial ge rar um proce s s o re curs ivo e s e r criado à cus ta de um proce dim e nto re curs ivo. Em bora pare çam a m e s m a cois a, não o s ão. Um proce s s o re curs ivo te m com o caracte rís tica de ixar ope raçõe s pe nde nte s no de corre r do program a e com o re fl e xo dis s o, cons um ir m e m ória ao l ongo do te m po. Um proce dim e nto re curs ivo é o acto de um a função s e invocar de ntro de s i própria “(factorial(- n 1))”. Para re s ol ve rm os o probl e m a de de ixarm os ope raçõe s pe nde nte s , pode ríam os m e l h orar e s te al goritm o ge rando um proce s s o ite rativo.

Pode ríam os , ainda, criar um al goritm o pare cido com o factorialde um inte iro, m as q ue e m ve z de m ul tipl icar os ‘n’ te rm os até 0, os s om a. Te m os e ntão: (define (soma-ate-zero n) (define (soma-aux n acumulador) (if(= n 0) acumulador (soma-aux (- n 1) (+ n acumulador)))) (soma-aux n 0))

E ao invocarm os : > (soma-ate-zero 5) 15

Um a ve z, m ais , o acum ul ador é actual izado de ite ração e m ite ração com a s om a do acum ul ador pas s ado da ite ração ante rior com o n da actualite ração. D e s ta ve z, o val or do acum ul ador pas s ado à função inte rna na prim e ira ite ração é o 0 (ze ro), vis to s e r o e l e m e nto ne utro da adição.

(define (factorial n) (define (fact-aux n acumulador) (if(= n 0) acumulador (fact-aux (- n 1) (* acumulador n)))) (fact-aux n 1))

À prim e ira vis ta, is to pode ge rar confus ão m as ve jam os por parte s . Prim e iro, foi introduzido o conce ito de função inte rna. A função “fact-aux” s ó é vis íve là função q ue a pre ce de h ie rarq uicam e nte , a função “factorial ”, ou s e ja, ao níve lgl obal do am bie nte , e l a não e xis te .

<7 >

Entrando noutra áre a, pode ríam os abs trairnos do conce ito de factoriale de s om a-ate ze ro e faze rm os um proce dim e nto q ue re ce be um a ope ração q ue ope ra inte iros e q ue cal cul a e s ta ope ração até ao inte iro 0. (define(opera-ate-zero op elem-neutro n) (define (opera-aux n acumulador) (if(= n 0) acumulador (opera-aux (- n 1) (op n acumulador)))) (opera n elem-neutro))

te m a de capa As s im , pode ríam os de finir o nos s o factorial da s e guinte m ane ira: (define (factorial n) (opera-ate-zero * 1 n))

O u s e ja, factorialn te m o e l e m e nto ne utro 1 e a ope ração q ue é re al izada até ch e gar ao val or 0 é o produto ‘*’. A is to ch am am os abs tracção de dados e proce dim e ntos de orde m s upe rior. Para de finirm os o s om a-ate -ze ro e m função do ope ra-ate -ze ro ge ne ral izado, faríam os :

E is to é o princípio da criação de l is tas . No e ntanto, e xis te m duas funçõe s bás icas q uando s e trabal h a com o tipo de dados par. O “car” e o “cdr”. O car e o cdr re ce be m um par com o argum e nto e re tornam o prim e iro el e m e nto e o s e gundo e l e m e nto do par, re s pe ctivam e nte . O u s e ja, s e fize rm os :

(define (soma-ate-zero n) (opera-ate-zero + 0 n))

Para a s ubtracção: (define (subtrai-ate-zero n) (opera-ate-zero – 0 n))

> (car (cons 1 2)) 1 > (cdr (cons 1 2)) 2 > (car (cdr (cons 1 (cons 2 3)))) 2

E para a divis ão: (define (divide-ate-zero n) (opera-ate-zero / 1 n))

Pe ns o q ue fica aq ui um a s im pl e s e xpl icação e o conce ito de ope raçõe s e ntre proce dim e ntos de orde m s upe rior e a criação de funçõe s para nos abs trairm os o m áxim o pos s íve lda função ge ral . A criação e util ização de s te s m étodos de abs tracção torna o código m ais ge rale re util izáve lre fl e ctindo-s e num código com m e nos bugs e na não ne ce s s idade de cons tante m anute nção.

O Sch e m e s uporta, ainda, um e ncade am e nto de s tas form as s intácticas car e cdr, pode ndo faze r o s e guinte : > (cadr (cons 1 (cons 2 3))) 2

O Sch e m e ace ita e s ta com binação de “c ‘a’s e ‘d’s r” até 5 ve ze s .

O utro tipo de dados q ue ve m no Sch e m e e q ue é m uito im portante e útil : o par. É o par q ue vai originar as l is tas . Em Sch e m e , um par cria-s e da s e guinte m ane ira: > (cons elem1 elem2) (elem1 . elem2)

Em q ue re ce be dois argum e ntos e s ão as s ociados com o um par. Se pe ns arm os um bocadinh o, e m ve z de pas s arm os com o s e gundo argum e nto, um núm e ro, porq uê não pas s arm os outro par para e ncade ar? Aí te ríam os , por e xe m pl o:

> (cons 1 (cons 2 3)) elem (1 . (2 . 3))

Pos to is to pode m os de finir o tipo de dados l is tas . Um a l is ta não é m ais do q ue um conjunto de pare s e ncade ados q ue te rm ina com o par (cons e l e m _n ()), e m q ue “()” re pre s e nta a l is ta vazia. D e finam os , e ntão, o tipo de dados l is ta: O s cons trutore s : (define nova-lista ()) ;a lista vazia () (define (insere elemento LISTA) (cons elemento LISTA))

<8 >

te m a de capa

(define insere cons)

Pode m os fris ar dois as pe ctos im portante s na m inim ização de s ta função. D a m e s m a m ane ira q ue nas funçõe s ante riore s , a função “l is ta-vazia? ” re ce be um a l is ta com o argum e nto e de pois vai aval iar s e e l a é vazia ou não através do ope rador “nul l ? ” q ue ve m no Sch e m e . No e ntanto, o nul l ?já re ce be com o argum e ntos , um a l is ta, pe l o q ue pode ríam os ape nas e s cre ve r:

O s se l e ctore s :

(define lista-vazia null?)

(define (primeiro-lista lista) (car lista))

O utro as pe cto na função prim e iram e nte e s crita é o de q ue o ifm ais os s e us e l e m e ntos de re torno “# t” e “# f”, não pre cis avam de l á e s tar, um a ve z q ue o nul l ?já re torna um val or bool e ano de s te tipo. Criado o nos s o tipo de dados , de fine -s e a ch am ada “barre ira de abs tracção de dados ”. O u s e ja, a partir do m om e nto q ue te m os fe ita a axiom atização do nos s o tipo de dados , util izam os ape nas as funçõe s criadas para originar novos el e m e ntos (cons trutore s ), ace de r-l hes (s e l e ctore s ), re conh e ce -l os (re conh e ce dore s ) e aval iadore s (te s te s ).

Se re parare m , a função “ins e re ” re ce be com argum e ntos um e l e m e nto a ins e rir e a l is ta onde s e vai ins e rir. D e pois , no s e u corpo, é fe ito o par (e l e m e nto. (LISTA)). No e ntanto, o cons já re ce be dois argum e ntos para faze r o par, por is s o pode ríam os faze r e s ta função s im pl e s m e nte as s im :

(define (resto-lista lista) (cdr lista))

Se re parare m , as funçõe s prim e iro-l is ta e re s to-l is ta, re ce be m , am bas , l is tas para de pois de vol ve re m a re s pe ctiva parte , o prim e iro e l e m e nto e o re s to re s pe ctivam e nte . No e ntanto, o car e o cdr já re ce be m um a “l is ta” (um par), por is s o pode m os e s cre vê-l as s im pl e s m e nte as s im : (define primeiro-lista car) (define resto-lista cdr)

Após a criação de s ta barre ira de abs tracção, um a função útilde criar s e ria a q ue nos dá o tam anh o de um a l is ta:

Um re conh e ce dor:

(define (tamanho-lista LISTA) (if(lista-vazia? LISTA) 0 (+ 1 (tamanho-lista (resto-lista LISTA)))))

(define (lista? X) (if(null? X) #t (if (pair? X) (lista? (resto-lista X)) #f)))

Se o unive rs al ‘X ’ pas s ado, for um a l is ta vazia, s e rá, e ntão um a l is ta, de vol ve ndo # t. Se não for vazia m as for um par, é m e io cam inh o andado para s e r um a l is ta, ou s e ja, s e s im e l e vai ve r s e é l is ta o re s to do unive rs al‘X ’ q ue re ce be u. Se todo o unive rs al ‘X ’ pas s ar nos te s te s , de vol ve # t, de vido ao pair?já de vol ve r um # t ou # f, cas o contrário de vol ve # f. Um te s te : (define (lista-vazia? LISTA) (if (null? LISTA) #t #f))

Um a outra m ane ira de criar um a l is ta e m Sch e m e é us ar a função prim itiva q uote q ue é o m e s m o q ue us ar o carácte r “ ‘ “ (pl ica). > '(1 2 3) (1 2 3) > '((1 2) (2 3) (4 5)) ((1 2) (2 3) (4 5))

Por e xe m pl o, pondo e m prática as funçõe s já criadas para o tipo de dados l is tas , ficam aq ui as s e guinte s inte racçõe s : (define lista-vazia nova-lista) (define lista2 (insere 3 lista-vazia))

<9 >

te m a de capa O tipo de dados l is ta, é m uito fácilde us ar e o Sch e m e nativo já incl ui, por de fe ito, todas as funçõe s aq ui de finidas e m uitas m ais . Em C, a criação de um a l is ta é m uito m ais com pl e xa, um a ve z q ue e xige a criação de um a e s trutura com um e l e m e nto e um ponte iro para a próxim a e s trutura. Em Sch e m e , is s o já ve m fe ito para nós . O utro tipo de dados pare cido com as l is tas é o ve ctor. É m ais re corre nte us ar ve ctore s em program ação im pe rativa, ch am ando as pos içõe s com índice s .

(define lista-final (insere 5 lista2))

Se m andás s e m os corre r o s e guinte com ando: > lista-final (5 3)

Es ta e ra a l is ta re tornada. E pode ríam os , e ntão, corre r a função q ue nos dá o tam anh o de l a: > (tamanho-lista lista-final) 2

O u m e s m o o ve rificador de l is tas : > (lista? lista-final) #t

Já de finim os um a função q ue ins e re um el e m e nto à cabe ça da l is ta. D á je ito m as é bas tante fraca. Se q uis e rm os ins e rir um el e m e nto num a dada pos ição faríam os a s e guinte função: (define (insere-pos elem pos LISTA) (if(= pos 1) (insere elem LISTA) (insere-pos elem (- pos 1) (resto-lista LISTA)))

As s im , s e q uis és s e m os pôr o e l e m e nto 4 na “l is ta-final ”, criada e m cim a, na úl tim a pos ição, faríam os : > (insere-pos 4 3 lista-final) (2 3 4)

Aconte ce q ue pode ríam os criar condiçõe s de e rro para o util izador, por e xe m pl o para o cas o da pos ição dada s e r m aior q ue o tam anh o da própria l is ta, m as s ão as pe ctos pouco re l e vante s para o cas o.

<10>

Virando o as s unto para o paradigm a do Sch e m e , a program ação im pe rativa. A program ação im pe rativa, bas e ia-s e na de s truição de variáve is , ou do s e u conte údo. Noutras l inguage ns com o o C, é m uito us ual re corre r-s e a e s te tipo de program ação, já o Sch e m e te m o s e u ponto forte na program ação funcional , com o foi re fe rido no início. No e ntanto, o Sch e m e tam bém s uporta e s te e s til o de program ação e para is s o us a um a re pre s e ntação inte rna para al ocar um val or e de pois as s ocia-o a um nom e q ue por s ua ve z o as s ocia a um a box. Um a box não é m ais do q ue um a e s trutura com um nom e e com um val or l á de ntro. Se invocarm os o nom e da box, o Sch e m e inte rpre ta o nom e e faz o ch am ado unbox de vol ve ndo o val or inte rno da box as s ociado ao nom e . Pos to is to, é pos s íve l pe rce be r o q ue faz o ope rador s e t!. Es ta função re ce be um nom e q ue te m obrigatoriam e nte de já te r s ido de finido com a função de fine e um novo val or ou e xpre s s ão q ue re torne al go vál ido para o tipo de dados as s ociado ao nom e , e faz e ntão a acção de unbox do nom e , ins e re o novo val or (de pois de aval iar a e xpre s s ão s e guida do nom e ) e vol ta a faze r box. É óbvio q ue is to é o q ue s e s uce de inte rnam e nte e é o q ue diz a te oria do Sch e m e . Na ve rdade , tudo o q ue foi fe ito até agora re s pe ita as re gras te óricas do conce ito Sch e m e e nq uanto l inguage m de program ação, porq ue no fundo, cada inte rpre tador da l inguage m e s e u com pil ador pode m ge rir todos e s te s proce s s os , inte rnam e nte , de m ane ira dife re nte . H á q ue pe rce be r a dife re nça e ntre o conce ito de l inguage m e s ua s intaxe , e o q ue na ve rdade o s e u inte rpre tador faz.

te m a de capa

(define a 4) (define b 2) > a 4 > b 2 > (+ a b) 6

(set! a 2) (set! b 0) > a 2 > b 0 > (+ a b) 2

Vol te m os à função factorialq ue pe ns o q ue el ucida be m a dife re nça e ntre program ação funcionale a program ação im pe rativa: (define(factorial-imp n) (define valor-final 1) ; inicialização com 1 ; -> elemento neutro da multiplicação (define(aux n) (if(= n 0) valor-final (begin (set! valor-final (* n valor-final)) (aux (- n 1))))) (aux n))

É um a opção pos s íve lm as um pouco m ais trabal h os a e q ue e nvol ve de s truição de val ore s . Pas s age m de argum e ntos e ntre funçõe s s e m as al te rar é m uito m ais s e guro e obte m os a m e sm a e ficiência (nota: com parar com a ve rs ão funcionalacim a). Foi ins e rido o e l e m e nto be gin. Em Sch e m e , s ó pode m os re al izar um a ope ração por corpo. O pe ração e s s a q ue de vol va al go. No e ntanto, e xis te um a função q ue re ce be várias funçõe s e q ue aval ia todas e s ó de vol ve o val or re tornado pe l a aval iação da úl tim a. O u s e ja, no cas o da função “factorial im p”, de ntro da função auxil iar “aux”, e nq uanto o “n” não ch e gar a 0 (ze ro), e l e re al iza o e l s e do if, q ue corre s ponde a e xe cutar o be gin. Ne s s e be gin s ão aval iadas as e xpre s s õe s (s e t! val or-final(* n val or-final )) e (aux (- n 1))))), e s ó o val or da úl tim a é re tornada. O acto de faze r s e t! não re torna nada. M into, re torna void, q ue é inte rpre tado

<11>

com o nada. O u s e ja, é aval iado o s e t!, o val or de “val or-final ” é de s truído e re novado com outro e o factorialé invocado de novo re curs ivam e nte . Sim pl e s m e nte , e m ve z de pas s arm os variáve is de e s tado actual izadas , criam os um acum ul ador q ue é actual izado us ando o s e t! inte rnam e nte . Pe ns o q ue a m aior parte dos conte údos acim a e xpl icados e ngl obam e re fl e cte m o pode r do Sch e m e e a facil idade com q ue s e pode apre nde r a program ar us ando e s ta l inguage m . Foram ape nas e xpos tos e xe m pl os s im pl e s m as q ue m e s m o as s im m os tram o q ue é pos s íve lfaze r e m Sch e m e . Para s abe r m ais s obre e s ta l inguage m acons e l h o um l ivro: Program ação e m Sch e m e – Introdução à program ação util izando m úl tipl os paradigm as –IST Pre s s . O u outras fonte s com o o do com pil ador e am bie nte de inte rpre tação Sch e m e h ttp://w w w .pl t-s ch e m e .org. Es te inte rpre tador de Sch e m e é bas tante pode ros o e m te rm os de opçõe s e te m um m odo de de bug m uito inte re s s ante , onde pode m os ace de r aos val ore s de todos os val ore s as s ociados aos nom e s pre s e nte s no código, s im pl e s m e nte pas s ando o rato por cim a de l e s . Te m de bug por s te ps , us a bre ak points e ainda te m dis poníve l , para al ém do m odo gráfico, um m odo de cons ol a. O program a e s tá dis poníve l para Linux, W indow s , M ac, Sun, e tc... É ainda pos s íve lcriar e xe cutáve is dos program as criados para corre r nas várias pl ataform as onde s e e s tive r a trabal h ar o código. Es pe ro q ue te nh am pe rce bido o pote ncial do Sch e m e com o l inguage m de al to níve l m as , tam bém , com o l inguage m de apre ndizage m para s e e vol uir para outras l inguage ns .

M igue lW ah non

Al guns e xe m pl os da util ização do ope rador s e t!:

a program ar -> D e s vantage ns : •É m ais l e nto q ue o m odo orie ntado ao datagram a. •O com portam e nto do s e rvidor é dife re nte do com portam e nto do cl ie nte .

M odo O rie ntado ao D atag ram a (UD P/IP)

Sock e ts e m Java Ne s te artigo vam os ficar a conh e ce r o s uporte q ue Java ofe re ce para a util ização do m e canis m o de com unicação Sock e t, o m e canis m o m ais util izado para a com unicação e ntre apl icaçõe s . Java pe rm ite o us o de s ock te s pe l os s e guinte s m odos util ização: -> M odo O rie ntado à Cone xão: Funciona com o protocol o TCP; -> M odo O rie ntado ao D atagram a: Funciona com o protocol o UD P . Am bos os m odos funcionam s obre o protocol o IP (Inte rne t Protocol ). Cada um de s te s m odos te m a s ua util idade , vantage ns e de s vantage ns na s ua util ização.

M odo O rie ntado à Cone xão (TPC/IP) -> Vantage ns : •Se rviços confiáve is , s e m pe rda de dados na re de e orde m dos pacote s ; •Pos s ibil idade de us ar D ataStre am s .

-> Vantag e ns : •É bas tante m ais rápido q u e o m odo orie ntado a cone xão. -> D e s vantag e ns : •S e rviços não confiáve is , m e ns ag e ns pe rdidas na re de e pe rda da orde m das m e ns ag e ns ; •C ada m e ns ag e m é u m datag ram a: [R e m e te nte , D e s tinatário, C onte údo.] . D e vido a u m a m aior u til ização e e s tabil idade ire m os ape nas anal is ar e im pl e m e ntar o M odo O rie ntado à C one xão - TC P/IP .

S ock e ts TC P/IP No proce s s o de com u nicação e ntre s ock e ts TC P/IP, de u m a form a s im pl e s, o s e rvidor e s col h e u m a porta e ag u arda cone xõe s a e s s a porta, o cl ie nte de ve conte r as s e g u inte s inform açõe s : •Ende re ço do S e rvidor (H O S T); •A porta u s ada pe l o s e rvidor (PO R T). C om e s s a inform ação o cl ie nte s ol icita u m a cone xão ao s e rvidor (Fig u ra 1). S e após o pe dido de cone xão não ocorre r ne nh u m probl e m a, o s e rvidor ace ita a cone xão g e rando u m s ock e t nu m a porta do s e rvidor, o q u e vai criar u m canal de com u nicação e ntre o cl ie nte e o s e rvidor (Fig u ra 2).

Figu ra 1

<12>

a program ar

Figu ra 2 Por norm a o s e rvidor funciona e m cicl o (l oop) e s pe rando por novas cone xõe s e criando s ock e ts para s ol icitaçõe s de cl ie nte s . Em s e guida ire m os ve r as acçõe s ne ce s s árias para im pl e m e ntar com unicaçõe s s obre TCP através de um s ock e tcl ie nte e um s ock e ts e rvidor.

Sock e tCl ie nt 1 –Abrir Cone xão. import java.io.*; import java.net.*; //Conectar ao servidor localhost na porta 8080. Socket client = new Socket("127.0.0.1",8080);

2 –O bte r Stre am s de e ntrada e s aída para com unicação com o s e rvidor. //Cria um canal para DataInputStream in = //Cria um canal para DataOutputStream out

receber dados. new DataInputStream(client.getInputStream()); enviar dados. = new DataOutputStream(client.getOutputStream());

3 –Re al izar a com unicação com o s e rvidor. //Envia o inteiro 3000. out.writeInt(3000); //Envia a String “Olá - Socket Cliente.”. out.writeUTF("Olá - Socket Cliente."); //Espera pela recepção de um inteiro. int valor = in.readInt(); //Espera pela recepção de uma String. String texto = in.readUTF();

4 –Fe ch ar as Stre am s e a cone xão. //Fecha o canal de entrada. in.close(); //Fecha o canal de saída. out.close(); //Fecha o Socket. client.close();

<13>

a program ar

Sock e tSe rvidor 1 –Criar Sock e tSe rve r import java.io.*; import java.net.*; //Cria um socket servidor na porta 8080. ServerSocket serveer = new ServerSocket(8080);

2 – Aguardar Conexões //O método accept retorna um socket para comunicação com o próximo cliente. Socket sock = server.accept();

3 – Obter Streams de entrada e saída para comunicação com o cliente //Cria um canal para DataInputStream in = //Cria um canal para DataOutputStream out

receber dados. new DataInputStream(sock.getInputStream()); enviar dados. = new DataOutputStream(sock.getOutputStream());

4 – Realizar a comunicação com o cliente //Espera pela recepção de um inteiro. int valor = in.readInt(); //Espera pela recepção de uma String. String texto = in.readUTF(); //Envia o inteiro 6000. out.writeInt(6000); //Envia a String “Olá - Socket Servidor.”. out.writeUTF("Olá - Socket Servidor.");

5 – Fechar Streams e socket cliente //Fecha o canal de entrada. in.close(); //Fecha o canal de saída. out.close(); //Fecha o Socket que está a atender o cliente. sock.close();

6 – Fechar o socket Servidor //Fecha o servidor. server.close();

<14>

a program ar

Em s e guida pode m os ve r as cl as s e s Cl ie nte e Se rvidor com pl e tam e nte im pl e m e ntadas .

Cl as s Cl ie nte import java.io.*; import java.net.*; public class public public public

Cliente{ Socket client; DataInputStream in; DataOutputStream out;

public Cliente(){ try{ this.client = new Socket("127.0.0.1",8080); this.in = new DataInputStream(client.getInputStream()); this.out = new DataOutputStream(client.getOutputStream()); } catch(IOException e){ System.out.println(e.getMessage()); } } public static void main(String args[]){ try{ Cliente cli = new Cliente(); cli.out.writeInt(3000); cli.out.writeUTF("Olá - Socket Cliente."); int valor = cli.in.readInt(); String texto = cli.in.readUTF(); System.out.println(valor); System.out.println(texto); cli.in.close(); cli.out.close(); cli.client.close(); } catch(IOException e){ System.out.println(e.getMessage()); } } }

<15>

a program ar

Cl as s Se rvidor import java.io.*; import java.net.*; public class public public public public

Servidor{ ServerSocket server; Socket sock; DataInputStream in; DataOutputStream out;

public Servidor(){ try{ this.server = new ServerSocket(8080); this.sock = this.server.accept(); this.in = new DataInputStream(sock.getInputStream()); this.out = new DataOutputStream(sock.getOutputStream()); } catch(IOException e){ System.out.println(e.getMessage()); } } public static void main(String args[]){ try{ Servidor serv = new Servidor(); int valor = serv.in.readInt(); String texto = serv.in.readUTF(); System.out.println(valor); System.out.println(texto); serv.out.writeInt(6000); serv.out.writeUTF("Olá - Socket Servidor."); serv.in.close(); serv.out.close(); serv.sock.close(); serv.server.close(); } catch(IOException e){ System.out.println(e.getMessage()); } }

Aq ui ficam as principais bas e s de s ta m atéria, a partir daq ui é us ar a im aginação. Com o s uge s tão para a apl icação dos novos conh e cim e ntos adq uiridos , s ugiro q ue e xpe rim e nte m a criação de um s im pl e s s oftw are de conve rs ação ('ch at').

<16>

Fábio Corre ia

}

a program ar 1*10^2 + 2*10^1 3*10^0 3 = 123

= 100 + 20 +

E os núm e ros fraccionários ?Sim pl e s , vam os ve r o e xe m pl o 123,456: 1*10^2 + 2*10^1 + 3*10^0 + 4*10^-1 + 5*10^-2 + 6*10^-3 O u s e ja, cada dígito à e s q ue rda da vírgul a re pre s e nta um val or e ntre 0 e 9 m ul tipl icado por um a potência de bas e 10 cujo e xpoe nte aum e nta com a dis tância à vírgul a. Nos dígitos à dire ita da vírgul a é um val or de 0 a 9 m ul tipl icado por um a potência de bas e 10 com um e xpoe nte ne gativo q ue cre s ce à m e dida q ue s e afas ta da vírgul a. Sim , l á ve m a M ate m ática! M as não s e pre ocupe m m uito com is s o, trata-s e de M ate m ática s im pl e s.

Es truturas de dados

Agora vam os pas s ar ao s is te m a binário.

Ne s ta s érie de artigos vam os de s l indar um as s unto q ue para m uitos é difícil de e ncaixar, e nq uanto para outros é com o s om ar 1 + 1. No prim e iro capítul o de s ta s érie de artigos vam os abordar os s is te m as num éricos . Com o a m aioria dos l e itore s s abe m , o com putador não inte rpre ta os núm e ros com o nós e te m as s uas l im itaçõe s aritm éticas . Is to porq ue o proce s s ador ape nas trabal h a com im pul s os e l éctricos e e s te s s ó pode m tom ar 2 val ore s : 0 e 1, re pre s e ntando as s im a aus ência e a pre s e nça, re s pe ctivam e nte , de s s e s ditos im pul s os . Portanto, e s tam os diante um s is te m a num érico binário. Natural m e nte , com o nós pe ns am os num núm e ro s e m pre no s is te m a de cim al e l im itam os a te r um a im age m m e ntal de q uantidade , não nos ape rce be m os q ue de facto um núm e ro, por e xe m pl o o 123, pode s e r re pre s e ntado da s e guinte form a:

<17>

No s is te m a binário s ó pode m os e ncontrar 2 val ore s o 0 e o 1, e a partir de s te s 2 dígitos pode m os facil m e nte obte r q ual q ue r val or de cim al corre s ponde nte . A m ane ira de conve rte r um binário num de cim al é bas tante s im il ar ao q ue fize m os com os núm e ros de cim ais . O s is te m a binário não pe rm ite dígitos dife re nte s de 0 e 1 e a potência é s e m pre de bas e 2 e m ve z de bas e 10. Vam os e ntão conve rte r o s e guinte núm e ro binário para de cim al : 11001010 1*2^7 * 1*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 128 + 64 + 8 + 2 = 202 Sim pl e s não é? Para faze r a ope ração inve rs a é um pouco pior, te m os de dividir s uce s s ivam e nte um núm e ro de cim alpor 2 até o re s ul tado s e r m e nor q ue 2. D e pois te m os de col ocar o úl tim o re s ul tado e os re s tos ante riore s na orde m com o o e xe m pl o a s e guir. O u s e ja:

te cnol ogias

As re pre s e ntaçõe s dos núm e ros binários pode m variar. Por e xe m pl o o núm e ro 5 no s is te m a binário re pre s e nta-s e por 101, m as pode s e r re pre s e ntado por 0000101 ou 00000101 ou 0000000000000000000101, is to porq ue , talcom o no s is te m a de cim al , os ze ros a e s q ue rda não têm s ignificado ne nh um . Cada digito binário é conh e cido por bit(binary digit). Agora q ue s abe m os conve rte r de binário para de cim ale vice ve rs a, vam os ao q ue inte re s s a. M ate m aticam e nte pode m os re pre s e ntar q ual q ue r val or de cim al e m binário s e m l im itaçõe s de tam anh o, m as num proce s s ador as cois as já não s ão be m as s im , e s te vai agrupar os bits num a q uantidade e s pe cífica de bits . O u s e ja, pode agrupar e m 4 bits (conh e cido por nibbl e ), 8 bits (conh e cido por by te ), 16 bits (conh e cido com o w ord) e m ais adiante .

<18>

E vam os ao nos s o úl tim o e xe m pl o de s te artigo:

Re pre s e ntação do núm e ro 5 num nibbl e , num by te e num w ord. Nibbl e : 0101 (4 bits ) By te : 00000101 (8 bits ) W ord: 0000000000000101 (16 bits ) No próxim o artigo vam os ve r com o s e organizam e s tas e s truturas q ue acabám os de de s cre ve r.

D iogo Al ve s

O val or binário é 1100100.

a program ar Caracte rís ticas do Py th on: •Sintaxe s im pl e s; •Fácile rápida apre ndizage m ; •G rátis e de código abe rto; •Linguage m de al to níve le inte rpre tada; •Portabil idade ; •O rie ntação a obje ctos ; •Exte ns íve l ; •Exte ns as bibl iote cas ; •Exce l e nte s uporte e docum e ntação.

Áre as de apl icação:

Introdução à l inguage m q ue te m m ovim e ntado o m undo ope n-s ource O Py th on é, com o o s e u autor diz, um a l inguage m de program ação inte rpre tada, inte ractiva, orie ntada a obje ctos e dinâm ica. Ao contrário de m uitas outras l inguage ns de program ação, a de l im itação dos bl ocos de ins truçõe s é fe ita pe l o al inh am e nto (inde ntação), não h á de l im itadore s com o be gin e e nd com o aconte ce no Pas cal , ou { e } da l inguage m C. Al ém dis s o ofe re ce tipos de dados de al to níve lcom o s trings , dicionários , l is tas , tupl as , cl as s e s , e ntre outros . A l inguage m pe rm ite outros paradigm as de program ação al ém da program ação orie ntada a obje ctos , com o a program ação funcional . A s intaxe é fácilde com pre e nde r e dom ina-s e rapidam e nte , s e ndo e s s as duas caracte rís ticas cons ide radas grande s vantage ns da l inguage m . Py th on é, e m vários as pe ctos , s e m e l h ante a outras l inguage ns inte rpre tadas com o Pe rle Ruby.

<19 >

•D e s e nvol vim e nto de apl icaçõe s W e b; •Ace s s o a bas e s de dados ; •Inte rface s gráficas ; •Apl icaçõe s cie ntíficas e num éricas ; •Educação; •Program ação de re de s ; •D e s e nvol vim e nto de s oftw are ; •Jogos e gráficos 3D . Ante s de tudo, vam os ins tal ar o inte rpre tador da l inguage m Py th on q ue pode s e r obtido na página oficial da l inguage m (h ttp://w w w .py th on.org). A ve rs ão q ue vam os util izar ao l ongo de s te artigo é a 2.5 (a úl tim a ve rs ão e s táve lna al tura da e s crita do artigo). Se e s tive r e m am bie nte W indow s bas ta faze r a trans fe rência do e xe cutáve lde ins tal ação (h ttp://w w w .py th on.org/ftp/py th on/2.5/py th on2.5.m s i), q ue m e s tive r e m am bie nte Linux ou se m e l h ante te m um a grande probabil idade de já pos s uir o inte rpre tador ins tal ado, cas o não te nh am aprove ite m agora para o ins tal ar. Vam os agora ve r com o corre r o prim e iro program a e m Py th on, o tradicionalH e l l o W orl d. Exis te m dois m étodos para o faze r, us ando o inte rpre tador inte ractivo ou um código fonte e xte rno. A vantage m do inte rpre tador é q ue não têm de gravar e vol tar a e xe cutar um fich e iro s e m pre q ue faze m um a m odificação. M ais à fre nte vam os util izar fich e iros com o código fonte , pois as s im q ue e nce rram o inte rpre tador e s te não grava o q ue e s cre ve ram , s e ndo por is s o útilape nas para pe rce be r com o a l inguage m funciona e não para e s cre ve r program as com pl e xos .

a program ar

Para iniciar o inte rpre tador pe l a l inh a de com andos ou cons ol a bas ta e s cre ve r py th on s e guido de <Ente r> . As s im q ue o fize re m vão s e r apre s e ntados com o s e guinte (pode s e r l ige iram e nte dife re nte de pe nde ndo do vos s o s is te m a ope rativo):

Python 2.5 (r25:51908, Oct 6 2006, 15:22:41) [GCC 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13 ubuntu4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>

Para fe ch ar o inte rpre tador bas ta pre s s ionar Ctrl -Z s e guido de Ente r e m W indow s , ou Ctrl D e m Linux. Para aq ue l e s q ue não s e s e nte m confiante s a trabal h ar e m l inh a de com andos , o Py th on tam bém ve m com um a inte rface gráfica q ue pode s e r us ada para program ar tanto no m odo inte ractivo com o com fich e iros de código fonte . Es ta fe rram e nta ch am a-s e ID LE (Inte grate d D e ve Lopm e nt Environm e nt) e é forne cida com a ins tal ação bas e do Py th on. Se durante a ins tal ação pe diram ao ins tal ador para criar atal h os no m e nu Iniciar e ntão pode m s e guir por e s s e cam inh o. Cas o não te nh am ins tal ado atal h os , o ID LE e ncontrase em <pas ta de ins tal ação do Py th on> \Lib\idl el ib\idl e .py w . Agora q ue te m os o inte rpre tador iniciado vam os com e çar a e s cre ve r al guns program as . Se m pre q ue o inte pre tador m os trar > > > s ignifica q ue e s tá pronto a re ce be r ins truçõe s . Para com e çar vam os introduzir a ins trução print “H e l l o W orl d”. Com o de ve m te r re parado as s im q ue pre s s ionaram a te cl a Ente r o Py th on aval iou o q ue introduziram e e fe ctuou a de vida ope ração (e s cre ve u Hel l o W orl d num a l inh a). As s im q ue acabou de o e fe ctuar vol tou a m os trar os > > > , s ignificando q ue e s tá pronto a re ce be r novas ins truçõe s .

<20>

>>> print “Hello World” Hello World >>> print "Hello", "World" Hello World >>> print

Com o de ve m te r re parado o com ando print s e rve para e s cre ve r al go na l inh a de com andos . Ne s te e xe m pl o e s cre ve m os um a s tring (cade ia de caracte re s ) m as tam bém pode m os e s cre ve r l is tas , tupl as e ntre outros tipos de dados q ue vam os conh e ce r m ais à fre nte ... Se e fe ctuare m o com ando print e não forne ce re m nada para o inte rpre tador e s cre ve r, e l e e fe ctua ape nas um parágrafo, s e ndo e q uival e nte a faze re m print de um a s tring vazia (“”). Tam bém é de notar q ue s e pode faze r print a vários val ore s num a única ins trução, s e ndo os dados s e parados por vírgul as .

Tipos de dados Em Py th on e xis te um a e norm e varie dade de tipos de dados q ue dão um a e norm e fl e xibil idade ao program ador com o núm e ros , s trings (s e q uência de caracte re s ), l is tas (array s /ve ctore s ), tupl as , dicionários (array s as s ociativos / m atrize s ), obje ctos , e tc... O s núm e ros s ubdivide m -s e e m q uatro tipos : os inte iros ou de cim ais (inte ge rs ), os inte iros grande s (l ong inte ge rs ), os núm e ros fraccionários (fl oating point) e os núm e ros com pl e xos (com pl e x num be rs ). A s e guir apre s e ntam -s e al guns e xe m pl os de ope raçõe s com núm e ros : >>> 5+5 10

Ne s te cas o juntam os dois núm e ros inte iros s e ndo o re s ul tado outro inte iro. Tam bém de pode m re al izar outras ope raçõe s : >>> 2.5*2 5.0

a program ar Com o viram m ul tipl icam os um núm e ro fraccionário por um núm e ro inte iro s e ndo o re s ul tado um núm e ro fraccionário. Ate nção q ue para o inte rpre tador 5 não é o m e s m o q ue 5.0.

>>> type(5) >>> type(5.0) >>> type(“Python”)

>>> 2**3 8 >>> pow(2, 3) 8

As s trings com o já foi dito s ão cade ias de caracte re s ou s e ja pode m conte r núm e ros , l e tras e s ím bol os , e o s e u conte údo e s tá s e m pre l im itado por as pas ou pl icas :

Com o já de ve m te r pe rce bido o s ím bol o ** s ignifica e l e var, ne s te cas o e l e vám os o núm e ro 2 ao cubo. Aprove itam os tam bém para apre s e ntar o us o de funçõe s , ne s te cas o a função pow (x, y ), s e ndo x e y os ch am ados argum e ntos da função ou s e ja, os dados q ue forne ce m os à função. Es te te m a irá s e r abordado m ais profundam e nte q uando criarm os as nos s as próprias funçõe s . >>> 10/3 3 >>> 10.0/3 3.3333333333333335

Q uando s e divide m dois inte iros o re s ul tado é um inte iro, m as q uando s e m is turam inte iros com fraccionários , o re s ul tado é um fraccionário, convém te r e s te facto e m ate nção já q ue é um e rro fre q ue nte . O utra função a conh e ce r m uito útilq uando e s tam os a iniciar é a ty pe (), q ue pe rm ite s abe r o tipo de dados com q ue e s tam os a l idar.

>>> 'Python' 'Python' >>> "Portugal" 'Portugal' >>> """Python ... Portugal ... P@P""" 'Python\nPortugal\nP@P'

Es ta úl tim a s tring cons truída por três as pas é cons ide rada um a s tring de várias l inh as , re pare m q ue q uando iniciam os a s tring e dam os um <Ente r> o inte rpre tador pas s a autom aticam e nte para a l inh a s e guinte m os trando ... e m ve z das h abituais > > > . O utro porm e nor inte re s s ante é q ue a s tring final de vol vida pe l o inte rpre tador te m ape nas um a l inh a apare ce ndo o \n (ne w l ine ) s e m pre q ue ocorre um a m udança de l inh a. Tam bém pode m os m udar de l inh a m anual m e nte s e m us ar e s te úl tim o tipo de s trings :

>>> 'Python\nPortugal' 'Python\nPortugal' >>> 'Triton'Portugal' File "<stdin>", line 1 'Triton'Portugal' ^ SyntaxError: invalid syntax

Aq ui pode m ve r outro porm e nor inte re s s ante s obre as s trings q ue ainda não foi re fe rido. Com o faze m os s e q uis e rm os us ar as pas ou pl icas de ntro de um a s tring? Se us arm os as s im s e m m ais ne m m e nos o inte rpre tador confunde -s e , não s abe ndo onde acaba a s tring, m as s e us arm os tipos dife re nte s de as pas /pl icas no conte údo dos q ue us am os para l im itar a s tring e ntão já é pe rm itido:

<21>

a program ar

Para guardar um inte iro e m m e m ória us am os um a variáve l , para is s o te m os de l h e atribuir um nom e para q ue nos pos s am os re fe rir a e s s e val or no futuro:

>>> "Triton ' Portugal" "Triton ' Portugal" >>> 'Triton " Portugal' 'Triton " Portugal' >>> """Triton '" Portugal""" 'Triton \'" Portugal'

>>> numero = 1

>>> print "Triton \" Portugal" Triton " Portugal >>> print "Uma barra \\" Uma barra \ >>> "abc".upper() 'ABC'

No prim e iro e xe m pl o us am os um a as pa no m e io de um a s tring l im itada pe l o m e sm o tipo de as pa. Para is s o faze m os o e s cape da as pa, us ando para is s o o \”. Para faze m os e s cape à barra us am os duas barras , com o s e ve rifica no s e gundo e xe m pl o. As s trings apre s e ntam um conjunto de m étodos q ue pode m os util izar, com o fize m os no úl tim o e xe m pl o, ch am ando o m étodo .uppe r() q ue faz com q ue a s tring s e ja conve rtida para l e tras m aiús cul as . Para conh e ce r os m étodos de q ual q ue r tipo de dados us a-s e a função dir(), por e xe m pl o, dir('Foo') vai m os trar todos os m étodos da s tring (ne s te cas o 'Foo'). Até agora não te m os guardado os val ore s das e xpre s s õe s q ue introduzim os , para is s o us am os as variáve is . Um a variáve lé ape nas um nom e q ue aponta para o e nde re ço de m e m ória onde vam os guardar a inform ação.

<22>

É tão s im pl e s com o is to, bas ta e s cre ve r o nom e da variáve ls e guido de um igual(=, atribuição) e s e guido do q ue q ue re m os guardar. >>> print numero 1 >>> inteiro = numero + 1 >>> inteiro 2

Agora cada ve z q ue nos re fe rirm os à variáve lnúm e ro é com o nos e s tivés s e m os a re fe rir ao val or q ue e l a guarda e m m e m ória, pois cada ve z q ue o inte rpre tador te m de proce s s ar a variáve l ace de à m e m ória e s ubs titui pe l o de vido val or guardado. As variáve is pode m s e r us adas para guardar todos os tipos de dados : >>> frac = 2.0*2 >>> print frac 4.0

Ne s te cas o ante s de guardar o val or o inte rpre tador aval ia a e xpre s s ão (2.0*2) s e ndo o re s ul tado um núm e ro fraccionário. G raças á s im pl icidade de Py th on, e s ta l inguage m é m uitas ve ze s acons e l h ada para q ue m e ntrar no m undo da program ação. Tam bém por is s o, é pos s íve le ncontrar m uita inform ação (docum e ntação, artigos , e xe m pl os ...) l ivre s na inte rne t, s obre e l a. Aq ui têm al guns l ink s inte re s s ante s : •h ttp://w w w .dive intopy th on.org •h ttp://w w w .onl am p.com /py th on •h ttp://w ik i.py th on.org/m oin •h ttp://pt.w ik ipe dia.org/w ik i/Py th on

João M atos

Ne s te úl tim o cas o pode m os ve r com o é q ue o Py th on re pre s e nta a pl ica num a s tring. Us am os o ch am ado caracte r de e s cape , a barra para a e s q ue rda, para re pre s e ntar os tais caracte re s não pe rm itidos norm al m e nte ou caracte re s e s pe ciais (\n).

s e gurança O buffe r ove rfl ow aconte ce q uando um program a grava dados num a de te rm inada variáve l pas s ando, porém , um a q uantidade m aior de dados do q ue e s tava pre vis to pe l o program a. Es s a s ituação pode pos s ibil itar a e xe cução de um código arbitrário, ne ce s s itando ape nas q ue e s te s e ja de vidam e nte pos icionado na áre a de m e m ória do proce s s o.

Introdução aos Expl oits

Abaixo te m os um e xe m pl o de um program a vul ne ráve l a um ataq ue de buffe r ove rfl ow . O probl e m a e s tá na s e gunda l inh a da função Proce s s arParam , q ue não l im ita o tam anh o do argum e nto re ce bido (arg).

Um e xpl oit não é nada m ais q ue um código capaz de e xpl orar um a fal h a num s e gm e nto de código ou s oftw are . D o ingl ês , s ignifica l ite ral m e nte e m português “e xpl orar”. No m undo da s e gurança inform ática, de nom ina-s e “e xpl oit” um m étodo capaz de tirar prove ito de um bug (fal h a) de um s oftw are provocando com portam e ntos não pre te ndidos do s oftw are , fre q ue nte m e nte para cons e guir e s cal ar privil égios , obte r control o do s is te m a ou ne gar s e rviços (D oS). G e ral m e nte util izados e m m il h are s de s is te m as diariam e nte , os e xpl oits s ão a fonte de grande parte dos ataq ue s ocorridos l ocal m e nte e re m otam e nte nos s is te m as e xis te nte s . Es te s pode m ainda tom ar form as e pode re s bas tante s variados . Pode s e r um program a e xe cutáve l , um a m e ns age m num de te rm inado protocol o de re de ou até m e s m o um a m e ns age m e s condida num e -m ail . Ne s te artigo vam o-nos focar no tipo de fal h a “Buffe r O ve rfl ow ” e util izare m os a l inguage m C para de m ons trar.

Com o funcionam os e xpl oits ? O s e xpl oits q uas e s e m pre faze m prove ito de um a fal h a conh e cida com o buffe r ove rfl ow (s obre carga da m e m ória buffe r).

<24>

void ProcessarParam(char *arg); void main(int argc, char *argv[]) { if (argc > 1){ printf("Param: %s\n",argv[1]); ProcessarParam(argv[1]); } } void ProcessarParam(char *arg) { char buffer[10]; strcpy(buffer, arg); /* BUG: se a string contida em arg tiver mais que 10 carateres existirá um Buffer Overflow */ printf(buffer); }

O buffe r ove rfl ow , q uando ocorre de form a al e atória, norm al m e nte caus a um e rro fatal /cras h na apl icação. No W indow s XP e s ta s ituação ge ra um a jane l a de e rro, e no Linux ge ra a conh e cida s e gm e ntation faul t com core dum p (dá-s e um core dum p q uando o s is te m a cons e gue guardar o e s tado do program a ante s de s urgir a fal h a, s e ndo o core o fich e iro guardado). Porém , q uando corre ctam e nte induzido pe l o atacante , o buffe r ove rfl ow pode pe rm itir q ue s e e xe cute código m al icios o q ue te rá os m e s m os privil égios de e xe cução da apl icação a s e r atacada, q ue ge ral m e nte s ão privil égios de adm inis trador.

s e gurança Para e nte nde r com pl e tam e nte com o o buffe r ove rfl ow é e xpl orado para s e obte r ace s s os inde vidos ao s is te m a, s e ria ne ce s s ário com pre e nde r com o é q ue os proce s s os s ão organizados na m e m ória, no q ual cada arq uite ctura de h ardw are , s is te m a ope rativo ou com pil ador pode organizar de form a dife re nte . Buffe r ove rfl ow é ape nas um dos m uitos tipos de vul ne rabil idade s pos s íve is num s oftw are . Se ndo al guns de l e s : h e ap ove rfl ow , inte ge r ove rfl ow , re turn-to-l ibc attack , form at s tring attack , race condition, code inje ction, SQ L inje ction, cros s -s ite s cripting e cros s -s ite re q ue s t forge ry. G e ral m e nte um e xpl oit ape nas tom a vantage m de um a única vul ne rabil idade de s oftw are , o q ue torna por ve ze s norm als e re m util izados vários e xpl oits e m s im ul tâne o: prim e iro para ganh ar ace s s o de níve l re duzido, de pois para e s cal ar privil égios re pe tidam e nte até obte r privil égios m áxim os , nom e adam e nte Adm inis trador/root. Norm al m e nte um único e xpl oit pode ape nas s e r util izado para tom ar vantage m num a única vul ne rabil idade de s oftw are . H abitual m e nte , q uando um e xpl oit é publ icado, a vul ne rabil idade é corrigida através de um a corre cção (patch ) e o e xpl oit torna-s e obs ol e to para novas ve rs õe s do s oftw are . Es ta é a razão pe l o q ualal guns h ack e rs não publ icam os s e us e xpl oits , m ante ndo-os privados . Tais e xpl oits s ão ge ral m e nte re fe re nciados com o e xpl oits 0day e obte r tais e xpl oits é o de s e jo principal dos atacante s ine xpe rie nte s , ge ral m e nte ch am ados ‘s criptk iddie s ’.

e xpl oits a todos . Criticado pe l os e xpe rts da áre a com o um a fe rram e nta q ue ve m facil itar o trabal h o aos s cript-k iddie s e as s im aum e ntar o núm e ro de s is te m as s ob ataq ue s . Com e s ta fe rram e nta, a fas e de procura e de s e nvol vim e nto dos e xpl oits é praticam e nte el im inada vis to q ue s e torna bas tante fácilde de s carre gar novos e xpl oits para util izar na pl ataform a.

Program ar e m Se gurança Exis te m m uitos tipos de vul ne rabil idade s , cada um a de l as ocorre de vido a um e rro do program ador. G e ral m e nte caus adas pe l a má conce pção, fal ta de conh e cim e nto, e nte ndim e nto do funcionam e nto das funçõe s /bibl iote cas util izadas de outros program adore s ou até m e s m o fal h as aritm éticas ine s pe radas . Com is to pode -s e facil m e nte concl uir q ue e s tas vul ne rabil idade s ape s ar de s e re m bas tante conh e cidas , não s ão ge ral m e nte e nte ndidas , e is to e xpl icaria o porq uê de continuare m a apare ce re m e norm e s q uantidade s de s tas fal h as nas apl icaçõe s de s oftw are .

Proje cto M e tas pl oit? O Proje cto M e tas pl oit é um a pl ataform a onl ine ope n-s ource , dis poníve lpara dow nl oad, q ue pe rm ite control ar e util izar e xpl oits publ icados onl ine . Es crito e m Pe rl , com com pone nte s e m C, As s e m bl e r e Py th on, o M e tas pl oit tornou-s e um a fe rram e nta fam os a por facil itar o us o de

<25>

s e gurança

Ape s ar dis to, te m os de e nte nde r q ue todos os tipos de vul ne rabil idade s , nom e adam e nte as fal adas ante riorm e nte s ão pre vis íve is . Tal ve z num te m po próxim o no futuro, as condiçõe s q ue pe rm ite m e s tas fal h as e xis tire m , ve nh am a s e r “corrigidas ” e el im inadas , ficam aq ui al guns m étodos q ue pode m ajudar q ual q ue r program ador a pre ve nir e s tas :

1.

Util izar dife re nte s l inguage ns . Linguage ns de program ação q ue forne ce m autom aticam e nte ve rificação de l im ite s com o Pe rl , Py th on, Java, Ruby, e tc. É ve rdade q ue e s tas e xis te m , porém is to por ve ze s torna-s e im pos s íve l q uando s e cons ide ra q ue praticam e nte todos os s is te m as ope rativos m ode rnos s ão e s critos e m C. A m udança de l inguage m torna-s e particul arm e nte crítica q uando é ne ce s s ário ace s s o de baixo-níve lao h ardw are . A boa notícia é q ue as l inguage ns e s tão a e vol uir, e a s e gurança tornou-s e um as s unto s ério. Por e xe m pl o, a M icros oft com a s ua iniciativa .NET, re s cre ve u por inte iro o Vis ual Bas ic e Vis ualC+ + com a s e gurança e m m e nte . Adicional m e nte , a l inguage m Vis ual C# q ue foi de s e nh ada por com pl e to com a s e gurança e m m e nte .

2. Elim inar o us o de

funçõe s de bibl iote cas com vul ne rabil idade s . Linguage ns de program ação, s ão tão vul ne ráve is com o o program ador pe rm ite q ue s e jam . No e xe m pl o dado, no ínicio, util izám os um a função vul ne ráve lda Standard C Library (s trcpy ). Es ta é um a, de várias , funçõe s e xis te nte s na bibl iote ca q ue fal h am e m ve rificar o com prim e nto/l im ite dos s e us argum e ntos . Por e xe m pl o, pode ríam os te r corrigido a nos s a apl icação al te rando unicam e nte um a l inh a de código: // substituindo: strcpy(buffer, arg); // por: strncpy(buffer, arg, 10);

<26>

Es ta s im pl e s al te ração, inform a o s trcpy () q ue o buffe r de de s tino s ó te m um tam anh o de 10 by te s , e q ue de ve de s cartar q uais q ue r dados após e s te com prim e nto.

3.

Im pl e m e ntar e cons truir s e gurança de ntro do código. Pode de m orar m ais te m po, e cons om e m ais e s forço, m as o s oftw are pode s e r cons truído com a s e gurança e m m e nte . Se no e xe m pl o ante rior, tivés s e m os adicionado um pas s o e xtra, atingiríam os ainda um mel h or níve lde s e gurança: strncpy(buffer, arg, sizeof(buffer));

Novam e nte , is to pode re m e te r a ve rdade ira q ue s tão, de com o os program adore s s ão e ducados . Se rá a s e gurança e ns inada, ou e ncorajada?Se rá dado o te m po e xtra ne ce s s ário para im pl e m e ntar a s e gurança ade q uada? Tipicam e nte , e infe l izm e nte , a re s pos ta é não.

4.

Util izar m ódul os de bibl iote cas s e guras . Bibl iote cas de s e gurança e m s trings e s tão dis poníve is e m l inguage ns com o C+ + . Por e xe m pl o, a C+ + Standard Te m pl ate Library (STL) ofe re ce a cl as s e String. Es ta cl as s e ofe re ce funçõe s inte rnas q ue s ão s e guras no tratam e nto das s trings , e de ve s e r pre fe rida e m re l ação às funçõe s us uais .

5.

Util izar bibl iote cas dis poníve is (M iddl e w are ). Exis te m várias bibl iote cas de “s e gurança” dis poníve is para util ização. Por e xe m pl o, a Be l l Labs de s e nvol ve u a “l ibs afe ” q ue prote ge a util ização de funçõe s ins e guras . Libs afe funciona na e s trutura da s tack , e pe rm ite as s e gurar q ue q uando um a função é e xe cutada, o e nde re ço de re torno não é al te rado. No e ntanto, com o m uitas outras bibl iote cas , e s ta não é im une a fal h as e de ve s e r s e m pre util izada a úl tim a ve rs ão.

s e gurança

Util izar fe rram e ntas de anál is e do código. Foram fe itas várias te ntativas de criar um a apl icação q ue e xe cutas s e um a anál is e no código fonte e te ntas s e e ncontrar pote nciais fal h as , incl us ive Buffe r O ve rfl ow ’s . Um a apl icação e xe m pl ar ch am a-s e Purify Pl us criada pe l a Rational ’s (h ttp://w w w .rational .com ) q ue e xe cuta anál is e s a código e s crito e m Java, C ou C+ + e de te cta várias vul ne rabil idade s .

7.

Util izar fe rram e ntas de optim ização do com pil ador. Praticam e nte um conce ito novo, várias e xte ns õe s foram re ce nte m e nte fe itas dis poníve is para funcionar dire ctam e nte com o com pil ador q ue pe rm ite m m onitorizar o com portam e nto do RET (e nde re ço de re torno dum a de te rm inada função) e s al vaguardar e s te val or de pote nciais al te raçõe s . Stack Sh ie l d (h ttp://w w w .ange l fire .com /s k /s tack s h ie l d) e (h h ttp://w w w .re s e arch .ibm .com /trl /proje cts /s e cu rity /s s p).

8.

Actual izar o s is te m a ope rativo e apl icação. Tal ve z a m e l h or de fe s a é m ante rse ofe ns ivo e inform ado. Novas vul ne rabil idade s s ão de s cobe rtas e re portadas todos os dias . Apl icar as de vidas al te raçõe s e actual izaçõe s às apl icaçõe s é fundam e ntal . Por e xe m pl o, re ce nte m e nte foi de s cobe rto um a fal h a na API –M e s s age BoxA – para q ue m de s e nvol ve apl icaçõe s e m W indow s e s ta função é bas tante fam il iar, pois é util izada para m os trar m e ns age ns de e rro/avis o/inform ação na pl ataform a. Es te e xpl oit é agora conh e cido com o o prim e iro e xpl oit do W indow s Vis ta (abrange o W indow s XP/2003/Vis ta). Um program ador q ue util ize e s ta API para criar m e ns age ns e m q ue de al gum a form a é pe rm itido ao util izador forne ce r o te xto a s e r col ocado na m e ns age m , têm um a pote ncial fal h a na apl icação q ue pe rm ite um atacante bl oq ue ar o Sis te m a O pe rativo. M ais inform açõe s e m h ttp://w w w .s e curite am .com / w indow s ntfocus /6D 00R0AH PK .h tm l .

<27>

Final izando Educação é a ch ave no pe rcurs o de tornar um a apl icação s e gura. G rande parte dos program adore s s abe m da ne ce s s idade de ve rificar dados introduzidos pe l o util izador, ve rificar os l im ite s nas ope raçõe s de dados , e ntre outros , m as poucos têm a noção das cons e q uências da fal ta de s tas ate nçõe s . É ne ce s s ário conh e ce r e s tas cons e q uências para pode rm os adoptar as de vidas práticas . Por ve ze s não s e trata ape nas de um a pote ncial fal h a ou cras h na apl icação, m as s im dos ris cos de s e gurança q ue pode m caus ar aos s e us util izadore s . D e ve m e xis tir m étodos e cicl os no de s e nvol vim e nto do s oftw are , e m q ue o te s tar do s oftw are te m um pape l im portante . Um a m aior ate nção de ve s e r dada a todos os dados obtidos do util izador, q ue r s e ja do te cl ado, fich e iro, s ock e t, pipe , e tc.

Site s acons e l h ados ao l e itor inte re s s ado:

•h ttp://e n.w ik ipe dia.org/w ik i/Expl oit_(com pu te r_s e curity ) •h ttp://ins e cure .org/s tf/s m as h s tack .h tm l •h ttp://jul ianor.tripod.com /l am agra-bof.txt •h ttp://w w w .m il w 0rm .com / •h ttp://w w w .m e tas pl oit.com /

Fábio Pe dros a

6.

te cnol ogias

Conce itos Bás icos O cl us te r parte dum princípio tão s im pl e s q ue q ual q ue r pe s s oa pode te r um e m cas a. A partir do m om e nto e m q ue l igam os dois com putadore s e de al gum m odo cons e guim os te r com unicação e ntre am bos (via re de l ocal , W ire l e s s , USB, Fire w ire , e ntre outros ) é pos s íve ldividir tare fas . Es ta divis ão de tare fas é o ponto ce ntralda ide ia por trás de um cl us te r.

Cl u s te ring Cl us te ring é o agre gar dois ou m ais com putadore s de m odo a q ue e s te s funcione m e m paral el o para um m e s m o fim . D e s te m odo te m os o q ue é ch am ado cl us te r, um grupo de m áq uinas inte rl igadas via (por e xe m pl o) re de l ocal q ue cons e gue m com unicar e ntre s i.

Ne ce s s idade e Im portância Cada ve z m ais s e util izam com putadore s para re s ol ve r os m ais dive rs os probl e m as . À m e dida q ue e s te s vão apare ce ndo e cre s ce ndo e m com pl e xidade é ne ce s s ário ir e ncontrando novos m étodos para s e r be m s uce dido na s ua re s ol ução. Se ndo q ue a abordage m inicialm ais com um é a de te ntar ach ar um m e l h or al goritm o e s ta ne m s e m pre é cons e guida. M uitos probl e m as q ue s urge m h oje e m dia s ão s im pl e s m e nte de m as iado grande s e m com pl e xidade (m e s m o com al goritm os bas tante trabal h ados e optim izados ) para s e re m re s ol vidos por um a m áq uina is ol ada. É ne s te ponto q ue e ntra o cl us te ring. Se cons e guim os ach ar um a s ol ução m as util izando um a s ó m áq uina não a obte m os e m te m po útil , e ntão vam os paral el izar o proce s s am e nto de m odo a q ue e s te s e ja dis tribuído por m ais q ue um a m áq uina.

<28>

Vam os partir de um e xe m pl o s im pl e s: s upondo q ue te m os um a apl icação q ue e xe cuta duas s om as inde pe nde nte s . Se s ó tivés s e m os um com putador o proce dim e nto norm als e ria a m áq uina faze r prim e iro um a s om a e de pois a outra, m as vam os s upor q ue te m os dois com putadore s q ue cons e gue m com unicar um com o outro. Pas s am os e ntão ao cl us te ring, um de l e s (o m as te r) as s um e a função de dis tribuir trabal h o e ntre os dois . O outro (s l ave ) ape nas re ce be “orde ns ” do q ue te m a faze r. (Es ta divis ão de tare fas é m uitas ve ze s crítica e te m de s e r m uito be m program ada pe l o program ador.) Ne s te cas o a divis ão s e ria s im pl e s , o m as te r ficava com um a das s om as para e xe cutar e daria a outra ao s l ave , q ue a re ce bia pe l o m e io de com unicação util izado e de vol via o re s ul tado pe l o m e s m o canal . No finalo m as te r te ria am bos os re s ul tados das contas e pode ria s e guir o norm alfl uxo de e xe cução. D e notar q ue am bas as s om as s e riam fe itas ao m e s m o te m po, m as e m m áq uinas dife re nte s , de m orando portanto m e tade do te m po inicial (s e m contar com as ove rh e ads da com unicação). Es te é o princípio bás ico do cl us te ring e pode s e ve r q ue h á dive rs os factore s a te r e m conta q uando m ontam os um cl us te r: de s de l igação e ntre m áq uinas (l atência e l argura de banda), núm e ro de m áq uinas inte rl igadas (tam bém ch am ados nós ), capacidade de paral el is m o da apl icação até ao cus to total de todo o s is te m a e , m uito im portante , a função do s is te m a, pois a configuração da m áq uina varia m uito com a função finalq ue o cl us te r irá de s e m pe nh ar.

te cnol ogias

M ode l os de Cl us te ring

Sis te m as Tol e rante s a Fal h as

Com o pas s ar dos anos o cl us te ring e vol uiu de s de um a ide ia inicialm ais focada e m re s ol ve r grande s probl e m as para outras áre as , onde o q ue te m m ais im portância é a cone ctividade e ntre m áq uinas , s e gue -s e um a l is ta das áre as onde a im portância do cl us te ring (de um ou outro m odo) te m cre s cido.

Ne s te s s is te m as te m os ge ral m e nte um a m áq uina inicialq ue corre as apl icaçõe s ne ce s s árias , e um a s e gunda q ue s ubs titui a prim e ira no cas o de s ta fal h ar. Es te tipo de e s q ue m a te m bas tante apl icação e m bas e de dados , onde um prim e iro s e rvidor é dado com o principale corre a apl icação norm al m e nte , e xis tindo um s e gundo q ue vai m ante ndo um a cópia da inform ação e as s um e o pape lprincipalcas o h aja um a fal h a de funcionam e nto no prim e iro. Is to pe rm ite m ante r todo o s is te m a a funcionar s e m pre juízo para util izadore s . Es ta é um a configuração s im pl e s e e xis te m num e ros as form as de dividir os dados , pode ndo os com putadore s e s tar e m s al as , e difícios , país e s ou até contine nte s dife re nte s , de m odo a e vitar catás trofe s naturais e m l arga e s cal a ou acide nte s fís icos l ocais .

Com putação Paral el a Cons is te na divis ão por várias m áq uinas de um m e s m o probl e m a. Todas trabal h am e m conjunto e cada um a re s ol ve um a pe q ue na parte de s s e m e s m o probl e m a. G e ral m e nte para e s te tipo de trabal ho ape nas é ne ce s s ário CPU Tim e por parte de cada com putador, s e ndo o ace s s o a dis cos baixo ou nul o (de pe nde nte , no e ntanto, do probl e m a e m q ue s tão).

D is tribuição de W ork l oad Apl ica-s e o cl us te ring q uando te m os um a m áq uina a forne ce r de te rm inado s e rviço e , por al gum a razão, e s ta de ixa de cons e guir (ou nunca cons e guiu) dar re s pos ta (s atis faze r todos os pe didos ). M ontam -s e e ntão várias m áq uinas a forne ce r e s s e m e s m o s e rviço e divide m -s e os pe didos e ntre e l as . Um e xe m pl o: um a m áq uina a corre r um W e b Se rve r (H TTPd) pode não cons e gui s atis faze r todos os pe didos de q ue m vis ita as páginas al ojadas e m dis co. Ne s te cas o e xis te a h ipóte s e de m ontar um a outra m áq uina com o m e s m o W e b Se rve r e um a cópia e xacta do dis co do s e rvidor inicial . (As m áq uinas e ncontram -s e inte rl igados e um a de l as (s l ave ) irá m odificar o s e u conte údo e m dis co s e m pre q ue al go for m udado no m as te r.) Final m e nte pode m os dire ccionar os vis itante s para um ou outro s e rvidor conform e a afl uência de cada com putador, e vitando a s obre carga de cada um de l e s.

<29 >

Arm aze nam e nto e m Larga Es cal a Util izado por m otore s de bus ca com o o G oogl e e s te tipo de cl us te ring é (e m princípio) s e m e l h ante à com putação paral el a. Em ve z de s e dis tribuir código a e xe cutar aq ui s ão dis tribuídos dados a arm aze nar e m dis co. Com o cada m áq uina não te m capacidade para s e l igar a ce nte nas de dis cos é ne ce s s ário o us o de varias m áq uinas , cada um a com vários dis cos . Es te tipo de cl us te ring al ivia o proce s s am e nto q ue cada m áq uina gas ta e m ace s s os a dis co e ace l e ra os proce s s os de l e itura. Ape s ar de s tas vantage ns a s ua principal função continua a s e r o arm aze nam e nto. Se um a dada bas e de dados for de tam anh o cons ide ráve le s ta é tam bém um a opção a te r e m conta, e m uitas ve ze s a única. Ate nção q ue ne s te s is te m a não s e fal a e m dados re pl icados (copias de s e gurança), pode ndo tam bém s e r al go a te r e m conta q uando s e de s e nh a um cl us te r de s ta nature za.

M anute nção e M onitorização Ne s te cas o te m os um núm e ro e l e vado de m áq uinas q ue q ue re m os m onitorizar.

proje cto

G rid Com puting Conce ito e de finição bas tante s e m e l h ante à com putação paral el a m as com um a dife re nça e m m uitos cas os . É naturalus ar o te rm o G rid Com puting para re fe rir um a re de de com putação paral el a s obre a Inte rne t. É na m e s m a com putação paral el a m as com al gum as l im itaçõe s ao níve l da l argura de banda e l atência. Exe m pl os s ão o G IM PS, SETI@ H om e , Fol ding@ H om e , e tc. Es te s proje ctos ne ce s s itam de grande pode r com putacional e ao invés de com prare m m áq uinas q ue fiq ue m ao s e u s e rviço optaram por dis tribuir pe l os s e us util izadore s pe q ue nos program as q ue re ce be m dados de um s e rvidor ce ntral , e fe ctuam os cál cul os e de vol ve m os re s ul tados a e s s e m e s m o s e rvidor. Es te s s ão proje ctos de nature za m uito própria, e m q ue um a l igação cons tante à Inte rne t não é ne ce s s ária, ne m tão pouco q ue s e ja rápida ou de baixa l atência (al go im pos s íve lde garantir). M uitos de l e s ape nas ne ce s s itam de um a l igação um a ve z por m ês de m odo a pe dir dados e e nviar re s ul tados . São um tipo de cl us te ring e m e rge nte pois cada ve z m ais pe s s oas têm com putadore s e m cas a e ace s s o à Inte rne t. Es te m ode l o te m , com o é óbvio, bas tante s l im itaçõe s pe l o q ue a s ua m aior util ização é junto de proje ctos m e nos críticos e onde o dinh e iro é um a q ue s tão de pe s o.

<30>

Pe rform ance do Cl us te r A pe rform ance de um cl us te r de pe nde do núm e ro (e q ual idade ) das m áq uinas q ue e s tão inte rl igadas . Q uando é ne ce s s ário m ais capacidade de arm aze nam e nto ou m ais pode r com putacionals ão adicionados m ais dis cos ou m ais m áq uinas . O cre s cim e nto de pe rform ance , a níve lcom putacional , não é l ine ar m as s e rve os propós itos ne ce s s ários s e m grande s bottl e ne ck s . O m aior probl e m a s urge na l igação via re de . Exis te m duas grande s q ue s tõe s : l argura de banda e l atência. O s probl e m as de l argura de banda s ão facil m e nte re s ol vidos m udando a l igação ou adicionado l inh as e xtra. O s e gundo probl e m a, a l atência, trás bas tante s m ais dificul dade s . A l atência é o te m po q ue os dados de m oram a pas s ar por todo o h ardw are de um ponto inicial ao ponto final(inde pe nde nte m e nte do tam anh o dos dados , is to é, te m po adicionado ao te m po totalde pas s age m da inform ação). Es te factor é im pos s íve lde anul ar m as pode se r m e l h orado com h ardw are de boa q ual idade . Es ta q ue s tão traz probl e m as com os q uais o program ador de ve contar, tais com o a s incronização. É im portante te r noção de q uanto te m po s e gas ta e m com unicação via re de de m odo a m inim izar o te m po pe rdido e nq uanto os dados s ão e nviados de nó a nó. Q uando a program ação de cada nó é e ficie nte a baixa pe rform ance da re de é um probl ema de m e nor im portância. Um a boa técnica para e vitar pe rda de te m po e m e nvios de dados pe l a re de é a e xe cução de duas ins tâncias do m e s m o program a na m e s m a m áq uina. Enq uanto um a com unica e e s pe ra a re ce pção ou e nvio de dados a outra s e gue o proce s s am e nto norm al .

Pe dro Ve rrum a & Luis Re nte

É pos s íve l faze -l o “à m ão” m as pode s e r de m orado. A s ol ução é l igar todas e s s as m áq uinas a um a nova q ue corra apl icaçõe s de m onitorização, de m odo a avis ar o re s pons áve l q uando h ouve r fal h as . D e pe ndo da nature za do s is te m a pode m os ainda util izar e s tas l igaçõe s para actual izaçõe s de s oftw are e m anute nção das m áq uinas m onitorizadas . Um e xe m pl o de s ta s ituação pode s e r e ncontrado nas e m pre s as de W e b H os ting (q ue forne ce m e s paço na Inte rne t para criação de páginas ). São e m pre s as q ue , ge ral m e nte , contam com grande núm e ro de s e rvidore s e q ue , de vido à nature za do s oftw are q ue corre m , ne ce s s itam de actual izaçõe s com al gum a fre q uência. Ne s te cas o a m onitorização é tam bém útilpara de te rm inar s e um a m áq uina e s tá com probl e m as , is to é crítico para um ne gócio q ue te m de e s tar a corre r 24 h oras por dia.

tutorial

O nam e s pace Sy s te m .D ata.Sq l Cl ie nt dá-nos ace s s o a todas as cl as s e s q ue corre s ponde m ao provide r para o SQ L Se rve r, pe rm itindo-nos as s im a l igação ao s e rvidor, e xe cução de com andos , l e itura dos dados , e tc, tudo is to com as s uas cl as s e s incl uídas . Para e xe m pl ificarm os a util ização de s tas cl as s e s , ire m os cons ide rar um a s ituação não re al :

Vis ualBas ic .NET 5ª Parte Com o foi re fe rido no artigo ante rior, o te m a de s ta e dição é re l acionado com bas e de dados , m ais concre tam e nte , ire m os fal ar s obre a m anipul ação de dados e ntre o VB.NET (h ttp://m s dn2.m icros oft.com /e n-us / vbas ic/de faul t.as px) e o M S SQ L Se rve r 2005™ (h ttp://w w w .m icros oft.com /s q l ). O AD O .NET é um m ode l o de ace s s o de dados (s uce s s or do AD O – Acce s s D ata O bje ct) q ue nos forne ce o ace s s o a variados “data s ource s ” com o por e xe m pl o ao M S SQ L Se rve r 2005, q ue é o q ue vam os util izar para os e xe m pl os ne s te artigo. As cl as s e s do AD O .NET e s tão re fe re nciadas no nam e s pace Sy s te m .D ata m as ne s te artigo vam os util izar o nam e s pace Sy s te m .D ata.Sq l Cl ie nt.

<31>

“No s ite da Re vis ta Program ar e s tão l is tadas todas as e diçõe s l ançadas até ao m om e nto. Um a apl icação foi de s e nvol vida para pe rm itir a ins e rção, al te ração e re m oção das e diçõe s por u m adm inis trador q u e a te nh a ins tal ada no s e u com pu tador. Todos e s te s dados e s tão arm aze nados nu m a bas e de dados e m M S SQ L Se rve r 2005.” A bas e de dados util izada irá conte r ape nas 2 tabe l as . Um a arm aze na as e diçõe s já l ançadas e a outra contém todos os com e ntários ins e ridos pe l os vis itante s . Para pode rm os com unicar com a bas e de dados q ue criam os pre cis am os de e s tabe l e ce r um a l igação e ntre a nos s a apl icação e o SG BD . O obje cto Conne ction é us ado e ntão ne s ta s ituação, pe rm itindonos com unicar com a bas e de dados util izando cl as s e s com o a Sq l Conne ction.

tutorial Dim ligacao As SqlConnection = New SqlConnection("Data Source=XPTO; Initial Catalog=RevistaProgramar;User Id=SA;Password=XPTO;") Try ligacao.Open() Console.WriteLine("A ligação teve sucesso") Console.ReadLine() Catch Console.WriteLine("Erro na ligação") End Try

Na de cl aração da Sq l Conne ction pre cis am os tam bém de indicar um a Conne ctionString2, us ada para e s tabe l e ce rm os a l igação à bas e de dados e m q ue s tão. Data Source=XPTO;Initial Catalog=RevistaProgramar;User Id=SA;Password=XPTO;

Es tabe l e cida a l igação à bas e de dados é dados . Para is s o pre cis am os de us ar a cl as s e m e s m o apagar os nos s os dados da bas e de um a e xpre s s ão e m T-SQ L ou e ntão um Store dados e um a l igação (Sq l Conne ction)

te m po de com e çar a m anipul ar os nos s os Sq l Com m and para ins e rir, actual izar ou até dados . Com e s ta cl as s e pode m os as s ociar d Proce dure a s e r e xe cutado na bas e de

SqlCommand(“Expressão T-SQL ou Stored Procedure”, SqlConnection)

Para e xe cutarm os o Sq l Com m and pode m os Exe cute Re ade r() e Exe cute Scal ar().

us ar os

m étodos

Exe cute NonQ ue ry (),

Exe cute NonQ ue ry : Exe cuta a e xpre s s ão e de vol ve o núm e ro de l inh as afe ctadas na bas e de dados Exe cute Re ade r: Exe cuta a e xpre s s ão e cons trói um Sq l D ataRe ade r com os dados de vol vidos

Exe cute Scal ar: Exe cuta a e xpre s s ão e de vol ve o val or da prim e ira col una na prim e ira l inh a dos re s ul tados de vol vidos . (Es te m étodo é norm al m e nte util izado q uando te m os um a e xpre s s ão q ue de vol ve val ore s agre gados com o por e xe m pl o “SELECT CO UNT(*) FRO M tabe l a”.)

Proce dim e ntos : •Ins e rir Edição Private Sub InserirEdicao() Dim ligacao As SqlConnection Dim cmdInserir As SqlCommand Dim NrLinhasAfectadas As Integer = 0 Try ligacao = New SqlConnection("Data Source=XPTO;InitialCatalog=RevistaProgramar; User Id=SA;Password=XPTO;") cmdInserir = New SqlCommand("INSERT INTO Edicoes(Nr_Edicao,Titulo,Data) VALUES(@nr,@titulo,@data)", ligacao)

<32>

tutorial cmdInserir.Parameters.Add("@nr", SqlDbType.Int, 4).Value = Convert.ToInt32( txtNumero.Text) cmdInserir.Parameters.Add("@titulo", SqlDbType.VarChar, 255).Value = txtTitulo.Text cmdInserir.Parameters.Add("@data", SqlDbType.DateTime).Value = Convert. ToDateTime(txtData.Text) ligacao.Open() NrLinhasAfectadas = cmdInserir.ExecuteNonQuery() If NrLinhasAfectadas > 0 Then MessageBox.Show("O registo foi inserido com sucesso", "P@P", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) ListarEdicoes() Else MessageBox.Show("Não foi possível inserir o registo. Tente novamente.", "P@P", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Catch ex As Exception MessageBox.Show(ex.ToString) Finally ligacao.Close() End Try End Sub •Al te

rar Edição

Private Sub AlterarEdicao() Dim ligacao As SqlConnection Dim cmdAlterar As SqlCommand Dim NrLinhasAfectadas As Integer = 0 Try ligacao = New SqlConnection("Data Source=XPTO;InitialCatalog=RevistaProgramar; User Id=SA;Password=XPTO;") cmdAlterar = New SqlCommand("UPDATE Edicoes " & "SET Nr_Edicao = @nr,Titulo = @titulo, Data = @data " & "WHERE ID = " & Convert.ToInt32( dgvEdicoes.CurrentRow.Cells("ID").Value), ligacao) cmdAlterar.Parameters.Add("@nr", SqlDbType.Int, 4).Value = Convert.ToInt32( txtNumero.Text) cmdAlterar.Parameters.Add("@titulo", SqlDbType.VarChar, 255).Value = txtTitulo.Text cmdAlterar.Parameters.Add("@data", SqlDbType.DateTime).Value = Convert.ToDateTime(txtData.Text) ligacao.Open() NrLinhasAfectadas = cmdAlterar.ExecuteNonQuery()

<33>

tutorial If NrLinhasAfectadas > 0 Then MessageBox.Show("O registo foi alterado com sucesso", "P@P", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) ListarEdicoes() Else MessageBox.Show("Não foi possível alterar o registo.", "P@P", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Catch ex As Exception MessageBox.Show(ex.ToString) Finally ligacao.Close() End Try End Sub

•Re m ove r Edição Private Sub RemoverEdicao() Dim ligacao As SqlConnection Dim cmdRemover As SqlCommand Dim NrLinhasAfectadas As Integer = 0 Try ligacao = New SqlConnection("Data Source=XPTO;Initial Catalog=RevistaProgramar; User Id=SA;Password=XPTO;") cmdRemover = New SqlCommand("DELETE FROM Edicoes " & "SET Nr_Edicao = @nr,Titulo = @titulo, Data = @data " & "WHERE ID = " & Convert.ToInt32( dgvEdicoes.CurrentRow.Cells("ID").Value), ligacao) cmdRemover.Parameters.Add("@nr", SqlDbType.Int, 4).Value = Convert.ToInt32(txtNumero.Text) cmdRemover.Parameters.Add("@titulo", SqlDbType.VarChar, 255).Value = txtTitulo.Text cmdRemover.Parameters.Add("@data", SqlDbType.DateTime).Value = Convert.ToDateTime(txtData.Text) ligacao.Open() NrLinhasAfectadas = cmdRemover.ExecuteNonQuery() If NrLinhasAfectadas > 0 Then MessageBox.Show("O registo foi removido com sucesso", "P@P", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) ListarEdicoes() Else MessageBox.Show("Não foi possível remover o registo.", "P@P", MessageBoxButtons.OK, MessageBoxIcon.Error) End If Catch ex As Exception MessageBox.Show(ex.ToString) Finally ligacao.Close() End Try End Sub

<34>

tutorial Com o pode m ve r, e s ta é um a m ane ira s im pl e s de e nviar pe didos à bas e de dados para e xe cutar al go. Um a técnica m uito us ada, é o us o de parâm e tros nos Sq l Com m ands de form a a s im pl ificar e cl arificar o nos s o código. Em ve z de te rm os a tare fa de concate nar s trings , com o por e xe m pl o, “SELECT * FRO M tabe l a W H ERE Id=” & variave l _id & “ Nom e =’” & variave l _nom e & “’”, o q ue faria com q ue um a e xpre s s ão m ais e xte ns a s e torna-s e bas tante confus a, pode m os as s ociar ao Sq l Com m and um ou vários parâm e tros (Sq l Param e te r). cmdInserir.Parameters.Add("@nr", SqlDbType.Int, 4).Value = Convert.ToInt32(txtNumero.Text)

de : Proce dim e nto “Ins e rir Edição” Um Sq l Param e te r na s ua de cl aração m ais s im pl e s , pode conte r um nom e (“@ nr”), o tipo de dados (Sq l D bTy pe .Int) e um tam anh o (4). O nom e do parâm e tro é de pois us ado na e xpre s s ão TSQ L com o val or atribuído na proprie dade Val ue . Ne s ta s ituação, trata-s e de um parâm e tro com a dire cção de Input. Após e ntão e xe cutarm os o com ando, te m os de pois q ue nos ce rtificar q ue tudo corre u com o pre vis to e s e o q ue pre te ndíam os foi re al m e nte e xe cutado. Com o re fe rim os e m cim a, o m étodo Exe cute NonQ ue ry () de vol ve o núm e ro de l inh as q ue foram afe ctadas na e xe cução de um a e xpre s s ão. A variáve l“NrLinh as Afe ctadas ” arm aze na e ntão e s s a inform ação, bas tando e ntão s e r igual ada ao m étodo re fe rido. NrLinhasAfectadas = cmdInserir.ExecuteNonQuery() If NrLinhasAfectadas > 0 Then MessageBox.Show("O registo foi inserido com sucesso", "P@P", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)

de : Proce dim e nto “Ins e rir Edição” Para pode rm os al te rar ou re m ove r um a e dição, pre cis am os de indicar à nos s a apl icação q ual é o núm e ro do s e u re gis to de form a a e xe cutar am bas as e xpre s s õe s corre ctam e nte . Com o pude m os ve rificar no proce dim e nto Al te rarEdicao() e Re m ove rEdicao, te m os as s e guinte s e xpre s s õe s as s ociadas aos com andos : UPD ATE Edicoe s "& _ "SET Nr_Edicao = @ nr,Titul o = @ titul o, D ata = @ data "& _ "W H ERE ID = "& Conve rt.ToInt32(dgvEdicoe s .Curre ntRow .Ce l l s ("ID ").Val ue ) D ELETE FRO M Edicoe s "& _ "SET Nr_Edicao = @ nr,Titul o = @ titul o, D ata = @ data "& _ "W H ERE ID = "& Conve rt.ToInt32(dgvEdicoe s .Curre ntRow .Ce l l s ("ID ").Val ue ) Es te ID é atribuído pe l o val or arm aze nado da col una com o nom e “ID ” e na l inh a se l e ccionada do com pone nte D ataG ridVie w (dgvEdicoe s ), com pone nte e s te q ue nos pe rm itir l is tar todos os re gis tos da tabe l a Ediçõe s .

<35>

tutorial Proce dim e nto Lis tarEdicoe s () Private Sub ListarEdicoes() Dim ligacao As SqlConnection Dim daEdicoes As SqlDataAdapter Try ligacao = New SqlConnection("Data Source=XPTO;Initial Catalog=RevistaProgramar; User Id=SA;Password=XPTO;") daEdicoes = New SqlDataAdapter("SELECT * " & "FROM Edicoes", ligacao) Dim dsEdicoes As DataSet = New DataSet daEdicoes.Fill(dsEdicoes, "Edicoes") dgvEdicoes.DataSource = dsEdicoes Catch ex As Exception MessageBox.Show(ex.ToString) Finally ligacao.Close() End Try End Sub

Ne s te proce dim e nto faze m os us o dos obje ctos D ataSe t e D ataAdapte r. Pode m os cons ide rar o D ataSe t com o um conjunto de dados , talcom o as e s truturas das bas e de dados , pe rm itindo as s im um a m aior facil idade na m anipul ação dos dados , te ndo tam bém com o vantage ns a não ne ce s s idade de e s tar com um a l igação activa à bas e de dados , e a não inte racção dire cta com a nos s a fonte de dados . O D ataAdapte r por s ua ve z, é a ponte de l igação e ntre a nos s a bas e de dados e o D ataSe t. Para e s ta s ituação, util izám os o Sq l D ataAdapte r e as s ocíam os um com ando com um a e xpre s s ão T-SQ Lpara nos de vol ve r a l is ta das e diçõe s ins e ridas na bas e de dados . Após is s o, us ám os o m étodo Fil l , q ue vai pre e nch e r o D ataSe t com os re s ul tados de vol vidos , pode ndo as s im de finir o nos s o D ataSe tcom o o D ataSource da D ataG ridVie w q ue vai m os trar as e diçõe s . Fe ito is to, te m os final m e nte a nos s a apl icação a funcionar corre ctam e nte , com a l is tage m das e diçõe s e a pos s ibil idade de ins e rir, al te rar e re m ove r e diçõe s . O proje cto de de m ons tração e ncontra-s e dis poníve le m :

Tiago Sal gado

h ttp://w w w .portugal -a-program ar.org/artigos /vb5.rar

<36>

gnu/l inux Ante riorm e nte à e s crita de s te artigo não e xis tia um a ve rs ão portugue s a de s te program a. No e ntanto, os m e m bros de s ta re vis ta diponibil izaram -s e , e , e xis te agora um a tradução dis poníve lq ue facil itará a util ização do program a e m m odo gráfico.

D e pe ndências

G ravação do D e s k top Q uantas ve ze s q uis criar um tutorialcom a s ua dis tro de G NU/Linux ou a e s cre ve r um código q ue q ue ria partil h ar e , e m ve z de o apre s e ntar com im age ns e com e ntários , pe ns ou e m gravar um víde o cons igo a com e ntá-l o? Criar um proje cto para a e s col a ou unive rs idade e m q ue um víde o s e ria m ais fácile prático de apre s e ntar? Criar um víde o para um a pl ataform a de e Le arning ou bLe arning?O u s im pl e s m e nte , para m os trar aos am igos os e fe itos 3D do s e u D e s k top? Ne s te artigo irá s e r apre s e ntada um a s ol ução para tal . O program a us ado é o re cordM y D e s k top.

re cordM y D e s k top O re cordM y D e s k top é um program a criado Joh n Varouh ak is , program ado e m C, l ançado e m 12 de Jul h o de 2006 (data da ins crição do proje cto no Source Forge ) e dis poníve l para dow nl oad em h ttp://re cordm y de s k top.s ource forge .ne t. A l ice nça de s te s oftw are é G PL (G NU Publ ic Lice ns e ). Es tá de m om e nto e m e s tado al ph a, m ais concre tam e nte na ve rs ão 0.3.1. Ape s ar do program a originals e r e m m odo te xto e xis te um a ve rs ão gráfica us ando a pl ataform a G TK .

<37>

•l ibas ound2 (> 1.0.10) •l ibc6 (> =2.3.2.ds 1-21) •l ibice 6 •l ibogg0 (> =1.1.2) •l ibs m 6 •l ibth e ora0 •l ibvorbis 0a (> =1.1.0) •l ibvorbis e nc2 (> =1.1.0) •l ibvorbis fil e 3 (> =1.1.0) •l ibx11-6 •l ibxdam age 1 •l ibxe xt6 •l ibxfixe s 3 •zl ib1g (> =1:1.2.1)

Com andos A form a ge nérica de e xe cutar o program a é: $ recordmydesktop

Is to irá gravar um fich e iro com o nom e out.ogg na s ua pas ta h om e . Para parar a gravação s im pl e s m e nte cl iq ue Ctrl+ C. Para de finir o nom e do fich e iro e /ou a l ocal ização bas ta: $ recordmydesktop /home/user/video.ogg

O program a tam bém pe rm ite de finir áre as a s e r gravadas . As s im pode us ar-s e : $ recordmydesktop -x x-pos -y y-pos -width largura -height altura -o video.ogg

Tanto a opção x-pos com o a opção y-pos re fe re m -s e à dis tância e m pixe l s a partir do canto s upe rior e s q ue rdo.

gnu/l inux As opçõe s l argura e al tura re fe re m -s e , com o o próprio nom e indica, à al tura e l argura da jane l a a s e r gravada. Se o tam anh o da jane l a ins e rido for m aior q ue o da re s ol ução actual , s e rá notificado e nada aconte ce rá. Por e xe m pl o s e fos s e de finido com as s e guinte s opçõe s :

Para o program a codificar o víde o à m e dida q ue vai gravando pode us ar a opção --on-th e -fl y-e ncoding. Is to irá e xigir m ais do proce s s ador, l ogo us e e s ta opção ape nas s e tive r um a boa m áq uina q ue ague nte as e xigências no proce s s am e nto víde o.

$record recordmydesktop -x 348 -y 235 -width 494 -height 364 -o video.ogg

A q ual idade do víde o é de finida pe l o s e guinte com ando e m q ue n é e ntre 0 e 63(de faul t):

G ravaria ape nas e s ta parte de um D e s k top:

$ recordmydesktop -v_bitrate n

Para de finir um atras o a iniciar a gravação bas ta us ar: $ recordmydesktop t[h/m]

Com o de faul t t as s um e o val or e m s e gundos (bas ta pôr um núm e ro). No e ntanto s e q uis e r us ar um atras o de h ou m inutos bas ta adicionar a l e tra corre s ponde nte a s e guir ao núm e ro. Exe m pl o: 5m , 1h .

Para s e te r um curs or dife re nte pode us ar-s e : $ recordmydesktop -dummy-cursor cor

O val or cor pode s e r bl ack (pre to) ou w h ite (branco). Irá s ubs tituir o s e u curs or por um curs or pe q ue no da cor de finida. Ide alpara pas s ar de s pe rce bido. Pode ainda s e r de finido o núm e ro de fram e s por s e gundo (N) com o s e guinte com ando: $ recordmydesktop -fps N

Para não us ar s om na s ua gravação ape nas te m de adicionar a opção --nos ound.

<38>

Para gravar o D e s k top com o com piz ou be ry lé ne ce s s ário tam bém us ar a opção -ful l -s h ots q ue tira um a Scre e nSh ot a cada fram e .

M odo gráfico

gnu/l inux D e pe ndências

•re cordm y de s k top •xbas e -cl ie nts •py th on-gtk 2 •py th on-gnom e 2e xtras •py th on

Com o m odo gráfico o program a fica bas tante m ais prático e fácilde us ar. Para se l e ccionar um a parte da jane l a bas ta cl icar na im age m e arras tar até onde pre te ndido. Todas as opçõe s e s tão tam bém dis poníve is no m e nu "Advance d". No finalda gravação, bas ta cl icar no ícone na form a de um q uadrado q ue irá e s tar col ocado na áre a de notificação do s e u D e s k top.

G ravar com s om O re cordM y D e s k top te m a pos s ibil idade de gravar com s om . No e ntanto, ne m todos nós gos tam os de fal ar e nq uanto criam os o tutorial . Por is s o, m uitas ve ze s o m e l h or é faze r o víde o s il e ncios am e nte , e m ais tarde adicionar o s om . Para tale xis te m variados program as com o por e xe m pl o o G ravador de Som do G NO M E e o Audacity.

Le ge ndando o tutorial

Concl uindo o s e u víde o O form ato .ogg, ape s ar de s e r um form ato ope n-s ource e tão bom com o outros , não é m uito us ado na ge ne ral idade . Por is s o o mel h or é tal ve z conve rte r o s e u víde o para avi, q ue é um form ato m ais conh e cido e para al ém dis s o torna o víde o um pouco m ais pe q ue no. Para talpode us ar o m e ncode r, um pacote do program a m pl ay e r. Bas ta us ar: $ mencoder -idx video.ogg -ovc lavc oac mp3lame -o video-saida.avi

Para adicionar o s om pode s e r us ado o m e ncode r com o com ando -audiofil e , com o por e xe m pl o: $ mencoder -idx out.ogg -ovc lavc oac mp3lame -audiofile som.mp3 -o video-saida.avi

Bas ta te r o fich e iro m p3 (ou outro form ato de s om ) q ue o m e ncode r faz o trabal h o. No fim de e xe cutar todos e s te s pas s os te rá o s e u víde o pronto a s e r partil h ado, pode ndo s e r vis to, ouvido e l ido por todos s e m re s triçõe s al gum as .

Joe lRam os

Por ve ze s , por um a q ue s tão de ace s s ibil idade a todas as pe s s oas , o m e l h or é l e ge ndar o tutorial . Exis te m várias opçõe s , por e xe m pl oo Jubl e r, o Sabbu e o Subtitl e Editor. Ve jam os al guns as pe ctos do Subtitl e Editor. O Subtitl e Editor é um program a grátis prote gido pe l a l ice nça G PLpara e ditar facil m e nte l e ge ndas .

Pode s e r us ado para criar novas , para e ditar, para corrigir ou para s incronizar. Es te program a te m um gráfico do e s pe ctro de áudio o q ue facil ita e m m uito o trabal h o de s incronizar um a l e ge nda. Com e s te gráfico do e s pe ctro de áudio pode ve rificar-s e as e ntradas do s om , e as s im , faze r um a l e ge ndage m de form a corre cta e fácils e m ve rificar tantas ve ze s o fil m e poupando te m po.

<39 >

anál is e s

D e s e nvol vim e nto O rie ntado por O bje ctos João H ug o M iranda Jos é A ntonio A l m e ida Editora: Ce ntroAtl antico.pt Col e cção: Te cnol ogias

Páginas : 232 1ª e dição: O utubro de 2005 ISBN: 9 89 -615-013-3

"D e s e nvol vim e nto orie ntado por obje ctos D om ain-D rive n D e s ign, Te s te s Unitários e Re factoring", de João H ugo M iranda e Jos é António Al m e ida, e ditado pe l o Ce ntroAtl ântico.pt, é um l ivro q ue foca te m as e conce itos e m voga na áre a da e nge nh aria de s oftw are , com o o conce ito de obje ctos , dom ain-drive n de s ign, de s e nvol vim e nto te s tdrive n, de s e nvol vim e nto de inte rface s de util ização e re factoring. Q ue m q uis e s s e e s tudar e s tas te m áticas te ria de re corre r a l ivros e s critos e m ingl ês , vis to q ue não e xis tiam praticam e nte re fe rências ne nh um as e m l íngua nacional . O l ivro aborda, portanto, te m as cons ide rados de níve linte rm édio-avançado de form a s im pl e s, pragm ática e e s tim ul ante até para os iniciante s , al argando as s im o públ ico al vo da obra. Se gue um e s til o re fl e xivo e por ve ze s tam bém didáctico.

<40>

Para al ém de e xpore m factos e abordage ns , os autore s contam h is tórias , apre s e ntam e xe m pl os práticos , re fl e cte m e dis cute m os factos . A obra re l aciona ainda o paradigm a dos obje ctos com as práticas de program ação m ais re ce nte s e de m ons tra q ue a anál is e , de s e nh o e a codificação de um s is te m a de inform ação não de ve m s e r actividade s s e paradas , com o é m uito us ualaconte ce r. O l ivro faz com q ue o l e itor s e s inta inte re s s ado com e s te s te m as , já q ue apre s e nta e xe m pl os do dia-a-dia de um program ador, e xce rtos de código de vidam e nte com e ntados , diagram as e e s q ue m as fe itos por profis s ionais . O s e xe m pl os s ão e m C# , m as q ual q ue r pe s s oa com conh e cim e ntos m ínim os de program ação de ve rá s e gui-l os s e m dificul dade . É re com e ndado a e s tudante s de program ação e program adore s profis s ionais , obviam e nte . Pode ainda s e r re com e ndado a ge s tore s de proje ctos , anal is tas ou re s pons áve is técnicos já q ue parte do te xto, e s pe cial m e nte os prim e iros capítul os , e s tabe l e ce o e nq uadram e nto conce ptual das te m áticas de batidas ao l ongo dos re s tante s capítul os .

Rui M aia

Se o l e itor não s oube r o q ue é de s e nvol vim e nto orie ntado a obje ctos , dom ain-drive n de s ign ou re factoring e tive r curios idade e m apre nde r s obre e s te s te m as , e ntão e s te l ivro é para s i. Se , incl us ivé, for um program ador q ue não s aiba e xactam e nte com o pl ane ar um proje cto q ue pre te nda com e çar, e ntão vai e ncontrar m uitas re s pos tas ne s te l ivro.

inte rne t

G oog l e apre s e nta os 10 te rm os m ais procu rados de 2006 O m ais fam os o m otor de bu s ca da inte rne t continu a a tradição anu al de pu bl icar os de z te rm os m ais pe s q u is ados no s e u s ite . A s du as pal avras m ais pe s q u is adas foram Be bo e M y S pace , dois portais de com u nidade s a criação de pág inas pe s s oais e afins , s e g u idas pe l os fanáticos do fu te bolcom "W orl d C u p". O víde o onl ine tam bém m arca pre s e nça nas pe s q u is as dos inte rnau tas , no 4º l u g ar com o s ite M e tacafe e e m 7º com a pal avra Vide o. Para m ais inform açõe s : h ttp://w w w .g oog l e .com /intl /e n/pre s s /ze itg e is t2006.h tm l

1. Be bo 2. M y S pace 3. W orl d Cup 4. M e tacafe 5. R adiobl og 6. W ik ipe dia 7. Vide o 8. R e be l de 9 . M ininova 10. W ik i

Re gis to de m arcas onl ine Foi dis ponibil izado dia 22 de D e ze m bro do pre s e nte ano um a nova áre a no portal do Ins tituto Nacional da Proprie dade Indus trial (INPI), e ntidade re s pons áve l pe l o re gis to de m arcas , pate nte s e afins , q ue pe rm ite o re gis to M arcas , D e s igns e Inve nçõe s . Es te s is te m a pas s a a s e r m ais cóm odo para o util izador, vis to não pre cis ar de s air de cas a ne m de tratar de pape l ada e s im ul tane am e nte m ais barato.

h ttp://w w w .inpi.pt

Th e CSS Pow e r H á al gum te m po atrás , foi apre s e ntado no fórum do Portugal -a-Program ar um s ite bas tante inte re s s ante para todos os program adore s w e b q ue q ue re m apre nde r CSS e /ou trabal h am com e l e re gul arm e nte , fal o do s ite M aujor (h ttp://w w w .m aujor.com /). Es pantos o. Is to é o pe ns am e nto q ue m uitos pode rão te r ao abrir e s te s ite , e e xpl ico o porq uê: grande q uantidade de inform ação, fiáve le , principal m e nte , e m Português . É ce rto q ue é português do Bras il , m as ainda h á e s pe rança q ue s e de s e nvol va um a pl ataform a as s im e m Portugal . Ficam os à e s pe ra...

<41>

bl ue s cre e n

Nova am e aça aos M acs

D ificul dade s e m l argar o com putador nas férias ... Novo gadge tpara a fam íl ia iPod

Te cl ado l 33t <42>

com unidade

a iniciar um novo ano e e s ta cos tum a s e r um a época propícia às re fl e xõe s e à intros pe cção: ol h am os para o q ue fize m os ante riorm e nte e anal is am os de acordo com o q ue pre te nde m os faze r no futuro. É um a al tura do ano e m q ue , pe l o facto de e s tarm os no início, nos s e ntim os re novados , prontos a e nfre ntar tudo outra ve z s e re al m e nte tive r de s e r. D e pois das fe s tas de Natale do Ano Novo, Jane iro ch e ga e m força e re faze m -s e os pl anos , re novam -s e os obje ctivos . Is to aconte ce principal m e nte com as (grande s ) com unidade s . O ra, num a conve rs a com um m e m bro do s taffdo P@ P e m finais de D e ze m bro, nos dias após o Natale ante s de ch e gar o Ano Novo, re fl e cti s obre um as s unto e m q ue já tinh a pe ns ado ante riorm e nte , m as não do ponto de vis ta pe s s oal com o aconte ce u ne s ta dis cus s ão. O m e u col e ga pe rguntou-m e q ue obje ctivos , q ue m e tas pre te ndia e u atingir e nq uanto adm inis trador do P@ P. D e facto, ponde re i bas tante na q ue s tão e ach e i q ue podia re s ponde r e xactam e nte com o q ue tinh a col ocado nos tópicos q ue apre s e nte i ao s taff, m as q uando ia com e çar a e s cre ve r note i q ue a pe rgunta s e dirigia m ais ao q ue e u ach ava e m e nos ao q ue a com unidade re al m e nte ne ce s s itava. Com e ce i e ntão por re s ponde r q ue q ue ro faze r com q ue os program adore s do P@ P pas s e m o m áxim o te m po pos s íve la trabal h ar no fórum , is to é, pre te ndo criar condiçõe s para q ue daq ui com e ce m a s urgir trabal h os s érios e be m organizados . O m e u col e ga com e ntou q ue e ra um a tare fa difícil , q ue ia e nvol ve r m ais ge nte a trabal h ar de pe rto com igo ou e ntão m ais trabal h o para os actuais m e m bros do s taff. Eu não pude dis cordar, pe l o q ue continue i a s onh ar al to: dis s e q ue e m 2007 gos tava q ue s urgis s e o prim e iro concurs o de program ação do P@ P, patrocinado com prém ios de um a e m pre s a a de s ignar (um a das e m pre s as das parce rias ) e q ue gos tava de criar um e ve nto no Ve rão do géne ro G oogl e Sum m e r of Code , m as e xcl us ivo para m e m bros do P@ P.

<43>

O m e u col e ga afirm ou q ue e s te s dois "sonh os "s ó pode riam avançar s e re al m e nte cons e guis s e re al izar o prim e iro, o s onh o de criar condiçõe s para por os program adore s do P@ P a trabal h ar e m pl ataform as da com unidade . M ais um a ve z, não pude dis cordar. Final m e nte , dis s e q ue outro grande obje ctivo m e u e nq uanto adm inis trador da com unidade e ra faze r com q ue os proje ctos agora e m arranq ue ficas s e m a trabal h ar a todo o gás até ao fim do prim e iro s e m e s tre de 2007. Se ria um avanço fabul os o e daria ânim o e m uita vontade ao s taff e m ais pos s ibil idade s aos util izadore s q ue q uis e s s e m participar. O col e ga com q ue m m antinh a a conve rs a pe rguntou e ntão s e não ia fal ar do cre s cim e nto de util izadore s do fórum , s e não ia m ais um a ve z apontar dados e s tatís ticos . Eu re s pondi q ue , no cas o de cons e guir re al izar e s te s m e us s onh os e nq uanto adm inis trador da com unidade , todas as e s tatís ticas "fal ariam "de s uce s s o e de pros pe ridade e e ntão podíam os com parar com o ano 2006 e pre ve r 2008. Aconte ce q ue e s te s m e us de s e jos não s ão de m odo al gum a prioridade do s taff do P@ P . Aponto, m ais um a ve z, a dife re nça e ntre obje ctivos da com unidade de obje ctivos pe s s oais e nq uanto adm inis trador da com unidade . No e ntanto, s onh ar é o prim e iro pas s o para a s atis fação pe s s oale e s pe ro q ue não s e ja o úl tim o, no nos s o cas o. Es pe ro q ue e m 2007 pos s am os todos s onh ar uns com os outros , m as m ais do q ue is s o, trabal h ar no s e ntido de re al izar os nos s os de s e jos . Es pe ro ainda q ue daq ui a s e ns ive l m e nte um ano, te nh am os todos um grande s orris o na cara e e s te jam os prontos a e ncarar outros voos , outros s e ntidos s e m pre na dire cção da re al ização pe s s oal e com unitária. Até l á, e s pe ro q ue te nh am um 2007 ch e io de bons m om e ntos e q ue traga pros pe ridade a 2008. Um grande abraço, e m nom e do s taffdo P@ P .

Rui M aia

Es tam os

Q ue re s participar na re vis ta PRO G RAM AR?Q ue re s inte grar e s te proje cto, e s cre ve r artigos e ajudar a tornar e s ta re vis ta num m arco da program ação nacional ? Vai a

w w w .re vis ta-program ar.info para m ais inform ação com o participar ou e ntão contacta-nos por

re vis taprogram ar

@ portugal -a-program ar.org Pre cis am os do apoio de todos para tornar e s te proje cto ainda m aior... contam os com a tua ajuda

A Re vis ta PRO G RAM AR é um proje cto da com unidade Portugal -a-Program ar

w w w .portugal -a-program ar.org w w w .re vis ta-program ar.info

Related Documents

Revista Programar 6
December 2019 32
Revista Programar 3
December 2019 42
Revista Programar 15
December 2019 33
Revista Programar 17
December 2019 36
Revista Programar 16
October 2019 30
Revista Programar 4
December 2019 38

More Documents from "Marcelo"