Revista Programar 6

June 4, 2018 | Author: Marcelo | Category: Computer Architecture, Computing, Technology, Areas Of Computer Science, Computer Engineering
Report this link


Description

e dit orialíndice 3 not ícias 4 t m a de capa e 11 a program ar 24 s e gurança 28 t cnol e ogias 31 t orial ut 37 gnu/inux l 40 anále s is 41 int rne t e 42 bl s cre e n ue 43 com unidade e q u ipa P O G R A M A R R adm inis t ração Rui M aia D avid P as s ilo int g coorde nador S érg io S ant os Um ano, s e is e diçõe s Es t s e xt e dição m arca o f a a inaldo prim e iro ano da Re v t is a P G RAM AR. P RO ara nós t a-s e de um f it para al de t rm os rat e o, ém e cons e guido e dit s e is e diçõe s , o f o de o proj ct t r ar act e o e cre s cido de e dição para e dição, com m ais e m e lore s art , h igos m ais part icipant s e , principal e nt , m ais lit s . M uit v ze s , e m e e ore as e ne s t t de proj ct o m ais dif não é re unir um conj o de e ipo e o, ícil unt art igos e f ar um a re v t é cons e guir m ant r o proj ct orm is a, e e o act o e , s e pos s ív le m e v ução, na dire cção dos lit s . iv e , ol e ore Ne s t e dição cont os com um t m a de capa m ais e xt ns o q ue a am e e o norm al v age ns de s e r um a re v t onl , s e m , ant is a ine re s pons abil idade s para com e dit oras . Es pe ram os q ue o t m a s e j e a do v s o agrado e , cas o s e j de s conh e cido, o q ue de v rá os a e acont ce r ainda para m uit , q ue abram a m e nt e e os e e xpe rim e nt m um a nov m ane ira de v r a program ação, ne m e a e q ue s e j pe l f os q ue de l pode rão e xt f uram e nt . T m os a os rut a rair ut e e t bém um a nov s e cção, " gurança" q ue s urge na am a Se , cont inuação do t rabalo e f ct h e uado na t rce ira e dição da re v t e is a. Ne s t e m om e nt o cons e guim os at ingir um a v dade arie cons ide ráv l e m uit apre ciada de nt do nos s o grupo de e o ro re dact s e cont ore inuam os à procura de nov t m as para os e abordar, nov s e cçõe s para acre s ce nt e nov ide ias para as ar as apl icar, e t odos os nov m e m bros q ue s e j am a nós t os unt raze m s e m pre nov opiniõe s ao grupo. as coorde nador adj o unt M ig ue l ais P re dacção M igue l ah non W F ábio Corre ia D iogo Ale s v João M at os F ábio P dros a e P dro V rrum e e e L Re nt uís e Tiago Sal gado Joe l Ram os col aboradore s Rui G onçal s ve D anie l Corre ia Jos é O l ria ive cont o act w e bs it e w w w .re vis t a-prog ram ar.inf o <2 > Sérgio Sant os re vis t aprog ram ar @ port al ug -a-prog ram ar.org not ícias O s principiais acont cim e nt e os t cnol e ógicos de 2006 2006 ch e gou ao f e a re v t P im is a rogram ar re corda as nov idade s m ais im port e s do ant ano q ue agora t rm inou. e O ano com e çou com um a re v ução na ol Appl. D e pois de um a década a us ar e P e rP a e m pre s a de St v Jobs re s ole u ow C, e e v m udar para a arq uit ct e ura da I e l Ape s ar nt . do de s e m pe nh o dos nov os m acs t r e m e lorado s ignif iv e nt , e s t prim e iro h icat am e e ano f ica m arcado por al guns problm as e de s obre aq ue cim e nt do proce s s ador Em o . Abrila Appl apre s e nt t bém o B e ou am oot Cam p, um s ofw are q ue pe rm it aos nov t iu os com put adore s corre re m nat am e nt iv e W indow s . Na áre a dos proce s s adore s f t bém um oi am ano agit ado, inicial e nt com a AM D a m e cons e guir am e açar o dom ínio da I e l nt , s obre t udo nos s e rv idore s com os O pt ron. A e I e l re s ponde u com o l nt ançam e nt dos o Core 2 D uo, q ue le pe rm it re gre s s ar à h iu l rança no pode r de proce s s am e nt ide o. Tiv m os e t bém am a pas s age m da t cnol e ogia de 9 0 nm para 65, prim e iro por part da I e le no f do ano pe l AM D . e nt , im a No q ue diz re s pe it aos brow s e rs , s urgiram o igual e nt nov m e idade s , prim e iro com o l ançam e nt do I 7 da M icros of, de pois o E t com a F undação M ozil a l l a ançar o F f ire ox 2.0. Es t nov v rs õe s t as as e rouxe ram v árias nov idade s , das q uais s e de s t aca o f t ant il ro iph is h ing, de not ando a cada v z m aior e pre ocupação com a s e gurança por part e dos produt s de s ofw are . ore t D e pois de m uit as prom e s s as , a Sun f m e nt abriu o código do Jav inal e a. As pl af as J2SE e J2M E e ncont at orm ram -s e agora s ob a l nça G P , ace s s ív is a t ice L e odos . D e pois de s uce s s iv adiam e nt , o V t f os os is a oi f m e nt l inal e ançado. Com um v ualm uit is o at ract o, o nov SO da M icros of t iv o t rouxe t bém am nov idade s a nív l da s ua e organização, do s is t m a de f e iros e da e ich s e gurança. O ut ra nov idade f oi a capacidade de s e adapt ao h ardw are ar da m áq uina e m q ue é ins t ado, al pe rm it indo de s t f a q ue t bém pos s a a orm am s e r us ado e m P C's com m e nore s re curs os de h ardw are . Em 2006 as s is t os ao l im ançam e nt de duas o nov cons ol , a W ii e a P as as S3. T com o al s e ria de e s pe rar a v ndas da P s ó não , e S3 f oram m aiore s por f t de cons ol nas al a as l as . Com um proce s s ador re v ucionário e oj ol com e xce lnt s gráf , o único problm a e e icos e f m e s m o o e lv oi e ado pre ço. Já a W ii apos t num a m aior j ou ogabil idade , com o s e u com ando inov ador o W ii-m ot . T , e al f o, j am e nt com o pre ço ace s s ív l act unt e e da cons ol cont a ribuiu para o s e u e norm e s uce s s o. 2006 f igual e nt o ano da af ação oi m e irm da w e b, com o e norm e s uce s s o de s it s e com o o YouT ube , o M y Space , a W ik ipe dia, e t e a prole ração dos bl . A conf ar c. if ogs irm is t v io a e s cola da re v t Tim e para a o e h is a pe rs onal idade do ano: t odos aq ue ls q ue e cont ribuiram para e s t nov s ocie dade do a a conh e cim e nt o. <3 > t m a de capa e Com o e m q ualue r l q inguage m de program ação, e m Sch e m e e xis t m v e ários t ipos de dados . Es t s v de s de e xpre s s õe s e ão at icas , a núm e ros s ím bol e v ore s óm os al boolanos , a lt e a v ct s . Exe m pl : e is as e ore os (define (define (define (define a b c d 5) #t) ‘(1 2 3)) (+ 1 2 3 a)) Sch e m e Sch e m e é um a l inguage m de program ação q ue s uport o us o de a m úl os paradigm as , e m part ar t ipl icul , a program ação im pe rat a iv e f uncional . F de s e nv v oi olida, original e nt , por G uy L m e . St e l e por G e ral Jay Sus s m an por v t e e d ol a dos anos 70. É um a l inguage m q ue de riv a do L p e , port o, o s e u dialct e a is ant e o f a s int ica s ão idênt orm áct icas . A ut ização il da program ação f uncional e m v z da , e program ação im pe rat a (de s t iv ruição de v ariáv is ) t e , orna a s ua apre ndizage m m ais cl ara, um a v z q ue nada é m odif e icado. Re ce be m -s e obj ct e os e re t ornam -s e obj ct . e os P s e r um a l or inguage m bas t e int iv e ant uit a de s im pls com pre e ns ão, é pos s ív l e e 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 uit m inim alt q uant o is a o às s uas f unçõe s de bas e . No e nt o, ant graças à criação de bibl e cas e iot de pe nde ndo do q ue s e q ue r f r ou aze e xpl orar na l inguage m , é pos s ív lcriare m e s e program as , apl icaçõe s w e b, j ogos , ou out t ro ipo de s ofw are com o e m q ualue r t q out ra l inguage m de al t o nív l e nom e adam e nt C, C+ + ou Jav e a. L igado ao prim it is m o da l iv inguage m , e xis t e o conce it do cál o das f o cul unçõe s l bda. Q ue não s ão m ais do q ue um am proce dim e nt anónim o. Es t conce it é o e o m uit im port e para as s ociar nom e s a o ant proce dim e nt . Um e xe m pl os o: (lambda (x) (* 2 x)) Es t e xpre s s ão l bda, s e e xe cut a am ada, de v v ria um proce dim e nt m as q ue não ole o f azia nada pois não le é pas s ado um h argum e nt de inputà v o ariáv l No e ‘x’. e nt o, s e f s e m os : ant izés > ( (lambda (x) (* 2 x)) 5) 10 O bt ríam os o v or 10 q ue é o v or obt e al al ido ao pas s ar o argum e nt de input 5 ao ‘x’ e o de o proce dim e nt anónim o l bda o o am ope rar cons oant o s e u corpo, onde , ne s t e e cas o é m ul icar o ‘x’ por 2. No e nt o, t ipl ant s e ria m ais int re s s ant pode r ch am ar um e e nom e a e s t proce dim e nt para não e o e st arm os cons t e m e nt a inv ant e ocar e s t e l bda anónim o de cada v z q ue am e q ue re m os dupl icar um re al ‘x’. P ara is s o f m os : aze (define duplica (lambda (x) (* 2 x))) E para o e xe cut arm os f m os : aze > (duplica 5) 10 <4 > t m a de capa e Um a v z q ue o nom e da f e unção “dupl ica” e st á as s ociado a um proce dim e nt o l bda q ue por s ua v z e s t à e s pe ra de am e á um v or ‘x’ para o ope rar no s e u corpo. al Se be m re pararam , o dialct do Sch e m e e o pode pare ce r um t o e s t ant ranh o um a v z e q ue e s t os h abit am uados a e s cre v r e m e , m at m át e ica, os ope radore s no m e io dos ope randos : (5 + 3) . E port o, um out ant ro pont f e do o ort Sch e m e , q ue j v m do L p, é o f o de á e is act m inim izar a am biguidade da criação de f unçõe s e da s ua av iação. P e xe m pl al or o, e m m at m át e ica t m os e num e ras m ane iras e de re pre s e nt um a f ar unção, s e j e l um a a a f unção f orialn!, pol act inom ialx2+ 3x, ou m e s m o um a f unção ge nérica f (x,y,z) . Cont udo, ainda h á m ais conf ão porq ue us e xis t m prioridade s de ce rt ope raçõe s , e as com o a prioridade da m ul icação t ipl pe rant a s om a. O Sch e m e t e orna a cois a bas t e m ais s im pls e port o t m a s ua ant e ant e s int axe da s e guint e f a (f orm unção argum e nt *. No início da e xpre s s ão a s e r os ) av iada v m al e o nom e da f unção (ope rador) e s e guido de s s e nom e v m um e conj o de argum e nt a s e re m ope rados unt os (ope randos ) . Exe m pl : os (* 2 x) (+ 5 3) (* 2 (+ 5 3) 9) as s ociar às ope raçõe s prim it as de s om ar iv e m ul icar re s pe ct am e nt . P t ipl iv e ara s e pe rce be r pas s e m os aos 2 argum e nt do , os l bda, dois argum e nt de input am os : > ((lambda (+ *) (+ 5 (* 2 3) 4))* +) 100 Um a v z q ue t e rocám os os nom e s das ope raçõe s q ue v s e r ch am ados no corpo ão do l bda, as ope raçõe s de s om ar am pas s am a s e r m ul icaçõe s e as ope raçõe s t ipl de m ul icar pas s am a s e r s om as . Com o t ipl v m , o pode r de as s ociação de nom e s e êe de pas s age m de argum e nt no Sch e m e é os m uit int re s s ant e v rs át . o e e e il Um a v z m ais , com o e m e q ualue r q l inguage m q ue s e pre ze , e m Sch e m e e xis t m e e xpre s s õe s condicionais . A ut ização de v ore s e e xpre s s õe s l il al ógicas para condicionarm os al m os , ut izando gorit il os e lm e nt l e os ógicos > , <, =, > =, <=, not , and e or. São cas o dis s o o “if e o “cond”. A s int ” axe do “if é: ” (if (condição) (expressão1 se condição é #t) (expressão2 se condição é #f)) E ut izando a as s ociação de e xpre s s õe s a il nom e s , pode ríam os as s ociar q ualue r um a q e xpre s s ão das acim a m e ncionadas a um nom e q ue s e t ornav por as s im dize r um a a, , v ariáv l e . D e m ons t rando, um pouco m e lor o pode r h , da program ação f uncional f , ica o e xe m pl o: (lambda (+ *) (+ 5 (* 2 3) 4)) Exe m pl o: (define a 5) (define b (+ a 1)) > (if(> a b) a b) 6 Es t proce dim e nt anónim o f e o ica à e s pe ra da pas s age m de dois argum e nt cuj os os nom e s s ão ‘+ ’ e ‘* e h á a t nt ’ e ação de os <5 > t m a de capa e M uit s im pls . No e nt o, e s e q uis és s e m os o e ant 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 out if , ro e ncade ado e port o t ríam os , por ant e e xe m pl o: > (if(> a b) a (if(= b (+ a 1)) a b)) 5 A av iação e int rpre t al e ação de e xpre s s õe s e m Sch e m e pode pare ce r conf a por não us e st arm os h abit uados à not ação no e nt o ant f icam aq ui al guns e xe m pl q ue pe ns o os s e re m bas t e e l ant ucidat os : iv > (+ 2 3) 5 > (- 7 (+ 2 3) 2) 0 >(* (+ (- 7 1) 3) 4) 36 > (> 3 4) #f > (= 5 6) #f > (>= 4 3) #t > (and (> 4 3) (not (< 4 3))) #t Já s e q uis és s e m os e ncade ar nov if nas o s ub-e xpre s s õe s do s e gundo if o código , com e çav a t a ornar-s e um pouco conf o us de pe rce be r P . ara is s o, ut izam os o acim a il m e ncionado “cond” q ue é, port o, ant “açúcar s int ico” para um conj o de if áct unt s e ncade ados com o no e xe m pl e m cim a. o O cond re ce be um conj o de pare s unt condição / e xpre s s ão-if t e av ia-l por -# al as orde m . Se a prim e ira de r # t o s e u corpo é , e xe cut ado, cas o cont rário pas s a para a s e guint e por aí e m diant , at ch e gar a e e é um e l / e xpre s s ão, cas o ne nh um a das se e xpre s s õe s ant riore s s e j e a v rdade ira. e Conv rs ão da e xpre s s ão do e xe m pl e o ant rior dos if e ncade dos para o cond: e s > (cond((> a b)a) ((= b (+ a 1))a) (else b)) 5 Com o v m é m uit s im pls e dá m uit êe o e o j it q uando q ue re m os e ncade ar v e o árias s uce s s õe s de condiçõe s . Cont udo, para apre nde rm os o q ue é program ar, t re m os de t r noção de “o q ue e e é um al m o? Um al m o é um gorit ”. gorit conj o de ope raçõe s f as , e xe cut unt init adas de f a m e cânica num e s paço de t m po orm e f o de init m odo a re al m izare um a de t rm inada t f ou problm a. e are a e P or e xe m pl s e q uis és s e m os criar um o, al m o para cal ar o f orialde um gorit cul act núm e ro e m m at m át e ica t am os e m m e nt ính e q ue : 0! = 1 n! = n(n-1) ! P s ando is t para Sch e m e , um a f a as o orm s im pls de o f r s e ria: e aze (define (factorial n) (if (= n 0) 1 (* n (factorial ( - n 1))))) <6 > t m a de capa e I t s e ria um a f a re curs iv de criar um so orm a al m o q ue cal a o f orialde um gorit cul act int iro nat . e ural Exe m pl de o us ada: int racção com e a f unção Ao criarm os e s t al m o q ue ge ra um e gorit proce s s o it rat o, e iv e st e tm e com o caract rís t e ica não de ixar ope raçõe s pe nde nt s e l e ogo, de cons um ir m e m ória cons t e , onde por s ua v z, act iza um a ant e ual v ariáv l e s t e de ado q ue dit ará o re s ul t ado f . inal O u se j a, a cada it ração, o v or do e al acum ul ador é act izado com o produt do ual o ‘n’ act ualda it ração e m q ue s e v pe l e ai o v or pas s ado ao acum ul al ador na it ração e ant rior. Se re parare m , a prim e ira it ração é e e ch am ada com o ‘n’ s upe rior (da f unção f orialoriginal e com o acum ul act ) ador e m 1. I t porq ue o 1 é o e lm e nt ne ut da so e o ro m ul icação e as s im , não “de s t o v or n. t ipl rói” al P ríam os , ainda, criar um al m o ode gorit pare cido com o f orialde um int iro, m as act e q ue e m v z de m ul icar os ‘n’ t rm os at 0, e t ipl e é os s om a. T m os e nt e ã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)) > (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 t um a f e de e xpans ão e as e de pois um a f e de cont as racção. I t de v so e s e ao f o de e s t al m o do f orial act e gorit act ge rar um proce s s o re curs iv e s e r criado à o cus t a de um proce dim e nt o re curs iv o. Em bora pare çam a m e s m a cois a, não o s ão. Um proce s s o re curs iv t m com o o e caract rís t e ica de ixar ope raçõe s pe nde nt s e no de corre r do program a e com o re fe xo l dis s o, cons um ir m e m ória ao l ongo do t m po. Um proce dim e nt re curs iv é o act e o o o de um a f unção s e inv ocar de nt de s i ro própria “(f orial n 1) ”. act () P ara re s ole rm os o problm a de de ixarm os v e ope raçõe s pe nde nt s , pode ríam os m e lorar e h e st e al m o ge rando um gorit proce s s o it rat o. e iv (define (factorial n) (define (fact-aux n acumulador) (if(= n 0) acumulador (fact-aux (- n 1) (* acumulador n)))) (fact-aux n 1)) E ao inv ocarm os : > (soma-ate-zero 5) 15 Um a v z, m ais , o acum ul e ador é act izado ual de it ração e m it ração com a s om a do e e acum ul ador pas s ado da it ração ant rior e e com o n da act it ração. ual e D e s t v z, o v or do acum ul a e al ador pas s ado à f unção int rna na prim e ira it ração é o 0 e e (ze ro) v t s e r o e lm e nt ne ut da adição. , is o e o ro Ent rando nout áre a, pode ríam os abs t ra rairnos do conce it de f orial de s om a-at o act e e ze ro e f rm os um proce dim e nt q ue aze o re ce be um a ope ração q ue ope ra int iros e e q ue cal a e s t ope ração at ao int iro 0. cul a é e (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)) À prim e ira v t is t pode ge rar conf ão is a, o us m as v j os por part s . P e iro, f e am e rim oi int roduzido o conce it de f o unção int rna. e A f unção “f -aux” s ó é v ív là f act is e unção q ue a pre ce de h ie rarq uicam e nt , a e f unção “f orial ou s e j ao nív l obal act ”, a, e gl do am bie nt , e l não e xis t . e a e <7 > t m a de capa e As s im , pode ríam os de f o nos s o f orial inir act da s e guint m ane ira: e (define (factorial n) (opera-ate-zero * 1 n)) O u s e j f orial t m o e lm e nt ne ut 1 a, act n e e o ro e a ope ração q ue é re al izada at ch e gar é ao v or 0 é o produt ‘* A is t ch am am os al o ’. o abs t racção de dados e proce dim e nt de os orde m s upe rior. P ara de f inirm os o s om a-at -ze ro e m f e unção do ope ra-at -ze ro ge ne ral e izado, f aríam os : (define (soma-ate-zero n) (opera-ate-zero + 0 n)) > (cons 1 (cons 2 3)) elem (1 . (2 . 3)) P ara a s ubt racção: (define (subtrai-ate-zero n) (opera-ate-zero – 0 n)) E is t é o princípio da criação de lt . No o is as e nt o, e xis t m duas f ant e unçõe s bás icas q uando s e t rabala com o t de dados par. h ipo O “car” e o “cdr”. O car e o cdr re ce be m um par com o argum e nt e re t o ornam o prim e iro e lm e nt e o s e gundo e lm e nt do par, e o e o re s pe ct am e nt . O u s e j s e f rm os : iv e a, ize > (car (cons 1 2)) 1 > (cdr (cons 1 2)) 2 > (car (cdr (cons 1 (cons 2 3)))) 2 E para a div ão: is (define (divide-ate-zero n) (opera-ate-zero / 1 n)) P ns o q ue f aq ui um a s im pls e xpl e ica e icação e o conce it de ope raçõe s e nt proce dim e nt o re os de orde m s upe rior e a criação de f unçõe s para nos abs t rairm os o m áxim o pos s ív lda e f unção ge ral A criação e ut ização de s t s . il e m ét odos de abs t racção t orna o código m ais ge rale re ut izáv lre fe ct il e l indo-s e num código com m e nos bugs e na não ne ce s s idade de cons t e m anut nção. ant e O ut t ro ipo de dados q ue v m no Sch e m e e e q ue é m uit im port e e út : o par. É o par o ant il q ue v originar as lt . Em Sch e m e , um par ai is as cria-s e da s e guint m ane ira: e > (cons elem1 elem2) (elem1 . elem2) O Sch e m e s uport a, ainda, um e ncade am e nt de s t f as s int icas car o as orm áct e cdr, pode ndo f r o s e guint : aze e > (cadr (cons 1 (cons 2 3))) 2 O Sch e m e ace it e s t com binação de “c a a ‘a’s e ‘d’s r” at 5 v ze s . é e P t is t pode m os de f o t os o o inir ipo de dados lt . Um a lt não é m ais do q ue um is as is a conj o de unt pare s e ncade ados q ue t rm ina com o par (cons e lm _n () , e m q ue e e ) “() re pre s e nt a lt v ” a is a azia. D e f inam os , e nt ão, o t de dados lt ipo is a: O s cons t ore s : rut (define nova-lista ()) ;a lista vazia () (define (insere elemento LISTA) (cons elemento LISTA)) Em q ue re ce be dois argum e nt os e s ão as s ociados com o um par. Se pe ns arm os um bocadinh o, e m v z de pas s arm os com o e s e gundo argum e nt um núm e ro, porq uê não o, pas s arm os out ro par para e ncade ar? Aí t ríam os , por e xe m pl e o: <8 > t m a de capa e Se re parare m , a f unção “ins e re ” re ce be com argum e nt um e lm e nt a ins e rir e a os e o lt onde s e v ins e rir. D e pois , no s e u is a ai corpo, é f it o par (e lm e nt (LST ) No e o e o. I A) . e nt o, o cons j re ce be dois argum e nt ant á os para f r o par, por is s o pode ríam os f r aze aze e st f a unção s im pls m e nt as s im : e e (define insere cons) P ode m os f ar dois as pe ct im port e s na ris os ant m inim ização de s t f a unção. D a m e s m a m ane ira q ue nas f unçõe s ant riore s , a e f unção “lt azia? re ce be um a lt com o is a-v ” is a argum e nt e de pois v av iar s e e l é o ai al a v azia ou não at és do ope rador “nul ” rav l ? q ue v m no Sch e m e . No e nt o, o nul j e ant l á ? re ce be com o argum e nt , um a lt pe l os is a, o q ue pode ríam os ape nas e s cre v r: e (define lista-vazia null?) O s s e lct s : e ore (define (primeiro-lista lista) (car lista)) (define (resto-lista lista) (cdr lista)) Se re parare m , as f unçõe s prim e iro-lt e is a re s t is t o-l a, re ce be m , am bas , lt is as para de pois de v v re m a re s pe ct a part , o ole iv e prim e iro e lm e nt e o re s t re s pe ct am e nt . e o o iv e No e nt o, o car e o cdr j re ce be m um a ant á “lt (um par) por is s o pode m os e s cre v as is a” , ê-l s im pls m e nt as s im : e e (define primeiro-lista car) (define resto-lista cdr) O ut ro as pe ct na f o unção prim e iram e nt e e s crit é o de q ue o ifm ais os s e us e lm e nt a e os de re t orno “# t e “# f não pre cis av ” ”, am de l á e s t um a v z q ue o nul j re t ar, e l á orna um v or ? al boolano de s t t e e ipo. Criado o nos s o t ipo de dados , de f -s e a ch am ada “barre ira de ine abs t racção de dados ”. O u s e j a part do a, ir m om e nt q ue t m os f it a axiom at o e e a ização do nos s o t de dados , ut izam os ape nas as ipo il f unçõe s criadas para originar nov os e lm e nt e os (cons t ore s ) rut , ace de r-le s h (s e lct s ) re conh e ce -l (re conh e ce dore s ) e ore , os e av iadore s (t s t s ) al e e . Após a criação de s t barre ira de abs t a racção, um a f unção út de criar s e ria a q ue nos dá o il t anh o de um a lt am is a: (define (tamanho-lista LISTA) (if(lista-vazia? LISTA) 0 (+ 1 (tamanho-lista (resto-lista LISTA))))) Um re conh e ce dor: (define (lista? X) (if(null? X) #t (if (pair? X) (lista? (resto-lista X)) #f))) Se o univ rs al ‘X ’ pas s ado, f um a lt e or is a v azia, s e rá, e nt um a lt de v v ndo # t ão is a, ole . Se não f v or azia m as f um par, é m e io or cam inh o andado para s e r um a lt ou s e j is a, a, s e s im e l v v r s e é lt o re s t do e ai e is a o univ rs al ’ q ue re ce be u. Se t e ‘X odo o univ rs al e ‘X ’ pas s ar nos t s t s , de v v # t de v e e ole , ido ao pair?j de v v r um # t ou # f cas o cont á ole , rário de v v # f Um t s t : ole . e e (define (lista-vazia? LISTA) (if (null? LISTA) #t #f)) Um a out m ane ira de criar um a lt e m ra is a Sch e m e é us ar a f unção prim it a q uot q ue iv e é o m e s m o q ue us ar o caráct r “ ‘ “ (pl . e ica) > '(1 2 3) (1 2 3) > '((1 2) (2 3) (4 5)) ((1 2) (2 3) (4 5)) P e xe m pl pondo e m prát or o, ica as f unçõe s j criadas para o t á ipo de dados lt , is as f icam aq ui as s e guint s int racçõe s : e e (define lista-vazia nova-lista) (define lista2 (insere 3 lista-vazia)) <9 > t m a de capa e O t de dados lt é m uit f ipo is a, o ácil us ar e o de Sch e m e nat j incl por de f it t ivo á ui, e o, odas as f unçõe s aq ui de f inidas e m uit m ais . Em C, a as criação de um a lt é m uit m ais com plxa, is a o e um a ve z q ue e xige a criação de um a e s t ura rut com um e lm e nt e um pont iro para a e o e próxim a e s t ura. Em Sch e m e , is s o j ve m f it rut á e o para nós . O ut t ro ipo de dados pare cido com as lt é o ve ct É m ais re corre nt us ar is as or. e ve ct s ore em program ação im pe rat iva, ch am ando as pos içõe s com índice s . V irando o as s unt para o paradigm a do o Sch e m e , a program ação im pe rat iva. A program ação im pe rat iva, bas e ia-s e na de s t ruição de variáve is , ou do s e u cont údo. e Nout ras l inguage ns com o o C, é m uit us ual o re corre r-s e a e s t t e ipo de program ação, j o á Sch e m e t m o s e u pont f e na program ação e o ort f uncionalcom o f re f rido no início. , oi e No e nt o, o Sch e m e t bém s uport e s t ant am a e e s t o de program ação e para is s o us a um a il re pre s e nt ação int rna para al e ocar um val e or 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 t ura com um nom e e com um rut val l de nt Se invocarm os o nom e da box, or á ro. o Sch e m e int rpre t o nom e e f o ch am ado e a az unbox de vol ndo o val int rno da box ve or e as s ociado ao nom e . P t is t é pos s íve l pe rce be r o q ue f o os o o, az ope rador s e t Es t f !. a unção re ce be um nom e q ue t m obrigat e oriam e nt de j t r s ido e á e de f inido com a f unção de f e um novo val ine or ou e xpre s s ão q ue re t orne al vál para o go ido t de dados as s ociado ao nom e , e f e nt ipo az ão a acção de unbox do nom e , ins e re o novo val (de pois de aval a e xpre s s ão s e guida or iar do nom e ) e vol a f r box. É óbvio q ue is t é t a aze o o q ue s e s uce de int rnam e nt e é o q ue diz a e e t oria do Sch e m e . Na ve rdade , t e udo o q ue f oi f it at agora re s pe it as re gras t óricas do e o é a e conce it Sch e m e e nq uant l o o inguage m de program ação, porq ue no f undo, cada int rpre t e ador da l inguage m e s e u com pil ador pode m ge rir t odos e st s e proce s s os , int rnam e nt , de m ane ira dif re nt . H á q ue e e e e pe rce be r a dif re nça e nt o conce it de e re o l inguage m e s ua s int , e o q ue na ve rdade o axe s e u int rpre t e ador f az. (define lista-final (insere 5 lista2)) Se m andás s e m os corre r o s e guint com ando: e > lista-final (5 3) Es t e ra a lt re t a is a ornada. E pode ríam os , e nt ão, corre r a f unção q ue nos dá o t anh o de l am a: > (tamanho-lista lista-final) 2 O u m e s m o o ve rif icador de lt : is as > (lista? lista-final) #t Já de f os um a f inim unção q ue ins e re um e lm e nt à cabe ça da lt D á j it m as é e o is a. e o bas t e f ant raca. Se q uis e rm os ins e rir um e lm e nt num a dada pos ição f e o aríam os a s e guint f e unçã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 lm e nt 4 na e o “lt inal criada e m cim a, na úl a pos ição, is a-f ”, t im f aríam os : > (insere-pos 4 3 lista-final) (2 3 4) Acont ce q ue pode ríam os criar condiçõe s de e e rro para o ut izador, por e xe m pl para o cas o il o da pos ição dada s e r m aior q ue o t anh o da am própria lt is a, m as s ão as pe ct os pouco re lvant s para o cas o. e e <10> t m a de capa e Al guns e xe m pl da ut ização do ope rador s e t os il !: (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 com o nada. O u s e j é av iado o s e t o a, al !, v or de “v or-f ” é de s t al al inal ruído e re nov ado com out e o f orialé inv ro act ocado de nov o re curs iv e nt . Sim pls m e nt , e m v z de am e e e e pas s arm os v ariáv is de e s t e ado act izadas , ual criam os um acum ul ador q ue é act izado ual us ando o s e t int rnam e nt . ! e e P ns o q ue a m aior part dos cont údos e e e acim a e xpl icados e ngl obam e re fe ct m o l e pode r do Sch e m e e a f idade com q ue s e acil pode apre nde r a program ar us ando e s t a l inguage m . F oram ape nas e xpos t e xe m pl os os s im pls m as q ue m e s m o as s im m os t e ram o q ue é pos s ív laze r e m Sch e m e . e f P ara s abe r m ais s obre e s t l a inguage m acons e lo um h l ro: P iv rogram ação e m Sch e m e – I rodução à program ação nt ut izando m úl os paradigm as –I P s s . O u il t ipl ST re out ras f e s com o o do com pil ont ador e am bie nt e de int rpre t e ação Sch e m e h tp:/w w w .pl ch e m e .org. Es t int rpre t t / t -s e e ador de Sch e m e é bas t e pode ros o e m t rm os ant e de opçõe s e t m um m odo de de bug m uit e o int re s s ant , onde pode m os ace de r aos e e v ore s de t al odos os v ore s as s ociados aos al nom e s pre s e nt s no código, s im pls m e nt e e e pas s ando o rat por cim a de ls . T m de bug o e e por s t ps , us a bre ak point e ainda t m e s e dis ponív l para al do m odo gráf e , ém ico, um m odo de cons ol O program a e s t a. á dis ponív l para L e inux, W indow s , M ac, Sun, et c... É ainda pos s ív lcriar e xe cut e is dos e áv program as criados para corre r nas v árias pl af as onde s e e s t e r a t at orm iv rabalar o h código. Es pe ro q ue t nh am pe rce bido o pot ncial e e do Sch e m e com o l inguage m de al nív l t o e m as , t bém , com o l am inguage m de apre ndizage m para s e e v uir para out ol ras l inguage ns . V t m os à f ol e unção f orial ue pe ns o q ue act q el ucida be m a dif re nça e e nt re program ação f uncionale a program ação im pe rat a: iv (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 ív lm as um pouco m ais e t rabalos a e q ue e nv v de s t h ole ruição de v ore s . P s age m de argum e nt al as os e nt re f unçõe s s e m as al rar é m uit m ais s e guro e t e o obt m os e a m e sm a ef iciência (not a: com parar com a v rs ão f e uncional acim a) F . oi ins e rido o e lm e nt be gin. Em Sch e m e , s ó e o pode m os re al um a ope ração por corpo. izar O pe ração e s s a q ue de v v al ola go. No e nt o, e xis t um a f ant e unção q ue re ce be v árias f unçõe s e q ue av ia t al odas e s ó de v v o v or re t ole al ornado pe l av iação da a al úl a. O u s e j no cas o da f t im a, unção “f orial act im p”, de nt ro da f unção auxil iar “aux”, e nq uant o “n” não ch e gar a 0 (ze ro) e l o , e re al o e l do if q ue corre s ponde a iza se , e xe cut o be gin. Ne s s e be gin s ão av iadas ar al as e xpre s s õe s (s e t v or-f ! al inal(* n v or-f ) al inal ) e (aux (- n 1) ) ) e s ó o v or da úl a é )), al t im re t ornada. O act de f r s e t não re t o aze ! orna nada. M int re t o, orna v oid, q ue é int rpre t e ado <11> M igue l ah non W a program ar -> D e s v age ns : ant • m ais lnt q ue o m odo orie nt É e o ado ao dat agram a. • com port e nt do s e rv O am o idor é dif re nt do com port e nt do cl nt . e e am o ie e M odo O rie nt ado ao D at ram a ag (UD P IP / ) -> V ag e ns : ant • bas t e m ais rápido q u e o m odo É ant orie nt ado a cone xão. -> D e s vant e ns : ag • e rviços não conf S iá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 ; • ada m e ns ag e m é u m dat ram a: C ag [R e m e t nt , D e s t e e inat ário, C ont údo.] e . D e vido a u m a m aior u t ização e il e st abil idade ire m os ape nas anal ar e is im plm e nt e ar o M odo O rie nt ado à C one xão - TC P IP /. Sock e t s e m Jav a Ne s t art e igo v os f am icar a conh e ce r o s uport q ue Jav of re ce para a ut ização e a e il do m e canis m o de com unicação Sock e t o , m e canis m o m ais ut izado il para a com unicação e nt apl re icaçõe s . Jav pe rm it o us o de s ock t s pe l a e e os s e guint s m odos ut ização: e il -> M odo O rie nt ado à Cone xão: F unciona com o prot ocol T ; o CP -> M odo O rie nt ado ao D at agram a: F unciona com o prot ocol UD P o . Am bos os m odos f uncionam s obre o prot ocol I (I e rne t P ocol Cada um o P nt rot ) . de s t s m odos t m e e a s ua ut idade , il v age ns ant e de s v age ns ant na s ua ut ização. il S ock e t TC P IP s / No proce s s o de com u nicação e nt re s ock e t TC P IP de u m a f s /, orm a s im pl s , o e s e rvidor e s cole u m a port e ag u arda h a cone xõe s a e s s a port o cl nt de ve a, ie e cont r as s e g u int s inf e e orm açõe s : • Ende re ço do S e rvidor (H O S T); • port u s ada pe l s e rvidor (P R T). A a o O C om e s s a inf orm ação o cl nt s ol a ie e icit u m a cone xão ao s e rvidor (F u ra 1). ig S e após o pe dido de cone xão não ocorre r ne nh u m probl m a, o s e rvidor e ace it a cone xão g e rando u m s ock e t a nu m a port do s e rvidor, o q u e vai criar a u m canal de com u nicação e nt re o cl nt e o s e rvidor (F u ra 2). ie e ig M odo O rie nt ado à Cone xão (TP I ) C/P -> V age ns : ant • rv Se iços conf e is , s e m pe rda de dados iáv na re de e orde m dos pacot s ; e • os s ibil P idade de us ar D at re am s . aSt F ra 1 igu <12> a program ar F ra 2 igu P norm a o s e rv or idor f unciona e m cicl (l o oop) e s pe rando por nov cone xõe s e criando as s ock e t para s ol açõe s de cl nt s . s icit ie e Em s e guida ire m os v r as acçõe s ne ce s s árias para im plm e nt com unicaçõe s s obre T e e ar CP at és de um s ock e tcl nt e um s ock e ts e rv rav ie e idor. Sock e tCl nt ie 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 – bt r St am s de e nt O e re rada e s aída para com unicação com o s e rv . idor //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 – al a com unicação com o s e rv . Re izar idor //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 – e ch ar as St am s e a cone xão. F re //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 rv idor 1– Criar Sock e tSe rv r e 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 v r as cl s e s Cl nt e Se rv e as ie e idor com plt e nt im plm e nt e am e e adas . Cl s Cl nt as ie e 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 s Se rv as idor 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()); } } } <16> F ábio Corre ia Aq ui f icam as principais bas e s de s t m at a éria, a part daq ui é us ar a im aginação. Com o ir s uge s t ão para a apl icação dos nov os conh e cim e nt os adq uiridos , s ugiro q ue e xpe rim e nt m a criação de um s im pls s ofw are de conv rs ação ('ch at . e e t e ') a program ar 1*10^2 + 2*10^1 3*10^0 3 = 123 = 100 + 20 + E os núm e ros f raccionários ?Sim pls , v os e am v r o e xe m pl 123,456: e o 1*10^2 + 2*10^1 + 3*10^0 + 4*10^-1 + 5*10^-2 + 6*10^-3 O u s e j cada dígit à e s q ue rda da v a, o írgul a re pre s e nt a um v or e nt al re 0 e 9 m ul icado por um a pot t ipl ência de bas e 10 cuj e xpoe nt aum e nt com a dis t o e a ância à v írgul Nos dígit à dire it da v a. os a írgul é um a v or de 0 a 9 m ul icado por um a al t ipl pot ência de bas e 10 com um e xpoe nt e ne gat o q ue cre s ce à m e dida q ue s e iv af t as a da v írgul a. Sim , l v m á e a M at m át e ica! M as não s e pre ocupe m m uit o com is s o, t a-s e de M at m át s im pls . rat e ica e Agora v os pas s ar ao s is t m a binário. am e No s is t m a binário s ó pode m os e ncont 2 e rar v ore s o 0 e o 1, e a part de s t s 2 dígit al ir e os pode m os f m e nt obt r q ualue r v or acil e e q al de cim al corre s ponde nt . A m ane ira de e conv rt r um binário num de cim al é e e bas t e s im il ao q ue f m os com os ant ar ize núm e ros de cim ais . O s is t m a binário não e pe rm it dígit dif re nt s de 0 e 1 e a e os e e pot ência é s e m pre de bas e 2 e m v z de e bas e 10. V os e nt conv rt r o s e guint núm e ro am ão e e e binário para de cim al11001010 : 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 pls não é? e P ara f r a ope ração inv rs a é um pouco aze e pior t m os de div , e idir s uce s s iv e nt um am e núm e ro de cim alpor 2 at o re s ul é t ado s e r m e nor q ue 2. D e pois t m os de col e ocar o úl o re s ul t im t ado e os re s t ant riore s na os e orde m com o o e xe m pl a s e guir O u s e j o . a: Es t uras de rut dados Ne s t s érie de art a igos v os de s l am indar um as s unt q ue para m uit o os é dif ícil de e ncaixar e nq uant para out , o ros é com o s om ar 1 + 1. No prim e iro capít o de s t ul a s érie de art igos v os abordar os s is t m as am e num éricos . Com o a m aioria dos lit s s abe m , o e ore com put ador não int rpre t os núm e ros e a com o nós e t m as s uas l it e im açõe s arit ét m icas . I t porq ue o proce s s ador so ape nas t rabala com im pul e l ricos e h s os éct e s t s s ó pode m t ar 2 v ore s : 0 e 1, e om al re pre s e nt ando as s im a aus ência e a pre s e nça, re s pe ct am e nt , de s s e s dit iv e os im pul . P ant s os ort o, e s t os diant um am e s is t m a num érico binário. e Nat m e nt , com o nós pe ns am os num ural e núm e ro s e m pre no s is t m a de cim al e e l it os a t r um a im age m m e nt de im am e al q uant idade , não nos ape rce be m os q ue de f o um núm e ro, por e xe m pl o 123, pode act o s e r re pre s e nt ado da s e guint f a: e orm <17> t cnol e ogias O v or binário é 1100100. al As re pre s e nt açõe s dos núm e ros binários pode m v ariar P e xe m pl o núm e ro 5 no . or o s is t m a binário re pre s e nt e por 101, m as e a-s pode s e r re pre s e nt ado por 0000101 ou 00000101 ou 0000000000000000000101, is t porq ue , t com o no s is t m a de cim al o al e , os ze ros a e s q ue rda não t êm s ignif icado ne nh um . Cada digit binário é conh e cido o por bit(binary digit. ) Agora q ue s abe m os conv rt r de binário e e para de cim al v e ice v rs a, v os ao q ue e am int re s s a. e M at m at e icam e nt e pode m os re pre s e nt ar q ualue r v or de cim al e m binário s e m q al l it im açõe s de t anh o, am m as num proce s s ador as cois as j não s ão be m á as s im , e s t v e ai agrupar os bit num a s q uant idade e s pe cíf ica de bit . O u s e j s a, pode agrupar e m 4 bit (conh e cido por s nibbl) 8 bit (conh e cido por by t ) 16 bit e , s e , s (conh e cido com o w ord) e m ais adiant . e E v os ao nos s o úl o e xe m pl de s t am t im o e art igo: Re pre s e nt ação do núm e ro 5 num nibbl, num by t e num w ord. e e Nibbl: 0101 (4 bit ) e s B t : 00000101 (8 bit ) ye s W ord: 0000000000000101 (16 bit ) s No próxim o art igo v os v r com o s e am e organizam e s t e s t uras q ue acabám os as rut de de s cre v r e . <18> D iogo Ale s v a program ar Caract rís t e icas do P t on: yh • axe s im pls ; Sint e • ácil rápida apre ndizage m ; F e • rát e de código abe rt G is o; •inguage m de al nív l int rpre t L t o e e e ada; • ort idade ; P abil • rie nt O ação a obj ct ; e os • e ns ív l Ext e ; • e ns as bibl e cas ; Ext iot • Exce lnt s uport e docum e nt e e e ação. Áre as de apl icação: • e s e nv v e nt de apl D olim o icaçõe s W e b; • s s o a bas e s de dados ; Ace •nt rf s gráf ; I e ace icas • icaçõe s cie nt icas e num éricas ; Apl íf • Educação; • rogram ação de re de s ; P • e s e nv v e nt de s ofw are ; D olim o t • Jogos e gráf icos 3D . Ant s de t e udo, v os ins t ar o int rpre t am al e ador da l inguage m P t on q ue pode s e r obt na yh ido página of icial da l inguage m (h tp:/w w w .py t on.org) A v rs ão q ue v os t / h . e am ut izar ao l il ongo de s t art é a 2.5 (a úl a e igo t im v rs ão e s t e l al da e s crit do art . e áv na t ura a igo) Se e s t e r e m am bie nt W indow s bas t f r iv e a aze a t rans f rência do e xe cut e lde ins t ação e áv al (h tp:/w w w .py t on.org/t py t on/ py t ont / h fp/ h 2.5/ h 2.5.m s i) q ue m e s t e r e m am bie nt L , iv e inux ou s e m e lant t m um a grande probabil h e e idade de j pos s uir o int rpre t á e ador ins t ado, cas o al não t nh am aprov it m agora para o ins t ar. e e e al V os agora v r com o corre r o prim e iro am e program a e m P t on, o t yh radicional e l W orl H l o d. Exis t m dois m ét e odos para o f r, us ando o aze int rpre t e ador int ract o ou um código f e e iv ont e xt rno. A v age m do int rpre t e ant e ador é q ue não t êm de grav e v t a e xe cut um ar ol ar ar f e iro s e m pre q ue f m um a m odif ich aze icação. M ais à f nt v os ut izar f e iros com o re e am il ich código f e , pois as s im q ue e nce rram o ont int rpre t e ador e s t e não grav a o q ue e s cre v ram , s e ndo por is s o út ape nas para e il pe rce be r com o a l inguage m f unciona e não para e s cre v r program as com plxos . e e I rodução à l nt inguage m q ue t m e m ov e nt im ado o m undo ope n-s ource O P t on é, com o o s e u aut diz, yh or um a l inguage m de program ação int rpre t e ada, int ract a, orie nt e iv ada a obj ct e dinâm ica. e os Ao cont rário de m uit out l as ras inguage ns de program ação, a de l it im ação dos bl ocos de ins t ruçõe s é f it e a pe l al am e nt o inh o (inde nt ação) não h á de l it , im adore s com o be gin e e nd com o acont ce no P cal ou e as , { e } da l inguage m C. Al dis s o of re ce ém e t ipos de dados de al nív lcom o s t t o e rings , dicionários , lt , t as , cl s e s , e nt is as upl as re out . ros A l inguage m pe rm it out paradigm as de e ros program ação al ém da program ação orie nt ada a obj ct , com o a program ação e os f uncional A s int . axe é f ácil com pre e nde r de e dom ina-s e rapidam e nt , s e ndo e s s as duas e caract rís t e icas cons ide radas grande s v age ns da l ant inguage m . P t on é, e m yh v ários as pe ct , s e m e lant os h e a out ras l inguage ns int rpre t e adas com o P rl Ruby. e e <19 > a program ar P ara iniciar o int rpre t e ador pe l l a de a inh com andos ou cons ol bas t e s cre v r a a e py t on s e guido de <Ent r> . As s im q ue o h e f re m v ize ão s e r apre s e nt ados com o s e guint (pode s e r l iram e nt dif re nt e ige e e e de pe nde ndo do v s o s is t m a ope rat o) os e iv : >>> print “Hello World” Hello World >>> print "Hello", "World" Hello World >>> print <Linha em branco> 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. >>> P ara f ch ar o int rpre t e e ador bas t pre s s ionar a Ct -Z s e guido de Ent r e m W indow s , ou Ct rl e rl D em L inux. P ara aq ue ls q ue não s e s e nt m conf e s e e iant a t rabalar e m l a de com andos , o h inh P t on t bém v m com um a int rf yh am e e ace gráf ica q ue pode s e r us ada para program ar t o no m odo int ract o com o ant e iv com f e iros de código f e . Es t ich ont a f rram e nt e a ch am a-s e I L (I e grat d D E nt e De v L e opm e nt Env ironm e nt e é f ) orne cida com a ins t ação bas e do P t on. Se al yh durant a ins t ação pe diram ao ins t ador e al al para criar at h os no m e nu I al niciar e nt ão pode m s e guir por e s s e cam inh o. Cas o não t nh am ins t ado at h os , o I L e ncont e al al D E rase em <pas t a de ins t ação do al P t on> \L yh ib\idll e ib\idl.py w . e Agora q ue t m os o int rpre t e e ador iniciado v os am com e çar a e s cre v r al e guns program as . Se m pre q ue o int pre t e ador m os t rar > > > s ignif ica q ue e s t pront a á o re ce be r ins t ruçõe s . P ara com e çar v os int am roduzir a ins t rução print “H e l W orl l o d”. Com o de v m t r e e re parado as s im q ue pre s s ionaram a t cl e a Ent r o P t on av iou o q ue int e yh al roduziram e e f ct e uou a de v ida ope ração (e s cre v u e H e l W orl num a l a) As s im q ue acabou l o d inh . de o e f ct e uar v t ol a m os t ou rar os > > > , s ignif icando q ue e s t pront a re ce be r á o nov ins t as ruçõe s . Com o de v m t r re parado o com ando print e e s e rv para e s cre v r al e e go na l a de inh com andos . Ne s t e xe m pl e s cre v m os um a e o e st ring (cade ia de caract re s ) m as t bém e am pode m os e s cre v r lt , t as e nt out e is as upl re ros t ipos de dados q ue v os conh e ce r m ais à am f nt ... re e Se e f ct e uare m o com ando print e não f orne ce re m nada para o int rpre t e ador e s cre v r, e l e f ct ape nas um parágraf e e e ua o, s e ndo e q uiv e nt a f re m print de um a al e aze st ring v azia (“”) T bém é de not q ue s e . am ar pode f r print a v aze ários v ore s num a única al ins t rução, s e ndo os dados s e parados por v írgul . as Tipos de dados Em P t on e xis t um a e norm e v yh e arie dade de t ipos de dados q ue dão um a e norm e fe xibil l idade ao program ador com o núm e ros , s t rings (s e q uência de caract re s ) e , lt is as (array s / e ct s ) t as , dicionários v ore , upl (array s as s ociat os / m at s ) obj ct , iv rize , e os et c... O s núm e ros s ubdiv m -s e e m q uat t ide ro ipos : os int iros ou de cim ais (int ge rs ) os int iros e e , e grande s (l ong int ge rs ) e , os núm e ros f raccionários (foat l ing point e os núm e ros ) com plxos (com plx num be rs ) A s e guir e e . apre s e nt -s e am al guns e xe m pl os de ope raçõe s com núm e ros : >>> 5+5 10 Ne s t cas o j am os dois núm e ros int iros e unt e s e ndo o re s ul t ado out int iro. T bém de ro e am pode m re al out ope raçõe s : izar ras >>> 2.5*2 5.0 <20> a program ar Com o v iram m ul icam os um núm e ro t ipl f raccionário por um núm e ro int iro s e ndo o e re s ul t ado um núm e ro f raccionário. At nção e q ue para o int rpre t e ador 5 não é o m e s m o q ue 5.0. >>> 2**3 8 >>> pow(2, 3) 8 >>> type(5) <type 'int'> >>> type(5.0) <type 'float'> >>> type(“Python”) <type 'str'> As s t rings com o j f dit s ão cade ias de á oi o caract re s ou s e j pode m cont r núm e ros , e a e lt e ras e s ím bol , e o s e u cont údo e s t os e á s e m pre l it im ado por as pas ou pl : icas >>> 'Python' 'Python' >>> "Portugal" 'Portugal' >>> """Python ... Portugal ... P@P""" 'Python\nPortugal\nP@P' Com o j de v m t r pe rce bido o s ím bol * á e e o * s ignif ica e lv , ne s t cas o e lv os o e ar e e ám núm e ro 2 ao cubo. Aprov it os t bém e am am para apre s e nt o us o de f ar unçõe s , ne s t e cas o a f unção pow (x, y ) s e ndo x e y os , ch am ados argum e nt da f os unção ou s e j a, os dados q ue f orne ce m os à f unção. Es t e t m a irá s e r abordado m ais prof e undam e nt e q uando criarm os as nos s as próprias f unçõe s . >>> 10/3 3 >>> 10.0/3 3.3333333333333335 Q uando s e div m dois int iros o re s ul ide e t ado é um int iro, m as q uando s e m is t e uram int iros com f e raccionários , o re s ul t ado é um f raccionário, conv ém t r e s t f o e m e e act at nção j q ue é um e rro f q ue nt . e á re e O ut f ra unção a conh e ce r m uit út q uando o il e s t os a iniciar é a t pe () q ue pe rm it am y , e s abe r o t ipo de dados com q ue e s t os a am l . idar Es t úl a s t a t im ring cons t ruída por t as pas é rês cons ide rada um a s t ring de v árias l as , inh re pare m q ue q uando iniciam os a s t ring e dam os um <Ent r> o int rpre t e e ador pas s a aut at om icam e nt para a l a s e guint e inh e m os t rando ... e m v z das h abit e uais > > > . O ut porm e nor int re s s ant é q ue a s t ro e e ring f inal de v v olida pe l int rpre t o e ador t m e ape nas um a l a apare ce ndo o \n (ne w inh l ) s e m pre q ue ocorre um a m udança de ine l a. T bém pode m os m udar de l a inh am inh m anual e nt s e m us ar e s t úl o t m e e t im ipo de st rings : >>> 'Python\nPortugal' 'Python\nPortugal' >>> 'Triton'Portugal' File "<stdin>", line 1 'Triton'Portugal' ^ SyntaxError: invalid syntax Aq ui pode m v r out porm e nor int re s s ant e ro e e s obre as s t rings q ue ainda não f re f rido. oi e Com o f m os s e q uis e rm os us ar as pas ou aze pl icas de nt de um a s t ro ring? Se us arm os as s im s e m m ais ne m m e nos o int rpre t e ador conf unde -s e , não s abe ndo onde acaba a st ring, m as s e us arm os t ipos dif re nt s de e e as pas / icas no cont údo dos q ue us am os pl e para l it a s t im ar ring e nt j é pe rm it ão á ido: <21> a program ar >>> "Triton ' Portugal" "Triton ' Portugal" >>> 'Triton " Portugal' 'Triton " Portugal' >>> """Triton '" Portugal""" 'Triton \'" Portugal' P ara guardar um int iro e m m e m ória e us am os um a v ariáv l para is s o t m os de e , e le at h ribuir um nom e para q ue nos pos s am os re f rir a e s s e v or no f uro: e al ut >>> numero = 1 Ne s t úl o cas o pode m os v r com o é e t im e q ue o P t on re pre s e nt a pl yh a ica num a st ring. Us am os o ch am ado caract r de e e s cape , a barra para a e s q ue rda, para re pre s e nt ar os t ais caract re s e não pe rm it idos norm al e nt m e ou caract re s e e s pe ciais (\n) . >>> print "Triton \" Portugal" Triton " Portugal >>> print "Uma barra \\" Uma barra \ >>> "abc".upper() 'ABC' É t ão s im pls com o is t bas t e s cre v r o e o, a e nom e da v ariáv l e guido de um igual e s (=, at ribuição) e s e guido do q ue q ue re m os guardar . >>> print numero 1 >>> inteiro = numero + 1 >>> inteiro 2 No prim e iro e xe m pl us am os um a as pa no o m e io de um a s t ring l it im ada pe l m e s m o o t ipo de as pa. P ara is s o f m os o e s cape aze da as pa, us ando para is s o o \”. P ara f m os e s cape à barra us am os duas aze barras , com o s e v rif e ica no s e gundo e xe m pl o. As s t rings apre s e nt am um conj o de unt m ét odos q ue pode m os ut izar com o il , f m os no úl o e xe m pl ch am ando o ize t im o, m ét odo .uppe r() q ue f com q ue a s t az ring s e j conv rt a e ida para lt e ras m aiús cul . as P ara conh e ce r os m ét odos de q ualue r q t ipo de dados us a-s e a f unção dir() por , e xe m pl dir('F o, oo') v ai m os t rar t odos os m ét odos da s t ring (ne s t cas o 'F . e oo') At agora não t m os guardado os v ore s é e al das e xpre s s õe s q ue int roduzim os , para is s o us am os as v ariáv is . Um a v e ariáv l ape nas e é um nom e q ue apont para o e nde re ço de a m e m ória onde v os am guardar a inf ação. orm Agora cada v z q ue nos re f rirm os à e e v ariáv l e núm e ro é com o nos e s t és s e m os a iv re f rir ao v or q ue e l guarda e m e al a m e m ória, pois cada v z q ue e o int rpre t e ador t m de proce s s ar a v e ariáv l e ace de à m e m ória e s ubs t ui pe l de v it o ido v or guardado. al As v ariáv is pode m s e r us adas para e guardar t odos os t ipos de dados : >>> frac = 2.0*2 >>> print frac 4.0 Ne s t cas o ant s de guardar o v or o e e al int rpre t e ador av ia a e xpre s s ão (2.0* al 2) s e ndo o re s ul t ado um núm e ro f raccionário. G raças á s im pl icidade de P t on, e s t yh a l inguage m é m uit v ze s acons e lada para as e h q ue m e nt rar no m undo da program ação. T bém por is s o, é pos s ív le ncont m uit am e rar a inf ação orm (docum e nt ação, art igos , e xe m pl ...) l re s na int rne t s obre e l Aq ui os iv e , a. t al êm guns l s int re s s ant s : ink e e • tp:/w w w .div int t on.org h t / e opy h • tp:/w w w .onl p.com / t on h t / am py h • tp:/w ik i.py t on.org/ oin h t / h m • tp:/pt ik ipe dia.org/ ik i/ y t on h t / .w w P h <22> João M at os s e gurança O bufe r ov rfow acont ce q uando um f e l e program a grav dados num a de t rm inada a e v ariáv l e pas s ando, porém , um a q uant idade m aior de dados do q ue e s t a av pre v t pe l program a. Es s a s it is o o uação pode pos s ibilar a e xe cução de um código it arbit rário, ne ce s s it ando ape nas q ue e s t e s e j de v a idam e nt pos icionado na áre a de e m e m ória do proce s s o. Abaixo t m os um e e xe m pl de o um program a v ne ráv l a um at ue de ul e aq bufe r ov rfow . O problm a e s t na f e l e á s e gunda l a da f inh unção P roce s s arP aram , q ue não l it o t anh o do argum e nt im a am o re ce bido (arg) . I rodução aos nt Expl s oit Um e xpl não é nada m ais q ue oit um código capaz de e xpl orar um a f h a num s e gm e nt de al o código ou s ofw are . D o ingl , t ês s ignif ica le ral e nt e m port it m e uguês “e xpl orar”. No m undo da s e gurança inf át orm ica, de nom ina-s e “e xpl ” um m ét oit odo capaz de t irar prov it de um bug (f h a) de um e o al s ofw are prov t ocando com port e nt não am os pre t ndidos do s ofw are , f q ue nt m e nt e t re e e para cons e guir e s cal priv égios , obt r ar il e cont o do s is t m a ou ne gar s e rv rol e iços (D oS) . G e ral e nt ut izados e m m ilare s de m e il h s is t m as diariam e nt , os e xpl s s ão a e e oit f e de grande part dos at ue s ont e aq ocorridos l m e nt e re m ot e nt nos ocal e am e s is t m as e xis t nt s . Es t s pode m ainda e e e e t ar f as e pode re s bas t e s v om orm ant ariados . P ode s e r um program a e xe cut e l um a áv , m e ns age m num de t rm inado prot e ocol de o 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 t art e igo v o-nos f am ocar no t ipo de f h a “B f r O v rfow ” e ut izare m os a al ufe e l il l inguage m C para de m ons t . rar 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); } Com o f uncionam os e xpl s ? oit O s e xpl s q uas e s e m pre f m prov it oit aze e o de um a f h a conh e cida com o bufe r al f ov rfow (s obre carga da m e m ória bufe r) e l f . O bufe r ov rfow , q uando ocorre de f a f e l orm alat e ória, norm al e nt caus a um e rro m e f al at / cras h na apl icação. No W indow s XP e s t s it a uação ge ra um a j ane l de e rro, e a no L inux ge ra a conh e cida s e gm e nt ion at f t com core dum p (dá-s e um core dum p aul q uando o s is t m a cons e gue guardar o e e st ado do program a ant s de s urgir a e f h a, s e ndo o core o f e iro guardado) al ich . P orém , q uando corre ct e nt induzido am e pe l at o acant , o bufe r ov rfow pode e f e l pe rm it q ue s e e xe cut código m al o ir e icios q ue t rá os m e s m os priv égios de e il e xe cução da apl icação a s e r at acada, q ue ge ral e nt m e s ão priv égios il de adm inis t rador . <24> s e gurança P ara e nt nde r com plt e nt com o o e e am e bufe r ov rfow é e xpl f e l orado para s e obt r e ace s s os inde v idos ao s is t m a, s e ria e 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 uit ct e ura de h ardw are , s is t m a ope rat o ou com pil e iv ador pode organizar de f a dif re nt . orm e e B f r ov rfow é ape nas um dos m uit t ufe e l os ipos de v ne rabil ul idade s pos s ív is num s ofw are . e t Se ndo al guns de ls : h e ap ov rfow , int ge r e e l e ov rfow , re t e l urn-t ibc atack , f at s t o-l t orm ring atack , race condit t ion, code inj ct e ion, SQ L inj ct e ion, cros s -s it s cript e ing e cros s -s it e re q ue s t f orge ry. G e ral e nt um e xpl m e oit ape nas t a v age m de um a única om ant v ne rabil ul idade de s ofw are , o q ue t t orna por v ze s norm als e re m ut izados v e il ários e xpl s oit e m s im ul o: prim e iro para ganh ar ace s s o t âne de nív l re duzido, de pois para e s cal e ar priv égios il re pe t idam e nt e at é obt r e priv égios il m áxim os , nom e adam e nt e Adm inis t rador/ . root Norm al e nt um único e xpl pode ape nas m e oit s e r ut izado para t ar v age m num a il om ant única v ne rabil ul idade de s ofw are . t H abit m e nt , q uando um ual e e xpl oit é publ icado, a v ne rabil ul idade é corrigida at és de um a corre cção (pat ) e o rav ch e xpl t oit orna-s e obs olt para nov v rs õe s e o as e do s ofw are . Es t é a razão pe l q ual guns t a o al h ack e rs não publ icam os s e us e xpl s , oit m ant ndo-os priv e ados . T ais e xpl s s ão oit ge ral e nt re f re nciados com o e xpl s m e e oit 0day e obt r t e ais e xpl s é o de s e j oit o principal dos at acant s e ine xpe rie nt s , e ge ral e nt ch am ados ‘s criptk iddie s ’. m e e xpl s a t oit odos . Crit icado pe l e xpe rt da áre a os s com o um a f rram e nt q ue v m f it o e a e acilar t rabalo aos s cript iddie s e as s im aum e nt o h -k ar núm e ro de s is t m as s ob at ue s . e aq Com e s t f rram e nt a f e de procura e a e a, as de s e nv v e nt dos e xpl s é prat olim o oit icam e nt e e l inada v t q ue s e t im is o orna bas t e f ant ácil de de s carre gar nov os e xpl s para ut izar na oit il pl af a. at orm P rogram ar e m Se gurança Exis t m m uit t e os ipos de v ne rabil ul idade s , cada um a de l ocorre de v as ido a um e rro do program ador. G e ral e nt caus adas pe l m á m e a conce pção, f t al a de conh e cim e nt o, e nt ndim e nt e o do f uncionam e nt o das f unçõe s / iot cas bibl e ut izadas il de out ros program adore s ou at é m e s m o f h as al arit ét m icas ine s pe radas . Com is t pode -s e o f m e nt concl q ue e s t v ne rabil acil e uir as ul idade s ape s ar de s e re m bas t e conh e cidas , não ant s ão ge ral e nt e nt ndidas , e is t e xpl m e e o icaria o porq uê de cont inuare m a apare ce re m e norm e s q uant idade s de s t as f h as nas al apl icaçõe s de s ofw are . t P e ct M e t pl ? roj o as oit O P e ct M e t pl é um a pl af a onl roj o as oit at orm ine ope n-s ource , dis ponív lpara dow nl e oad, q ue pe rm it cont ar e ut izar e xpl s publ e rol il oit icados onl . ine Es crit e m P rl com com pone nt s e m C, o e , e As s e m blr e P t on, o M e t pl t e yh as oit ornou-s e um a f rram e nt f os a por f it o us o de e a am acilar <25> s e gurança Ape s ar dis t t m os de e nt nde r q ue t o, e e odos os t ipos de v ne rabil ul idade s , nom e adam e nt e as f adas ant riorm e nt s ão pre v ív is . al e e is e T v z num t m po próxim o no f uro, as ale e ut condiçõe s q ue pe rm it m e e st as f h as al e xis t m , v nh am a s e r “corrigidas ” e ire e e l inadas , f im icam aq ui al guns m ét odos q ue pode m aj udar q ualue r program ador a q pre v nir e s t : e as Es t s im pls al ração, inf a o s t a e t e orm rcpy () q ue o bufe r de de s t s ó t m um t anh o f ino e am de 10 by t s , e q ue de v de s cart e e ar q uais q ue r dados após e s t com prim e nt e o. 3. 1. Ut izar dif re nt s l il e e inguage ns . L inguage ns de program ação q ue f orne ce m aut at om icam e nt v rif e e icação de l it s im e com o P rl P t on, Jav e , yh a, Ruby, e t c. É v rdade q ue e s t e xis t m , porém is t por e as e o v ze s t e orna-s e im pos s ív l q uando s e e cons ide ra q ue prat icam e nt e t odos os s is t m as ope rat os m ode rnos s ão e s crit e iv os e m C. A m udança de l inguage m t orna-s e part arm e nt crít icul e ica q uando é ne ce s s ário ace s s o de baixo-nív lao h ardw are . A boa e not ícia é q ue as l inguage ns e s t a e v uir, ão ol e a s e gurança t ornou-s e um as s unt s ério. o P or e xe m pl a M icros of com a s ua o, t iniciat a .NET re s cre v u por int iro o V ual iv , e e is B ic e V ualC+ + com a s e gurança e m as is m e nt . Adicional e nt , a l e m e inguage m V ual is C# q ue f de s e nh ada por com plt com a oi e o s e gurança e m m e nt . e I plm e nt e cons t m e ar ruir s e gurança de nt do código. P ro ode de m orar m ais t m po, e cons om e m ais e s f e orço, m as o s ofw are pode s e r cons t t ruído com a s e gurança e m m e nt . Se no e xe m pl e o ant rior e , t és s e m os iv adicionado um pas s o e xt ra, at ingiríam os ainda um m e lor nív l s e gurança: h e de strncpy(buffer, arg, sizeof(buffer)); Nov e nt , am e is t o pode re m e t r e a v rdade ira e 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 ncoraj ada?Se rá dado o t m po e xt e ra ne ce s s ário para im plm e nt e ar a s e gurança ade q uada? Tipicam e nt , e inf l e nt , a re s pos t é e e izm e a não. 4. 2. El inar o us o de im f unçõe s de bibl e cas iot com v ne rabil ul idade s . L inguage ns de program ação, s ão t v ne ráv is com o o ão ul e program ador pe rm it e q ue s e j . No am e xe m pl dado, no ínicio, ut izám os um a o il f unção v ne ráv lda St ul e andard C L ibrary (s t rcpy ) Es t é um a, de v . a árias , f unçõe s e xis t nt s na bibl e ca q ue f h am e m e e iot al v rif e icar o com prim e nt l it dos s e us o/im e argum e nt . P e xe m pl pode ríam os t r os or o, e corrigido a nos s a apl icação al rando t e unicam e nt um a l a de código: e inh // substituindo: strcpy(buffer, arg); // por: strncpy(buffer, arg, 10); Ut izar m ódul de bibl e cas s e guras . il os iot B iot cas de s e gurança e m s t ibl e rings e s t ão dis ponív is e m l e inguage ns com o C+ + . P or e xe m pl a C+ + St o, andard T m pl e L e at ibrary (STL of re ce a cl s e St ) e as ring. Es t cl s e a as of re ce f e unçõe s int rnas q ue s ão s e guras e no t am e nt das s t rat o rings , e de v s e r e pre f rida e m re l e ação às f unçõe s us uais . 5. Ut izar il bibl e cas iot dis ponív is e (M iddlw are ) Exis t m v e . e árias bibl e cas de iot “s e gurança” dis ponív is para ut ização. P e il or e xe m pl a B l L o, e l abs de s e nv v u a ole “l af ” q ue prot ge a ut ização de ibs e e il f unçõe s ins e guras . L af f ibs e unciona na e s t ura da s t , e pe rm it as s e gurar q ue rut ack e q uando um a f unção é e xe cut ada, o e nde re ço de re t orno não é al rado. No t e e nt o, com o m uit ant as out ras bibl e cas , iot e s t não é im une a f h as e de v s e r a al e s e m pre ut izada a úl a v rs ão. il t im e <26> s e gurança 6. Ut izar f rram e nt de anále do código. il e as is F oram f it v e as árias t nt iv de criar um a e at as apl icação q ue e xe cut s e um a anále no as is código f e e t nt s e e ncont pot nciais ont e as rar e f h as , incl iv al us e B f r O v rfow ’s . Um a ufe e l apl icação e xe m pl ar ch am a-s e P y Pus urif l criada pe l Rat a ional (h tp:/w w w .rat ’s t / ional .com ) q ue e xe cut anále s a código e s crit e m a is o Jav a, C ou C+ + e de t ct e a v árias v ne rabil ul idade s . F izando inal Educação é a ch av no pe rcurs o de t e ornar um a apl icação s e gura. G rande part dos e program adore s s abe m da ne ce s s idade de v rif e icar dados int roduzidos pe l ut izador o il , v rif e icar os l it s nas ope raçõe s de dados , im e e nt out , m as poucos t re ros êm a noção das cons e q uências da f t de s t at nçõe s . É al a as e ne ce s s ário conh e ce r e s t cons e q uências as para pode rm os adopt ar as de v idas prát icas . P v ze s não s e t a ape nas de or e rat um a pot ncial f h a ou cras h e al 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 ut izadore s . il De v m e e xis t ir m ét odos e cicl os no de s e nv v e nt do s ofw are , e m q ue o olim o t t st e ar do s ofw are t tm e um pape l im port e . Um a m aior at nção de v s e r ant e e dada a t odos os dados obt idos do ut izador q ue r s e j do t cl il , a e ado, f e iro, ich s ock e t pipe , e t , c. 7. Ut izar f rram e nt de opt ização do il e as im com pil ador. P icam e nt um conce it nov rat e o o, v árias e xt ns õe s f e oram re ce nt m e nt f it e e e as dis ponív is para f e uncionar dire ct e nt com am e o com pil ador q ue pe rm it m m onit e orizar o com port e nt do RET (e nde re ço de re t am o orno dum a de t rm inada f e unção) e s alaguardar v e s t v or de pot nciais al raçõe s . St e al e t e ack Sh ie l (h tp:/w w w .ange l .com / k / t s h ie l d t / f ire s s ack d) e (h h tp:/w w w .re s e arch .ibm .com /rl e ct / e cu t / t/ proj s s rit / s p) ys . 8. <27> F ábio P dros a e Act izar o s is t m a ope rat o e ual e iv apl icação. T v z a m e lor de f s a é m ant rale h e e se of ns iv e o e inf ado. orm Nov as v ne rabil ul idade s s ão de s cobe rt as e re port adas t odos os dias . Apl icar as de v idas al raçõe s e act izaçõe s às apl t e ual icaçõe s é f undam e nt . P e xe m pl re ce nt m e nt f al or o, e e oi de s cobe rt um a f h a na AP –M e s s age B o al I oxA – para q ue m de s e nv v apl ole icaçõe s e m W indow s e s t f a unção é bas t e f il pois ant am iar, é ut izada para m os t il rar m e ns age ns de e rro/ is o/ orm ação na pl af a. Es t av inf at orm e e xpl é agora conh e cido com o o prim e iro oit e xpl do W indow s V t (abrange o W indow s oit is a XP2003/ is t . Um program ador q ue ut ize / V a) il e s t AP para criar m e ns age ns e m q ue de a I al a f a é pe rm it gum orm ido ao ut izador il f orne ce r o t xt a s e r col e o ocado na m e ns age m , t êm um a pot ncial f h a na e al apl icação q ue pe rm it e um at acant e bl ue ar o Sis t m a oq e O pe rat o. iv M ais inf açõe s e m h tp:/w w w .s e curit am .com / orm t / e w indow s ntocus / 00R0AH P .h t l f 6D K m . Sit s acons e lados ao lit int re s s ado: e h e or e • tp:/e n.w ik ipe dia.org/ ik i/ h t / w Expl _(com pu oit t r_s e curit ) e y • tp:/ins e cure .org/ t/ m as h s t .h t l h t / s fs ack m • tp:/j ianor ripod.com /am agra-bof xt h t /ul .t l .t • tp:/w w w .m il 0rm .com / h t / w • tp:/w w w .m e t pl .com / h t / as oit t cnol e ogias Conce it B icos os ás O cl t r part dum princípio t s im pls q ue us e e ão e q ualue r pe s s oa pode t r um e m cas a. A q e part do m om e nt e m q ue l ir o igam os dois com put adore s e de al gum m odo cons e guim os t r com unicação e nt am bos e re (v re de l , W ire ls s , USB F w ire , e nt ia ocal e , ire re out ) é pos s ív ldiv ros e idir t f . Es t div ão are as a is de t f é o pont ce nt da ide ia por t are as o ral rás de um cl t r. us e V os part de um e xe m pl s im pls : am ir o e s upondo q ue t m os um a apl e icação q ue e xe cut duas s om as inde pe nde nt s . Se s ó a e t és s e m os um com put iv ador o proce dim e nt o norm als e ria a m áq uina f r prim e iro um a aze s om a e de pois a out m as v os s upor q ue ra, am t m os dois com put e adore s q ue cons e gue m com unicar um com o out P s am os e nt ro. as ão ao cl t ring, um de ls (o m as t r) as s um e a us e e e f unção de dis t ribuir t rabalo e nt os dois . O h re out (s l e ) ape nas re ce be “orde ns ” do q ue ro av t m a f r. (Es t div ão de t f é m uit e aze a is are as as v ze s crít e ica e t m de s e r m uit be m e o program ada pe l program ador.) Ne s t cas o o e a div ão s e ria s im pls , o m as t r f is e e icav com a um a das s om as para e xe cut e daria a ar out ao s l e , q ue a re ce bia pe l m e io de ra av o com unicação ut izado e de v v o re s ul il olia t ado pe l m e s m o canal No f o . inalo m as t r t ria e e am bos os re s ul t ados das cont e pode ria as s e guir o norm al l de e xe cução. D e not fuxo ar q ue am bas as s om as s e riam f it ao m e s m o e as t m po, m as e m e m áq uinas dif re nt s , e e de m orando port o m e t ant ade do t m po e inicial (s e m cont com as ov rh e ads da ar e com unicação) . Es t é o princípio bás ico do cl t ring e pode e us e s e v r q ue h á div rs os f ore s a t r e m e e act e cont q uando m ont os um cl t r: de s de a am us e l igação e nt m áq uinas (l ência e l re at argura de banda) núm e ro de m áq uinas int rl , e igadas (t bém ch am ados nós ) capacidade de am , parallm o da apl e is icação at ao cus t t al é o ot de t odo o s is t m a e , m uit im port e , a e o ant f unção do s is t m a, pois a conf e iguração da m áq uina v aria m uit com a f o unção f inal ue q o cl t r irá de s e m pe nh ar. us e Cls t ring u e Cl t ring é o agre gar dois ou m ais us e com put adore s de m odo a q ue e s t s e f uncione m e m parall para um m e s m o e o f . D e s t m odo t m os o q ue é ch am ado im e e cl t r um grupo de m áq uinas int rl us e , e igadas v ia (por e xe m pl o) re de l ocal q ue cons e gue m com unicar e nt s i. re Ne ce s s idade e I port m ância Cada v z m ais s e ut izam com put e il adore s para re s ole r os m ais div rs os problm as . À v e e m e dida q ue e s t s v e ão apare ce ndo e cre s ce ndo e m com plxidade é ne ce s s ário e ir e ncont rando nov os m ét odos para s e r be m s uce dido na s ua re s ol ução. Se ndo q ue a abordage m inicial ais com um é a m de t nt ach ar um m e lor al m o e s t e ar h gorit a ne m s e m pre é cons e guida. M uit os problm as q ue s urge m h oj e m dia s ão e e s im pls m e nt e e de m as iado grande s e m com plxidade (m e s m o com al m os e gorit bas t e t ant rabalados e opt izados ) para h im s e re m re s olidos por um a m áq uina is ol v ada. É ne s t pont q ue e nt o cl t ring. Se e o ra us e cons e guim os ach ar um a s ol ução m as ut izando um a s ó m áq uina não a obt m os il e e m t m po út , e nt e il ão v os parall o am e izar proce s s am e nt de m odo a q ue e s t s e j o e a dis t ribuído por m ais q ue um a m áq uina. <28> t cnol e ogias M ode l de Cl t ring os us e Com o pas s ar dos anos o cl t ring e v uiu us e ol de s de um a ide ia inicialm ais f ocada e m re s ole r grande s problm as para out v e ras áre as , onde o q ue t m m ais im port e ância é a cone ct idade e nt m áq uinas , s e gue -s e iv re um a lt das áre as onde a im port is a ância do cl t ring (de um ou out m odo) t m us e ro e cre s cido. Sis t m as T e rant s a F h as e ol e al Ne s t s s is t m as t m os ge ral e nt um a e e e m e 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 t ui a it prim e ira no cas o de s t f h ar Es t t a al . e ipo de e s q ue m a t m bas t e apl e ant icação e m bas e de dados , onde um prim e iro s e rv idor é dado com o principale corre a apl icação norm al e nt , e xis t m e indo um s e gundo q ue v m ant ndo um a cópia da inf ação e ai e orm as s um e o pape lprincipalcas o h aj um a a f h a de f al uncionam e nt no prim e iro. I t o so pe rm it m ant r t e e odo o s is t m a a f e uncionar s e m pre j uízo para ut izadore s . Es t é um a il a conf iguração s im pls e e xis t m num e ros as e e f as de div orm idir os dados , pode ndo os com put adore s e s t ar e m s al , e dif as ícios , país e s ou at cont nt s dif re nt s , de é ine e e e m odo a e v ar cat t e s nat it ás rof urais e m l arga e s cal ou acide nt s f icos l a e ís ocais . Com put ação P e l aral a Cons is t na div ão por v e is árias m áq uinas de um m e s m o problm a. T e odas t rabalam e m h conj o e unt cada um a re s ole v um a pe q ue na part de s s e m e s m o problm a. e e G e ral e nt para e s t t m e e ipo de t rabalo h ape nas é ne ce s s ário CP Tim e por part de U e cada com put ador s e ndo o ace s s o a , dis cos baixo ou nul (de pe nde nt , no o e e nt o, do problm a e m q ue s t . ant e ão) Arm aze nam e nt e m L o arga Es cal a Ut izado por m ot s de bus ca com o o il ore G oogl e s t t e e ipo de cl t ring é (e m us e princípio) s e m e lant h e à com put ação parall Em v z de s e dis t e a. e ribuir código a e xe cut aq ui s ão dis t ar ribuídos dados a arm aze nar e m dis co. Com o cada m áq uina não t m capacidade para s e l e igar a ce nt nas de dis cos é ne ce s s ário o us o de e v arias m áq uinas , cada um a com v ários dis cos . Es t t e ipo de cl t ring al ia o us e iv proce s s am e nt q ue cada m áq uina gas t o a e m ace s s os a dis co e ace lra os proce s s os e de lit e ura. Ape s ar de s t v age ns a s ua as ant principal f unção cont inua a s e r o arm aze nam e nt Se um a dada bas e de o. dados f de t anh o cons ide ráv l s t é or am e e a t bém um a opção a t r e m cont e am e a, m uit v ze s a única. At nção q ue ne s t as e e e s is t m a não s e f a e m dados re pl e al icados (copias de s e gurança) pode ndo t bém , am s e r al go a t r e m cont q uando s e e a de s e nh a um cl t r de s t nat za. us e a ure D is t ribuição de W ork l oad Apl ica-s e o cl t ring q uando t m os um a us e e m áq uina a f orne ce r de t rm inado s e rv e iço e , por al a razão, e s t de ixa de cons e guir gum a (ou nunca cons e guiu) dar re s pos t a (s at f r t is aze odos os pe didos ) M ont -s e . am e nt ão v árias m áq uinas a f orne ce r e s s e m e s m o s e rv iço e div m -s e os pe didos ide e nt e l . Um e xe m pl um a m áq uina a re as o: corre r um W e b Se rv r (H TTP pode não e d) cons e gui s at f r t is aze odos os pe didos de q ue m v it as páginas al adas e m dis co. is a oj Ne s t cas o e xis t a h ipót s e de m ont e e e ar um a out m áq uina com o m e s m o W e b ra Se rv r e um a cópia e xact do dis co do e a s e rv idor inicial (As m áq uinas e ncont . ram -s e int rl e igados e um a de l as (s l e ) irá av m odif icar o s e u cont údo e m dis co s e m pre e q ue al go f or m udado no m as t r e .) F m e nt inal e pode m os dire ccionar os v it e s para um ou out is ant ro s e rv idor conf e orm a afuência l de cada com put ador e v ando a s obre carga de , it cada um de ls . e M anut nção e M onit e orização Ne s t cas o t m os um núm e ro e lv e e e ado de m áq uinas q ue q ue re m os m onit orizar . <29 > proj ct e o É pos s íve l f -l “à m ão” m as pode s e r aze o de m orado. A s ol ução é l igar t odas e s s as m áq uinas a um a nova q ue corra apl icaçõe s de m onit orização, de m odo a avis ar o re s pons áve l q uando h ouve r f h as . D e pe ndo da nat za do al ure s is t m a pode m os ainda ut izar e s t l e il as igaçõe s para act izaçõe s de s ofw are e m anut nção ual t e das m áq uinas m onit orizadas . Um e xe m pl de s t o a s it uação pode s e r e ncont rado nas e m pre s as de W e b H os t (q ue f ing orne ce m e s paço na Int rne t e para criação de páginas ). São e m pre s as q ue , ge ral e nt , cont m e am com grande núm e ro de s e rvidore s e q ue , de vido à nat za do s ofw are ure t q ue corre m , ne ce s s it am de act izaçõe s com ual al a f q uência. Ne s t cas o a m onit gum re e orização é t bém út para de t rm inar s e um a m áq uina am il e e s t com problm as , is t é crít á e o ico para um ne gócio q ue t m de e s t a corre r 24 h oras por e ar dia. P rf ance do Cl t r e orm us e A pe rf ance de um cl t r de pe nde do orm us e núm e ro (e q ual idade ) das m áq uinas q ue e s t int rl ão e igadas . Q uando é ne ce s s ário m ais capacidade de arm aze nam e nt ou m ais o pode r com put acionals ão adicionados m ais dis cos ou m ais m áq uinas . O cre s cim e nt de o pe rf ance , a nív lcom put orm e acional não é , l ar m as s e rv os propós it ne ce s s ários ine e os s e m grande s botlne ck s . te O m aior problm a s urge na l e igação v re de . ia Exis t m duas grande s q ue s t s : l e õe argura de banda e l ência. O s problm as de l at e argura de banda s ão f m e nt acil e re s olidos v m udando a l igação ou adicionado l as inh e xt O s e gundo problm a, a l ência, t ra. e at rás bas t e s m ais dif dade s . A l ência é o ant icul at t m po q ue os dados de m oram a pas s ar por e t odo o h ardw are de um pont inicial ao o pont f o inal (inde pe nde nt m e nt do t anh o e e am dos dados , is t é, t m po adicionado ao o e t m po t alde pas s age m da inf ação) e ot orm . Es t f or é im pos s ív lde anul m as pode e act e ar s e r m e lorado com h ardw are de boa h q ual idade . Es t q ue s t t problm as com a ão raz e os q uais o program ador de v cont t e ar, ais com o a s incronização. É im port e t r ant e noção de q uant t m po s e gas t e m o e a com unicação v re de de m odo a m inim izar ia o t m po pe rdido e nq uant os dados s ão e o e nv iados de nó a nó. Q uando a program ação de cada nó é e f nt a icie e baixa pe rf ance da re de é um problm a orm e de m e nor im port ância. Um a boa t écnica para e v ar pe rda de t m po e m e nv it e ios de dados pe l re de é a e xe cução de duas a ins t âncias do m e s m o program a na m e s m a m áq uina. Enq uant um a com unica e e s pe ra o a re ce pção ou e nv de dados a out io ra s e gue o proce s s am e nt norm al o . G rid Com put ing Conce it e de f o inição bas t e s e m e lant à ant h e com put ação parall m as com um a dif re nça e a e e m m uit cas os . É nat os uralus ar o t rm o G rid e Com put ing para re f rir um a re de e de com put ação parall s obre a Int rne t É na e a e . m e s m a com put ação parall m as com e a al as l it gum im açõe s ao níve l da l argura de banda e l ência. Exe m pl s ão o G IM P at os S, SETI@ H om e , F ding@ H om e , e t ol c. Es t s proj ct ne ce s s it e e os am de grande pode r com put acional e ao invés de com prare m m áq uinas q ue f ue m ao s e u s e rviço opt iq aram por dis t ribuir pe l s e us ut izadore s pe q ue nos os il program as q ue re ce be m dados de um s e rvidor ce nt , e f ct ral e uam os cál os e de vol m os cul ve re s ul t ados a e s s e m e s m o s e rvidor. Es t s s ão e proj ct de nat za m uit própria, e m q ue e os ure o um a l igação cons t e à Int rne t não é ant e ne ce s s ária, ne m t pouco q ue s e j rápida ou ão a de baixa l ência (al im pos s íve lde garant at go ir). M uit os de ls ape nas ne ce s s it e am 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 t ados . São um t ipo de cl t ring e m e rge nt pois cada ve z m ais us e e pe s s oas t com put êm adore s e m cas a e ace s s o à Int rne t Es t m ode l t m , com o é óbvio, e . e o e bas t e s l it ant im açõe s pe l q ue a s ua m aior o ut ização é j o de proj ct m e nos crít il unt e os icos e onde o dinh e iro é um a q ue s t de pe s o. ão <30> P dro V rrum a & L Re nt e e uis e t orial ut O nam e s pace Sy s t m .D at e a.Sq l ie nt dá-nos Cl ace s s o a t odas as cl s e s as q ue corre s ponde m ao prov r para o SQ L ide Se rv r, pe rm it e indo-nos as s im a l igação ao s e rv idor, e xe cução de com andos , lit e ura dos dados , e t t c, udo is t com as s uas cl s e s o as incl uídas . P ara e xe m plicarm os a ut ização de s t if il as cl s e s , ire m os cons ide rar um a s it as uação não re al : V ual as ic .NET is B 5ª P e art Com o f re f rido no art oi e igo ant rior, o t m a e e de s t e dição é re l a acionado com bas e de dados , m ais concre t e nt , ire m os f ar am e al s obre a m anipul ação de dados e nt o re V .NET (h tp:/m s dn2.m icros of.com / n-us / B t / t e v ic/ f t px) e o M S SQ L Se rv r bas de aul .as e 2005™ (h tp:/w w w .m icros of.com / q l t / t s ) . O AD O .NET é um m ode l de ace s s o de o dados (s uce s s or do AD O – Acce s s D at a O bj ct q ue nos f e ) orne ce o ace s s o a v ariados “dat s ource s ” com o por e xe m pl ao M S SQ L a o Se rv r 2005, q ue é o q ue v os ut izar para e am il os e xe m pl ne s t art os e igo. As cl s e s do as AD O .NET e s t re f re nciadas no nam e s pace ão e Sy s t m .D at m as ne s t art e a e igo v os ut izar o am il nam e s pace Sy s t m .D at e a.Sq l ie nt Cl . “No s it da Re v t P e is a rogram ar e s t ão lt is adas t odas as e diçõe s l ançadas at é ao m om e nt o. Um a apl icação f oi de s e nv v olida para pe rm it a ins e rção, ir al ração e re m oção das e diçõe s por t e u m adm inis t rador q u e a t nh a ins t ada e al no s e u com pu t ador. T odos e s t s dados e e st ão arm aze nados nu m a bas e de dados e m M S SQ L Se rv r 2005.” e A bas e de dados ut izada irá cont r ape nas il e 2 t abe l . Um a arm aze na as e diçõe s j as á l ançadas e a out ra cont ém t odos os com e nt ários ins e ridos pe l v it e s . os is ant P ara pode rm os com unicar com a bas e de dados q ue criam os pre cis am os de e st abe lce r um a l e igação e nt a nos s a re apl icação e o SG B . O obj ct Conne ct D e o ion é us ado e nt ão ne s t s it a uação, pe rm it indonos com unicar com a bas e de dados ut izando cl s e s com o a Sq l il as Conne ct ion. <31> t orial ut 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 ct pre cis am os t bém de indicar um a Conne ct ion am ionSt ring2, us ada para e s t abe lce rm os a l e 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 t abe lcida a l e igação à bas e de dados é dados . P ara is s o pre cis am os de us ar a cl s e as 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 L ou e nt um St -SQ ão ore dados e um a l igação (Sq l Conne ct ion) t m po de com e çar a m anipul os nos s os e ar Sq l Com m and para ins e rir act izar ou at , ual é dados . Com e s t cl s e pode m os as s ociar a as d P roce dure a s e r e xe cut ado na bas e de SqlCommand(“Expressão T-SQL ou Stored Procedure”, SqlConnection) P ara e xe cut arm os o Sq l Com m and pode m os Exe cut Re ade r() e Exe cut Scal . e e ar() us ar os m ét odos Exe cut NonQ ue ry () e , Exe cut NonQ ue ry : Exe cut a e xpre s s ão e de vole o núm e ro de l as af ct e a v inh e adas na bas e de dados Exe cut Re ade r: Exe cut a e xpre s s ão e cons t um Sq lat e a rói D aRe ade r com os dados de v v olidos Exe cut Scal Exe cut a e xpre s s ão e de vole o val da prim e ira col na prim e ira e ar: a v or una l a dos re s ul inh t ados de v v olidos . (Es t m ét e odo é norm al e nt ut izado q uando t m os um a m e il e e xpre s s ão q ue de v v v ore s agre gados com o por e xe m pl “SEL ole al o ECT CO UNT(* F M ) RO t abe l a”.) P roce dim e nt : os •ns e rir Edição I 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> t orial ut 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 • t Al e 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> t orial ut 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 • m ov r Edição Re e 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> t orial ut Com o pode m v r, e s t é um a m ane ira s im pls de e nv pe didos à bas e de dados para e a e iar e xe cut al ar go. Um a t écnica m uit us ada, é o us o de parâm e t nos Sq l o ros Com m ands de f a a s im plicar e orm if cl icar o nos s o código. Em v z de t rm os a t f de concat nar s t arif e e are a e rings , com o por e xe m pl o, “SEL ECT * F M t RO abe l W H ERE I a d=” & v ariav l & “ Nom e =’” & v e _id ariav l e _nom e & “’”, o q ue f aria com q ue um a e xpre s s ão m ais e xt ns a s e t e orna-s e bas t e conf a, pode m os as s ociar ant us ao Sq l Com m and um ou v ários parâm e t (Sq laram e t r) ros P e . cmdInserir.Parameters.Add("@nr", SqlDbType.Int, 4).Value = Convert.ToInt32(txtNumero.Text) de : P roce dim e nt “I e rir Edição” o ns Um Sq laram e t r na s ua de cl P e aração m ais s im pls , pode cont r um nom e (“@ nr”) o t e e , ipo de dados (Sq lbT pe .I ) e um t anh o (4) O nom e do parâm e t é de pois us ado na e xpre s s ão T D y nt am . ro SQ L com o v or at al ribuído na proprie dade V ue . Ne s t s it al a uação, t a-s e de um parâm e t rat ro com a dire cção de I nput . Após e nt e xe cut os o com ando, t m os de pois q ue nos ce rt icar q ue t ão arm e if udo corre u com o pre v t e s e o q ue pre t ndíam os f re al e nt e xe cut is o e oi m e ado. Com o re f rim os e m cim a, o e m ét odo Exe cut NonQ ue ry () de v v o núm e ro de l as q ue f e ole inh oram af ct e adas na e xe cução de um a e xpre s s ão. A v ariáv l“NrL as Af ct e inh e adas ” arm aze na e nt e s s a inf ação, bas t ão orm ando e nt s e r igual ao m ét ão ada odo re f rido. e NrLinhasAfectadas = cmdInserir.ExecuteNonQuery() If NrLinhasAfectadas > 0 Then MessageBox.Show("O registo foi inserido com sucesso", "P@P", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) de : P roce dim e nt “I e rir Edição” o ns P ara pode rm os al rar ou re m ov r um a e dição, pre cis am os de indicar à nos s a apl t e e icação q ual é o núm e ro do s e u re gis t de f a a e xe cut am bas as e xpre s s õe s corre ct e nt . Com o o orm ar am e pude m os v rif e icar no proce dim e nt Al rarEdicao() e Re m ov rEdicao, t m os as s e guint s o t e e e e e xpre s s õe s as s ociadas aos com andos : UP ATE Edicoe s "& _ D " Nr_Edicao = @ nr,Tit o = @ t ul D at = @ dat "& _ SET ul it o, a a " H ERE I = "& Conv rt oI 32(dgv W D e .T nt Edicoe s .Curre nt .Ce l(" ".V ue ) Row l I ) al s D D EL F M Edicoe s "& _ ETE RO " Nr_Edicao = @ nr,Tit o = @ t ul D at = @ dat "& _ SET ul it o, a a " H ERE I = "& Conv rt oI 32(dgv W D e .T nt Edicoe s .Curre nt .Ce l(" ".V ue ) Row l I ) al s D Es t I é at e D ribuído pe l v or arm aze nado da col o al una com o nom e “I ” e na l a D inh s e lccionada do com pone nt D at ridV w (dgv e e aG ie Edicoe s ) com pone nt e s t q ue nos pe rm it , e e ir lt t is ar odos os re gis t da t os abe l Ediçõe s . a <35> t orial ut P roce dim e nt L t o is arEdicoe 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 t proce dim e nt f m os us o dos obj ct D at t e D at e o aze e os aSe aAdapt r. P m os cons ide rar o e ode D at t com o um conj o de dados , t com o as e s t uras das bas e de dados , pe rm it aSe unt al rut indo as s im um a m aior f idade na m anipul acil ação dos dados , t ndo t bém com o v age ns a e am ant não ne ce s s idade de e s t com um a l ar igação act a à bas e de dados , e a não int racção iv e dire ct com a nos s a f e de dados . O D at a ont aAdapt r por s ua v z, é a pont de l e e e igação e nt a re nos s a bas e de dados e o D at t aSe . P ara e s t s it a uação, ut izám os o Sq lat il D aAdapt r e as s ocíam os um com ando com um a e e xpre s s ão T Lpara nos de v v r a lt das e diçõe s ins e ridas na bas e de dados . Após is s o, -SQ ole is a us ám os o m ét odo F l q ue v pre e nch e r o D at t com os re s ul il , ai aSe t ados de v v olidos , pode ndo as s im de f o nos s o D at tcom o o D at inir aSe aSource da D at ridV w q ue v m os t as e diçõe s . aG ie ai rar F it is t t m os f m e nt a nos s a apl e o o, e inal e icação a f uncionar corre ct e nt , com a lt am e is age m das e diçõe s e a pos s ibil idade de ins e rir, al rar e re m ov r e diçõe s . t e e O proj ct de de m ons t e o ração e ncont e dis ponív l m : ra-s e e h tp:/w w w .port t / ugal -a-program ar.org/ igos / b5.rar art v <36> Tiago Sal gado gnu/inux l Ant riorm e nt à e s crit de s t art e e a e igo não e xis t ia um a v rs ão port e ugue s a de s t e program a. No e nt o, os m e m bros de s t ant a re v t diponibil is a izaram -s e , e , e xis t agora e um a t radução dis ponív lq ue f it e acilará a ut ização do program a e m m odo gráf il ico. D e pe ndências G rav ação do D e s k t op Q uant v ze s q uis criar um t orialcom a as e ut s ua dis t de G NU/ inux ou a e s cre v r um ro L e código q ue q ue ria part h ar e , e m v z de o il e apre s e nt com im age ns e com e nt ar ários , pe ns ou e m grav um v o cons igo a ar íde com e nt o? Criar um proj ct para a á-l e o e s col ou univ rs idade e m q ue um v o a e íde s e ria m ais f ácile prát ico de apre s e nt ar? Criar um v o para um a pl af a de íde at orm e L arning ou bL arning?O u s im pls m e nt , e e e e para m os t aos am igos os e f it 3D do rar e os se u D e sk t op? Ne s t art e igo irá s e r apre s e nt ada um a s ol ução para t . O program a us ado é o al re cordM y D e s k t op. • l ound2 (> 1.0.10) ibas • l ibc6 (> =2.3.2.ds 1-21) • l ibice 6 • l ibogg0 (> =1.1.2) • m6 l ibs • h e ora0 l ibt • orbis 0a (> =1.1.0) l ibv • orbis e nc2 (> =1.1.0) l ibv • orbis f e 3 (> =1.1.0) l ibv il • l ibx11-6 • l ibxdam age 1 • l xt ibxe 6 • ixe s 3 l ibxf • ib1g (> =1:1.2.1) zl Com andos A f a ge nérica de e xe cut o program a é: orm ar $ recordmydesktop re cordM y D e s k t op O re cordM y D e s k t é um program a criado op Joh n V arouh ak is , program ado e m C, l ançado e m 12 de Julo de 2006 (dat da h a ins crição do proj ct no Source F e o orge ) e dis ponív l e para dow nl oad em h tp:/re cordm y de s k t t / op.s ource f orge .ne t . A l nça de s t s ofw are é G P (G NU P ic ice e t L ubl L ns e ) Es t de m om e nt e m e s t ice . á o ado al a, m ais concre t e nt na v rs ão 0.3.1. ph am e e Ape s ar do program a original e r e m m odo s t xt e xis t um a v rs ão gráf e o e e ica us ando a pl af a G TK . at orm I t irá grav um f e iro com o nom e so ar ich out .ogg na s ua pas t h om e . P a ara parar a grav ação s im pls m e nt cl ue Ct + C. e e iq rl P ara de f inir o nom e do f e iro e / ich ou a l ização bas t ocal a: $ recordmydesktop /home/user/video.ogg O program a t bém pe rm it de f áre as a am e inir s e r grav adas . As s im pode us ar-s e : $ recordmydesktop -x x-pos -y y-pos -width largura -height altura -o video.ogg T o a opção x-pos com o a opção y-pos ant re f re m -s e à dis t e ância e m pixe l a part do s ir cant s upe rior e s q ue rdo. o <37> gnu/inux l As opçõe s l argura e al re f re m -s e , com o t ura e o próprio nom e indica, à al e l t ura argura da j ane l a s e r grav a ada. Se o t anh o da am j ane l ins e rido f m aior q ue o da re s ol a or ução act , s e rá not icado e nada acont ce rá. ual if e P e xe m pl s e f s e de f or o os inido com as s e guint s opçõe s : e $record recordmydesktop -x 348 -y 235 -width 494 -height 364 -o video.ogg P ara o program a codif icar o v o à íde m e dida q ue v grav ai ando pode us ar a opção --on-t e -fy-e ncoding. I t irá e xigir h l so m ais do proce s s ador l , ogo us e e s t opção a ape nas s e t e r um a boa m áq uina q ue iv ague nt as e xigências no proce s s am e nt e o v o. íde A q ual idade do v o é de f íde inida pe l o s e guint com ando e m q ue n é e nt 0 e e re 63(de f t: aul ) $ recordmydesktop -v_bitrate n G rav aria ape nas e s t part de um D e s k t a e op: P ara de f um at o a iniciar a grav inir ras ação bas t us ar: a $ recordmydesktop t[h/m] Com o de f t t as s um e o v or e m aul al s e gundos (bas t pôr um núm e ro) No a . e nt o s e q uis e r us ar um at o de h ou ant ras m inut os bas t a adicionar a lt e ra corre s ponde nt e a s e guir ao núm e ro. Exe m pl 5m , 1h . o: P ara grav o D e s k t ar op com o com piz ou be ry l ne ce s s ário t bém us ar a opção -é am f l h ot q ue t um a Scre e nSh ot a cada ul -s s ira f e. ram P ara s e t r um curs or dif re nt pode us ar-s e : e e e $ recordmydesktop -dummy-cursor cor O v or cor pode s e r bl (pre t ou w h it al ack o) e (branco) I s ubs t uir o s e u curs or por um . rá it curs or pe q ue no da cor de f inida. I al de para pas s ar de s pe rce bido. P ode ainda s e r de f inido o núm e ro de f e s por s e gundo (N) com o s e guint ram e com ando: $ recordmydesktop -fps N M odo gráf ico P ara não us ar s om na s ua grav ação ape nas t m de adicionar a opção --noe s ound. <38> gnu/inux l D e pe ndências P ode s e r us ado para criar nov , para e dit as ar, para corrigir ou para s incronizar. Es t e program a t m um gráf e ico do e s pe ct de ro áudio o q ue f it e m m uit o t acila o rabalo de h s incronizar um a lge nda. Com e s t gráf e e ico do e s pe ct de áudio pode v rif ro e icar-s e as e nt radas do s om , e as s im , f r um a aze lge ndage m de f a corre ct e f e orm a ácils e m v rif e icar t as v ze s o f m e poupando t m po. ant e il e • cordm y de s k t re op • xbas e -cl nt ie s • t on-gt 2 py h k • t on-gnom e 2e xt py h ras • t on py h Com o m odo gráf ico o program a f ica bas t e m ais prát ant ico e f ácilde us ar. P ara s e lccionar um a part da j e e ane l bas t a a cl icar na im age m e arras t ar at onde é pre t ndido. T e odas as opçõe s e s t t bém ão am dis ponív is no m e nu " ance d" No f e Adv . inal da grav ação, bas t cl a icar no ícone na f a orm de um q uadrado q ue irá e s t col ar ocado na áre a de not icação do s e u D e s k t if op. Concl uindo o s e u v o íde O f at .ogg, ape s ar de s e r um f at orm o orm o ope n-s ource e t bom com o out , não é ão ros m uit us ado na ge ne ral o idade . P is s o o or m e lor é t v z conv rt r o s e u v o para h ale e e íde av q ue é um f at m ais conh e cido e para i, orm o al dis s o t ém orna o v o um pouco m ais íde pe q ue no. P ara t pode us ar o m e ncode r, um al pacot do program a m pl e r. B t us ar: e ay as a $ mencoder -idx video.ogg -ovc lavc oac mp3lame -o video-saida.avi G rav com s om ar O re cordM y D e s k t t m a pos s ibil op e idade de grav com s om . No e nt o, ne m t ar ant odos nós gos t os de f ar e nq uant criam os o am al o t orial P is s o, m uit v ze s o m e lor é ut . or as e h f r o v o s ilncios am e nt , e m ais t aze íde e e arde adicionar o s om . P ara t e xis t m v al e ariados program as com o por e xe m pl o G rav o ador de Som do G NO M E e o Audacit y. P ara adicionar o s om pode s e r us ado o m e ncode r com o com ando -audiof e , com o il por e xe m pl o: $ mencoder -idx out.ogg -ovc lavc oac mp3lame -audiofile som.mp3 -o video-saida.avi L ge ndando o t orial e ut P v ze s , por um a q ue s t de ace s s ibil or e ão idade a t odas as pe s s oas , o m e lor é lge ndar o h e t orialExis t m v ut . e árias opçõe s , por e xe m pl o o Jublr, o Sabbu e o Subt l Edit V j os e ite or. e am al guns as pe ct do Subt l Edit O Subt l os ite or. ite Edit é um program a grát prot gido pe l or is e a l nça G P para e dit f m e nt lge ndas . ice L ar acil e e B t t r o f e iro m p3 (ou out f at de as a e ich ro orm o s om ) q ue o m e ncode r f o t az rabalo. h No f de e xe cut t im ar odos e s t s pas s os t rá o e e s e u v o pront a s e r part h ado, pode ndo íde o il s e r v t ouv is o, ido e l ido por t odos s e m re s t riçõe s al as . gum <39 > Joe l Ram os anále s is D e s e nv v e nt O rie nt olim o ado por O bj ct e os João H ug o M iranda Jos é A nt onio A l e ida m Edit ora: Ce nt roAtant l ico.pt Colcção: T cnol e e ogias P áginas : 232 1ª e dição: O ut ubro de 2005 I N: 9 89 -615-013-3 SB Se o lit e or não s oube r o q ue é de s e nv v e nt olim o orie nt ado a obj ct , e os dom ain-driv n de s ign ou re f oring e t e r e act iv curios idade e m apre nde r s obre e s t s t m as , e e e nt e s t l ro é para s i. Se , incl iv f um ão e iv us é, or program ador q ue não s aiba e xact e nt am e com o pl ar um proj ct q ue pre t nda ane e o e com e çar, e nt ão v ai e ncont rar m uit as re s pos t ne s t l ro. as e iv " e s e nv v e nt orie nt D olim o ado por obj ct e os D om ain-D riv n D e s ign, T s t s Unit e e e ários e Re f oring" de João H ugo M iranda e Jos é act , Ant ónio Al e ida, m e dit ado pe l o Ce nt l ico.pt é um l ro q ue f roAtânt , iv oca t m as e e conce it e m v os oga na áre a da e nge nh aria de s ofw are , com o o conce it de obj ct , t o e os dom ain-driv n de s ign, de s e nv v e nt t s t e olim o e driv n, de s e nv v e nt de int rf s de e olim o e ace ut ização e re f oring. il act Q ue m q uis e s s e e s t udar e s t t m át as e icas t ria e de re corre r a l ros e s crit e m ingl , v t iv os ês is o q ue não e xis t iam prat icam e nt re f rências e e ne nh um as e m l íngua nacional O l ro . iv aborda, port o, t m as cons ide rados de ant e nív l e rm édio-av e int ançado de f a s im pls , orm e pragm át ica e e s t ul e at para os im ant é iniciant s , al e argando as s im o públ alo da ico v obra. Se gue um e s t o re fe xiv e por v ze s il l o e t bém didáct am ico. P ara al ém de e xpore m f os act e abordage ns , os aut s cont ore am h is t órias , apre s e nt am e xe m pl prát , re fe ct m e os icos l e dis cut m os f os . A obra re l e act aciona ainda o paradigm a dos obj ct com as prát e os icas de program ação m ais re ce nt s e e de m ons t q ue a anále , de s e nh o e a ra is codif icação de um s is t m a de inf ação e orm não de v m s e r act idade s s e paradas , e iv com o é m uit us ualacont ce r. O l ro f o e iv az com q ue o lit s e s int int re s s ado com e or a e e s t s t m as , j q ue apre s e nt e xe m pl do e e á a os dia-a-dia de um program ador, e xce rt de os código de v idam e nt e com e nt ados , diagram as e e s q ue m as f it e os por prof s ionais . O s e xe m pl s ão e m C# , m as is os q ualue r pe s s oa com q conh e cim e nt os m ínim os de program ação de v rá s e gui-l e os s e m dif dade . icul É re com e ndado a e st udant s e de program ação e program adore s prof s ionais , obv e nt . P is iam e ode ainda s e r re com e ndado a ge s t s ore de proj ct , e os analt ou re s pons áv is t is as e écnicos j q ue á part do t xt e s pe cial e nt os prim e iros e e o, m e capít os , e s t ul abe lce o e nq uadram e nt e o conce pt ual das t m át e icas de bat idas ao l ongo dos re s t e s capít os . ant ul <40> Rui M aia int rne t e G oog l apre s e nt os 10 t rm os m ais procu rados de 2006 e a e O m ais f os o m ot de bu s ca da int rne t cont a a t am or e inu radição anu al de pu bl os de z t rm os m ais pe s q u is ados no s e u s it . icar e e A s du as pal avras m ais pe s q u is adas f oram Be bo e M y S pace , dois port ais de com u nidade s a criação de pág inas pe s s oais e af , s e g u idas pe l ins os f anát icos do f t bolcom " orl C u p" O víde o onl t bém m arca ue W d . ine am pre s e nça nas pe s q u is as dos int rnau t , no 4º lg ar com o s it e as u e Me t acaf e e m 7º com a pal e avra V o. ide P ara m ais inf açõe s : orm h t p:/ w w w .g oog l .com / l n/ s s / it e is t t / e int/ pre ze g e 2006.h t l m 1. Be bo 2. M y S pace 3. W orl C u p d 4. M e t acaf e 5. R adiobl og 6. W ik ipe dia 7. V o ide 8. R e be l de 9 . M ininova 10. W ik i Re gis t de m arcas onl o ine F dis ponibil oi izado dia 22 de D e ze m bro do pre s e nt ano e um a nov áre a no port do I t ut Nacional da a al ns it o P roprie dade I ndus t rial (I I , e nt NP) idade re s pons áv l pe l e o re gis t de m arcas , pat nt s e af , q ue pe rm it o re gis t o e e ins e o M arcas , D e s igns e I e nçõe s . Es t s is t m a pas s a a s e r nv e e m ais cóm odo para o ut izador v t não pre cis ar de s air il , is o de cas a ne m de t ar de pape l rat ada e s im ul am e nt t ane e m ais barat o. h tp:/w w w .inpi.pt t / Th e CSS P e r ow H á al gum t m po at , f apre s e nt e rás oi ado no f órum do P ugal rogram ar um ort -a-P s it bas t e int re s s ant para t e ant e e odos os program adore s w e b q ue q ue re m apre nde r CSS e / ou t rabalam com e l re gul e nt , f o do s it M auj h e arm e al e or (h tp:/w w w .m auj .com /. Es pant o. I t é o pe ns am e nt q ue m uit pode rão t / or ) os so o os t r ao abrir e s t s it , e e xpl o porq uê: grande q uant e e e ico idade de inf ação, orm f e l , principal e nt , e m P uguês . É ce rt q ue é port iáv e m e ort o uguês do B il m as ras , ainda h á e s pe rança q ue s e de s e nv v um a pl af a as s im e m P ugal ola at orm ort . F icam os à e s pe ra... <41> bl s cre e n ue Nov am e aça aos M acs a D if dade s e m l icul argar o com put ador nas f érias ... Nov gadge tpara o a f íl iP am ia od T cl e ado l 33t <42> com unidade Es t os am a iniciar um nov ano e e s t o a cos t a s e r um a época propícia às re fe xõe s um l e à int pe cção: olam os para o q ue ros h f m os ant riorm e nt e analam os de ize e e is acordo com o q ue pre t nde m os f r no e aze f uro. É um a al ut t ura do ano e m q ue , pe l o f o de e s t os no início, nos s e nt os act arm im re nov ados , pront a e nf nt t os re ar udo out v z ra e s e re al e nt t e r de s e r. D e pois das f s t m e iv e as de Nat e do Ano Nov Jane iro ch e ga e m al o, f orça e re f m -s e os pl , re nov -s e os aze anos am obj ct os . I t acont ce principal e nt e iv so e m e com as (grande s ) com unidade s . O ra, num a conv rs a com um m e m bro do e s t fdo P P e m f af @ inais de D e ze m bro, nos dias após o Nat e ant s de ch e gar o Ano Nov al e o, re fe ct s obre um as s unt e m q ue j t a l i o á inh pe ns ado ant riorm e nt , m as não do pont e e o de v t pe s s oal com o acont ce u ne s t is a e a dis cus s ão. O m e u colga pe rgunt e ou-m e q ue obj ct os , q ue m e t pre t ndia e u at e iv as e ingir e nq uant adm inis t o rador do P P D e f o, @ . act ponde re i bas t e na q ue s t e ach e i q ue ant ão podia re s ponde r e xact e nt com o q ue am e t a col inh ocado nos t ópicos q ue apre s e nt i e ao s t f m as q uando ia com e çar a e s cre v r af, e not i q ue a pe rgunt s e dirigia m ais ao q ue e a e u ach av e m e nos ao q ue a com unidade a re al e nt ne ce s s it a. m e av Com e ce i e nt ão por re s ponde r q ue q ue ro f r com q ue os program adore s do P P aze @ pas s e m o m áxim o t m po pos s ív l t e e a rabalar h no f órum , is t é, pre t ndo criar condiçõe s o e para q ue daq ui com e ce m a s urgir t rabalos h s érios e be m organizados . O m e u colga e com e nt q ue e ra um a t f dif , q ue ia ou are a ícil e nv v r m ais ge nt a t ole e rabalar de pe rt h o com igo ou e nt ão m ais t rabalo para os h act uais m e m bros do s t f Eu não pude af. dis cordar, pe l q ue cont o inue i a s onh ar al t o: dis s e q ue e m 2007 gos t a q ue s urgis s e o av prim e iro concurs o de program ação do P P @ , pat rocinado 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 t a de criar um e v nt no V rão av e o e do géne ro G oogl Sum m e r of Code , m as e e xcl iv para m e m bros do P P us o @ . O m e u colga af ou q ue e s t s dois e irm e "onh os "s ó pode riam av s ançar s e re al e nt m e cons e guis s e re al o prim e iro, o s onh o de izar criar condiçõe s para por os program adore s do P P a t @ rabalar e m pl af as da h at orm com unidade . M ais um a v z, não pude e dis cordar . F m e nt , dis s e inal e q ue out ro grande obj ct o m e u e nq uant adm inis t e iv o rador da com unidade e ra f r com aze q ue os proj ct agora e m arranq ue f s e m a e os icas t rabalar a t h odo o gás at ao f do é im prim e iro s e m e s t re de 2007. Se ria um av anço f abul o e daria ânim o e m uit os a v ade ao s t f e m ais pos s ibil ont af idade s aos ut izadore s q ue q uis e s s e m part il icipar O . colga com q ue m m ant a a conv rs a e inh e pe rgunt ou e nt ão s e não ia f ar do al cre s cim e nt de ut izadore s do f o il órum , s e não ia m ais um a v z apont e ar dados e s t ís t at icos . Eu re s pondi q ue , no cas o de cons e guir re al izar e s t s m e us s onh os e e nq uant adm inis t o rador da com unidade , t odas as e s t ís t at icas "al f 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 v r 2008. e Acont ce q ue e s t s m e us de s e j não s ão e e os de m odo al gum a prioridade do s t f do af P P Apont m ais um a v z, a dif re nça @ . o, e e e nt re obj ct os da com unidade e iv de obj ct os pe s s oais e nq uant adm inis t e iv o rador da com unidade . No e nt o, s onh ar é o ant prim e iro pas s o para a s at f is ação pe s s oal e e s pe ro q ue não s e j o úl o, no nos s o a t im cas o. Es pe ro q ue e m 2007 pos s am os t odos s onh ar uns com os out , m as m ais do q ue ros is s o, t rabalar no s e nt h ido de re al izar os nos s os de s e j . Es pe ro ainda q ue daq ui a os s e ns iv l e nt um ano, t nh am os t e m e e odos um grande s orris o na cara e e s t j os pront e am os a e ncarar out ros v , out oos ros s e nt idos 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 t nh am é á, e um 2007 ch e io de bons m om e nt e q ue os t raga pros pe ridade a 2008. Um grande abraço, e m nom e do s t fdo P P af @ . <43> Rui M aia Q ue re s part icipar na re v t is a P G RAM AR? ue re s int grar e s t RO Q e e proj ct e s cre v r art e o, e igos e aj udar at ornar e s t re v t num m arco a is a da program ação nacional ? V a ai w w w .re v t is a-program ar o .inf para m ais inf ação com o orm part icipar ou e nt cont a-nos por ão act @ port ugal -a-program ar .org P cis am os do apoio de t re odos para t ornar e s t proj ct ainda e e o m aior ... cont os com a t aj am ua uda re v t is aprogram ar A Re v t P G RAM AR é um proj ct is a RO e o da com unidade P ugal rogram ar ort -a-P w w w .port ugal -a-program ar .org w w w .re v t is a-program ar o .inf


Comments

Copyright © 2024 UPDOCS Inc.