Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas

Tipos de Dados em Scheme: Abstração de Dados e Procedimentos Superiores, Notas de estudo de Informática

Neste documento, aprenda sobre os diferentes tipos de dados em scheme, incluindo valores e expressões lógicas, abstração de dados e procedimentos superiores, e o tipo de dados par. Além disso, exploraremos a definição de listas e interações práticas com as funções já criadas. O documento também aborda a importância dos tipos de dados de alto nível como strings, dicionários, listas, e tuplas.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 12/12/2009

samuell-ralph-de-almeida-ramos-11
samuell-ralph-de-almeida-ramos-11 🇧🇷

5

(2)

7 documentos

1 / 44

Documentos relacionados


Pré-visualização parcial do texto

Baixe Tipos de Dados em Scheme: Abstração de Dados e Procedimentos Superiores e outras Notas de estudo em PDF para Informática, somente na Docsity! Revista nº6 - Janeiro de 2007 F ELA ECT EM o ld » — Introdução à Eru é em Scheme Inicie-se na programação com esta excelente linguagem. o É 4 4“ * Ed aitereres= [enc o M carta toja ” ' PRIDE programar em Python. à ) - ! ta E q ' y i 4 E NY a l ' Ni » k As E Desa ) RES Pa] Aprenda a dominar o [a a lfeiia Reto o gr we RE * 5 tim : q A " á ) , , 4 É “The A! AAA: no É AS 4 ) s% | , Guia completo para criar videos o ko o j 1 ao do seu desktop em linux Ed Ju . + dl E il k NOTÍCIAS: Retrospectiva sobre Os principiais acontecimentos tecnológicos de 2006 e ditorial <2 > e q u ipa PRO G RAM AR adm inis tração Rui M aia D avid Pintas s ilgo coorde nador Sérgio Santos coorde nador adjunto M igue l Pais re dacção M igue l W ah non Fábio Corre ia D iogo Alve s João M atos Fábio Pe drosa Pe dro Ve rrum e Luís Re nte Tiago Salgado Joe l Ram os colaboradore s Rui G onçalve s D anie l Corre ia José O live ria contacto re vis taprogram ar @ portugal-a-program ar.org w e bs ite w w w .re vis ta-program ar.info índice 3 notícias 4 te m a de capa 11 a program ar 24 s e gurança 28 te cnologias 31 tutorial 37 gnu/linux 40 anális e s 41 inte rne t 42 blue scre e n 43 com unidade Um ano, s e is e diçõe s Esta s e xta e dição m arca o final do prim e iro ano da Re vista PRO G RAM AR. Para nós trata-s e de um fe ito, para além de te rm os cons e guido e ditar s e is e diçõe s , o facto de o proje cto te r cre scido de e dição para e dição, com m ais e m e lh ore s artigos , m ais participante s e , principalm e nte , m ais le itore s . M uitas ve ze s , ne ste tipo de proje cto, o m ais difícil não é re unir um conjunto de artigos e form ar um a re vista, é cons e guir m ante r o proje cto activo e , s e pos s íve l, e m e volução, na dire cção dos le itore s . Ne sta e dição contam os com um te m a de capa m ais e xte nso q ue o norm al, vantage ns de s e r um a re vista online , s e m re sponsabilidade s para com e ditoras . Espe ram os q ue o te m a s e ja do vos so agrado e , caso s e ja de sconh e cido, o q ue de ve rá aconte ce r ainda para m uitos , q ue abram a m e nte e e xpe rim e nte m um a nova m ane ira de ve r a program ação, ne m q ue s e ja pe los frutos q ue de la pode rão e xtrair futuram e nte . Te m os tam bém um a nova s e cção, "Se gurança", q ue surge na continuação do trabalh o e fe ctuado na te rce ira e dição da re vista. Ne ste m om e nto cons e guim os atingir um a varie dade cons ide ráve l e m uito apre ciada de ntro do nos so grupo de re dactore s e continuam os à procura de novos te m as para abordar, novas s e cçõe s para acre sce ntar e novas ide ias para aplicar, e todos os novos m e m bros q ue s e juntam a nós traze m s e m pre novas opiniõe s ao grupo. Sé rg io S a nt o s <5 > as sociar às ope raçõe s prim itivas de som ar e m ultiplicar re spe ctivam e nte . Para s e pe rce be r, pas s e m os aos 2 argum e ntos do lam bda, dois argum e ntos de input: > ((lambda (+ *) (+ 5 (* 2 3) 4))* +) 100 Um a ve z q ue trocám os os nom e s das ope raçõe s q ue vão s e r ch am ados no corpo do lam bda, as ope raçõe s de som ar pas sam a s e r m ultiplicaçõe s e as ope raçõe s de m ultiplicar pas sam a s e r som as . Com o vêe m , o pode r de as sociação de nom e s e de pas sage m de argum e ntos no Sch e m e é m uito inte re s sante e ve rsátil. Um a ve z m ais , com o e m q ualq ue r linguage m q ue s e pre ze , e m Sch e m e e xiste m e xpre s sõe s condicionais . A utilização de valore s e e xpre s sõe s lógicas para condicionarm os algoritm os , utilizando os e le m e ntos lógicos > , <, =, > =, <=, not, and e or. São caso dis so o “if” e o “cond”. A s intaxe do “if” é: (if (condição) (expressão1 se condição é #t) (expressão2 se condição é #f)) Exe m plo: (define a 5) (define b (+ a 1)) > (if(> a b) a b) 6 te m a de capa Um a ve z q ue o nom e da função “duplica” e stá as sociado a um proce dim e nto lam bda q ue por sua ve z e stá à e spe ra de um valor ‘x’ para o ope rar no s e u corpo. Se be m re pararam , o diale cto do Sch e m e pode pare ce r um tanto e stranh o um a ve z q ue e stam os h abituados a e scre ve r, e m m ate m ática, os ope radore s no m e io dos ope randos : (5 + 3). E portanto, um outro ponto forte do Sch e m e , q ue já ve m do Lisp, é o facto de m inim izar a am biguidade da criação de funçõe s e da sua avaliação. Por e xe m plo, e m m ate m ática te m os e num e ras m ane iras de re pre s e ntar um a função, s e ja e la um a função factorial n!, polinom ial x2+ 3x, ou m e sm o um a função ge nérica f(x,y,z). Contudo, ainda h á m ais confusão porq ue e xiste m prioridade s de ce rtas ope raçõe s , com o a prioridade da m ultiplicação pe rante a som a. O Sch e m e torna a coisa bastante m ais s im ple s e portanto te m a sua s intaxe da s e guinte form a (função argum e ntos*). No início da e xpre s são a s e r avaliada ve m o nom e da função (ope rador) e s e guido de s s e nom e ve m um conjunto de argum e ntos a s e re m ope rados (ope randos). Exe m plos : (* 2 x) (+ 5 3) (* 2 (+ 5 3) 9) E utilizando a as sociação de e xpre s sõe s a nom e s , pode ríam os as sociar q ualq ue r um a e xpre s são das acim a m e ncionadas a um nom e q ue s e tornava, por as s im dize r, um a variáve l. D e m onstrando, um pouco m e lh or, o pode r da program ação funcional, fica o e xe m plo: (lambda (+ *) (+ 5 (* 2 3) 4)) Este proce dim e nto anónim o fica à e spe ra da pas sage m de dois argum e ntos cujos nom e s são ‘+ ’ e ‘*’ e h á a te ntação de os <6 > A avaliação e inte rpre tação de e xpre s sõe s e m Sch e m e pode pare ce r confusa por não e starm os h abituados à notação no e ntanto ficam aq ui alguns e xe m plos q ue pe nso s e re m bastante e lucidativos : > (+ 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 Contudo, para apre nde rm os o q ue é program ar, te re m os de te r noção de “o q ue é um algoritm o?”. Um algoritm o é um conjunto de ope raçõe s finitas , e xe cutadas de form a m e cânica num e spaço de te m po finito de m odo a re alizare m um a de te rm inada tare fa ou proble m a. Por e xe m plo, s e q uisés s e m os criar um algoritm o para calcular o factorial de um núm e ro e m m ate m ática tính am os e m m e nte q ue : 0! = 1 n! = n(n-1)! Passando isto para Sch e m e , um a form a s im ple s de o faze r s e ria: (define (factorial n) (if (= n 0) 1 (* n (factorial ( - n 1))))) M uito s im ple s . No e ntanto, e s e q uisés s e m os com plicar a coisa, pode ríam os pôr com o e xpre s são de # t ou de # f, um outro if e ncade ado e portanto te ríam os , por e xe m plo: > (if(> a b) a (if(= b (+ a 1)) a b)) 5 Já s e q uisés s e m os e ncade ar novo if nas sub-e xpre s sõe s do s e gundo if, o código com e çava a tornar-s e um pouco confuso de pe rce be r. Para is so, utilizam os o acim a m e ncionado “cond” q ue é, portanto, “açúcar s intáctico” para um conjunto de ifs e ncade ados com o no e xe m plo e m cim a. O cond re ce be um conjunto de pare s condição / e xpre s são-if-# t e avalia-las por orde m . Se a prim e ira de r # t, o s e u corpo é e xe cutado, caso contrário pas sa para a s e guinte e por aí e m diante , até ch e gar a um e ls e / e xpre s são, caso ne nh um a das e xpre s sõe s ante riore s s e ja ve rdade ira. Conve rsão da e xpre s são do e xe m plo ante rior dos ifs e ncade dos para o cond: > (cond((> a b)a) ((= b (+ a 1))a) (else b)) 5 Com o vêe m é m uito s im ple s e dá m uito je ito q uando q ue re m os e ncade ar várias suce s sõe s de condiçõe s . te m a de capa <7 > Isto s e ria um a form a re curs iva de criar um algoritm o q ue calcula o factorial de um inte iro natural. Exe m plo de inte racção com a função usada: > (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 xiste um a fas e de e xpansão e de pois um a fas e de contracção. Isto de ve - s e ao facto de e ste algoritm o do factorial ge rar um proce s so re curs ivo e s e r criado à custa de um proce dim e nto re curs ivo. Em bora pare çam a m e sm a coisa, não o são. Um proce s so re curs ivo te m com o caracte rística de ixar ope raçõe s pe nde nte s no de corre r do program a e com o re fle xo dis so, consum ir m e m ória ao longo do te m po. Um proce dim e nto re curs ivo é o acto de um a função s e invocar de ntro de s i própria “(factorial (- n 1))”. Para re solve rm os o proble m a de de ixarm os ope raçõe s pe nde nte s , pode ríam os m e lh orar e ste algoritm o ge rando um proce s so ite rativo. (define (factorial n) (define (fact-aux n acumulador) (if(= n 0) acumulador (fact-aux (- n 1) (* acumulador n)))) (fact-aux n 1)) À prim e ira vista, isto pode ge rar confusão m as ve jam os por parte s . Prim e iro, foi introduzido o conce ito de função inte rna. A função “fact-aux” só é vis íve l à função q ue a pre ce de h ie rarq uicam e nte , a função “factorial”, ou s e ja, ao níve l global do am bie nte , e la não e xiste . Ao criarm os e ste algoritm o q ue ge ra um proce s so ite rativo, e ste te m com o caracte rística não de ixar ope raçõe s pe nde nte s e logo, de consum ir m e m ória constante , onde por sua ve z, actualiza um a variáve l de e stado q ue ditará o re sultado final. O u s e ja, a cada ite ração, o valor do acum ulador é actualizado com o produto do ‘n’ actual da ite ração e m q ue s e vai pe lo valor pas sado ao acum ulador na ite ração ante rior. Se re parare m , a prim e ira ite ração é ch am ada com o ‘n’ supe rior (da função factorial original) e com o acum ulador e m 1. Isto porq ue o 1 é o e le m e nto ne utro da m ultiplicação e as s im , não “de strói” o valor n. Pode ríam os , ainda, criar um algoritm o pare cido com o factorial de um inte iro, m as q ue e m ve z de m ultiplicar os ‘n’ te rm os até 0, os som a. Te m os e ntão: (define (soma-ate-zero n) (define (soma-aux n acumulador) (if(= n 0) acumulador (soma-aux (- n 1) (+ n acumulador)))) (soma-aux n 0)) E ao invocarm os : > (soma-ate-zero 5) 15 Um a ve z, m ais , o acum ulador é actualizado de ite ração e m ite ração com a som a do acum ulador pas sado da ite ração ante rior com o n da actual ite ração. D e sta ve z, o valor do acum ulador pas sado à função inte rna na prim e ira ite ração é o 0 (ze ro), visto s e r o e le m e nto ne utro da adição. Entrando noutra áre a, pode ríam os abstrair- nos do conce ito de factorial e de som a-ate - ze ro e faze rm os um proce dim e nto q ue re ce be um a ope ração q ue ope ra inte iros e q ue calcula e sta ope ração até ao inte iro 0. (define(opera-ate-zero op elem-neutro n) (define (opera-aux n acumulador) (if(= n 0) acumulador (opera-aux (- n 1) (op n acumulador)))) (opera n elem-neutro)) te m a de capa <10> (define lista-final (insere 5 lista2)) Se m andás s e m os corre r o s e guinte com ando: > lista-final (5 3) Esta e ra a lista re tornada. E pode ríam os , e ntão, corre r a função q ue nos dá o tam anh o de la: > (tamanho-lista lista-final) 2 O u m e sm o o ve rificador de listas : > (lista? lista-final) #t Já de finim os um a função q ue ins e re um e le m e nto à cabe ça da lista. D á je ito m as é bastante fraca. Se q uis e rm os ins e rir um e le m e nto num a dada pos ição faríam os a s e guinte função: (define (insere-pos elem pos LISTA) (if(= pos 1) (insere elem LISTA) (insere-pos elem (- pos 1) (resto-lista LISTA))) As s im , s e q uisés s e m os pôr o e le m e nto 4 na “lista-final”, criada e m cim a, na últim a pos ição, faríam os : > (insere-pos 4 3 lista-final) (2 3 4) Aconte ce q ue pode ríam os criar condiçõe s de e rro para o utilizador, por e xe m plo para o caso da pos ição dada s e r m aior q ue o tam anh o da própria lista, m as são aspe ctos pouco re le vante s para o caso. O tipo de dados lista, é m uito fácil de usar e o Sch e m e nativo já inclui, por de fe ito, todas as funçõe s aq ui de finidas e m uitas m ais . Em C, a criação de um a lista é m uito m ais com ple xa, um a ve z q ue e xige a criação de um a e strutura com um e le m e nto e um ponte iro para a próxim a e strutura. Em Sch e m e , is so já ve m fe ito para nós . O utro tipo de dados pare cido com as listas é o ve ctor. É m ais re corre nte usar ve ctore s e m program ação im pe rativa, ch am ando as pos içõe s com índice s . Virando o as sunto para o paradigm a do Sch e m e , a program ação im pe rativa. A program ação im pe rativa, bas e ia-s e na de struição de variáve is , ou do s e u conte údo. Noutras linguage ns com o o C, é m uito usual re corre r-s e a e ste tipo de program ação, já o Sch e m e te m o s e u ponto forte na program ação funcional, com o foi re fe rido no início. No e ntanto, o Sch e m e tam bém suporta e ste e stilo de program ação e para is so usa um a re pre s e ntação inte rna para alocar um valor e de pois as socia-o a um nom e q ue por sua ve z o as socia a um a box. Um a box não é m ais do q ue um a e strutura com um nom e e com um valor lá de ntro. Se invocarm os o nom e da box, o Sch e m e inte rpre ta o nom e e faz o ch am ado unbox de volve ndo o valor inte rno da box as sociado ao nom e . Posto isto, é pos s íve l pe rce be r o q ue faz o ope rador s e t!. Esta função re ce be um nom e q ue te m obrigatoriam e nte de já te r s ido de finido com a função de fine e um novo valor ou e xpre s são q ue re torne algo válido para o tipo de dados as sociado ao nom e , e faz e ntão a acção de unbox do nom e , ins e re o novo valor (de pois de avaliar a e xpre s são s e guida do nom e ) e volta a faze r box. É óbvio q ue isto é o q ue s e suce de inte rnam e nte e é o q ue diz a te oria do Sch e m e . Na ve rdade , tudo o q ue foi fe ito até agora re spe ita as re gras te óricas do conce ito Sch e m e e nq uanto linguage m de program ação, porq ue no fundo, cada inte rpre tador da linguage m e s e u com pilador pode m ge rir todos e ste s proce s sos , inte rnam e nte , de m ane ira dife re nte . H á q ue pe rce be r a dife re nça e ntre o conce ito de linguage m e sua s intaxe , e o q ue na ve rdade o s e u inte rpre tador faz. te m a de capa <11> Alguns e xe m plos da utilização do ope rador s e t!: (define a 4) (define b 2) > a 4 > b 2 > (+ a b) 6 Volte m os à função factorial q ue pe nso q ue e lucida be m a dife re nça e ntre program ação funcional e a program ação im pe rativa: (define(factorial-imp n) (define valor-final 1) ; inicialização com 1 ; -> elemento neutro da multiplicação (define(aux n) (if(= n 0) valor-final (begin (set! valor-final (* n valor-final)) (aux (- n 1))))) (aux n)) É um a opção pos s íve l m as um pouco m ais trabalh osa e q ue e nvolve de struição de valore s . Pas sage m de argum e ntos e ntre funçõe s s e m as alte rar é m uito m ais s e guro e obte m os a m e sm a e ficiência (nota: com parar com a ve rsão funcional acim a). Foi ins e rido o e le m e nto be gin. Em Sch e m e , só pode m os re alizar um a ope ração por corpo. O pe ração e s sa q ue de volva algo. No e ntanto, e xiste um a função q ue re ce be várias funçõe s e q ue avalia todas e só de volve o valor re tornado pe la avaliação da últim a. O u s e ja, no caso da função “factorial- im p”, de ntro da função auxiliar “aux”, e nq uanto o “n” não ch e gar a 0 (ze ro), e le re aliza o e ls e do if, q ue corre sponde a e xe cutar o be gin. Ne s s e be gin são avaliadas as e xpre s sõe s (s e t! valor-final (* n valor-final)) e (aux (- n 1))))), e só o valor da últim a é re tornada. O acto de faze r s e t! não re torna nada. M into, re torna void, q ue é inte rpre tado com o nada. O u s e ja, é avaliado o s e t!, o valor de “valor-final” é de struído e re novado com outro e o factorial é invocado de novo re curs ivam e nte . S im ple sm e nte , e m ve z de pas sarm os variáve is de e stado actualizadas, criam os um acum ulador q ue é actualizado usando o s e t! inte rnam e nte . Pe nso q ue a m aior parte dos conte údos acim a e xplicados e nglobam e re fle cte m o pode r do Sch e m e e a facilidade com q ue s e pode apre nde r a program ar usando e sta linguage m . Foram ape nas e xpostos e xe m plos s im ple s m as q ue m e sm o as s im m ostram o q ue é pos s íve l faze r e m Sch e m e . Para sabe r m ais sobre e sta linguage m acons e lh o um livro: Program ação e m Sch e m e – Introdução à program ação utilizando m últiplos paradigm as – IST Pre s s . O u outras fonte s com o o do com pilador e am bie nte de inte rpre tação Sch e m e h ttp://w w w .plt-sch e m e .org. Este inte rpre tador de Sch e m e é bastante pode roso e m te rm os de opçõe s e te m um m odo de de bug m uito inte re s sante , onde pode m os ace de r aos valore s de todos os valore s as sociados aos nom e s pre s e nte s no código, s im ple sm e nte pas sando o rato por cim a de le s . Te m de bug por ste ps , usa bre ak points e ainda te m disponíve l, para além do m odo gráfico, um m odo de consola. O program a e stá disponíve l para Linux, W indow s , M ac, Sun, e tc... É ainda pos s íve l criar e xe cutáve is dos program as criados para corre r nas várias plataform as onde s e e stive r a trabalh ar o código. Espe ro q ue te nh am pe rce bido o pote ncial do Sch e m e com o linguage m de alto níve l m as , tam bém , com o linguage m de apre ndizage m para s e e voluir para outras linguage ns . te m a de capa (set! a 2) (set! b 0) > a 2 > b 0 > (+ a b) 2 M ig ue l W a h n o n <12> Ne ste artigo vam os ficar a conh e ce r o suporte q ue Java ofe re ce para a utilização do m e canism o de com unicação Sock e t, o m e canism o m ais utilizado para a com unicação e ntre aplicaçõe s . Java pe rm ite o uso de sock te s pe los s e guinte s m odos utilização: -> M odo O rie ntado à Cone xão: Funciona com o protocolo TCP; -> M odo O rie ntado ao D atagram a: Funciona com o protocolo UD P. Am bos os m odos funcionam sobre o protocolo IP (Inte rne t Protocol). Cada um de ste s m odos te m a sua utilidade , vantage ns e de svantage ns na sua utilização. M odo O rie ntado à Cone xão (TPC/IP) -> Vantage ns : • S e rviços confiáve is , s e m pe rda de dados na re de e orde m dos pacote s; • Pos s ibilidade de usar D ataStre am s . -> D e svantage ns : • É m ais le nto q ue o m odo orie ntado ao datagram a. • O com portam e nto do s e rvidor é dife re nte do com portam e nto do clie nte . M odo O rie ntado ao D atagram a (UD P/IP) -> Vantage ns : • É bas tante m ais rápido q u e o m odo orie ntado a cone xão. -> D e s vantage ns : • S e rviços não confiáve is , m e ns age ns pe rdidas na re de e pe rda da orde m das m e ns age ns ; • Cada m e ns age m é um datagram a: [R e m e te nte , D e s tinatário, Conte údo.]. D e vido a um a m aior utilização e e s tabilidade ire m os ape nas analis ar e im ple m e ntar o M odo O rie ntado à Cone xão - TCP/IP. Sock e ts TCP/IP No proce s s o de com unicação e ntre s ock e ts TCP/IP, de um a form a s im ple s , o s e rvidor e s colh e um a porta e aguarda cone xõe s a e s s a porta, o clie nte de ve conte r as s e gu inte s inform açõe s : • Ende re ço do S e rvidor (H O ST); • A porta us ada pe lo s e rvidor (PO RT). Com e s s a inform ação o clie nte s olicita um a cone xão ao s e rvidor (Figura 1). S e após o pe dido de cone xão não ocorre r ne nh um proble m a, o s e rvidor ace ita a cone xão g e rando um s ock e t num a porta do s e rvidor, o q u e vai criar um canal de com unicação e ntre o clie nte e o s e rvidor (Figura 2). Sock e ts e m Java a program ar Figura 1 <15> a program ar Em s e guida pode m os ve r as clas s e s Clie nte e Se rvidor com ple tam e nte im ple m e ntadas . Clas s Clie nte import java.io.*; import java.net.*; public class Cliente{ public Socket client; public DataInputStream in; public 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()); } } } <16> Clas s Se rvidor import java.io.*; import java.net.*; public class Servidor{ public ServerSocket server; public Socket sock; public DataInputStream in; public DataOutputStream out; public Servidor(){ try{ this.server = new ServerSocket(8080); this.sock = this.server.accept(); this.in = new DataInputStream(sock.getInputStream()); this.out = new DataOutputStream(sock.getOutputStream()); } catch(IOException e){ System.out.println(e.getMessage()); } } public static void main(String args[]){ try{ Servidor serv = new Servidor(); int valor = serv.in.readInt(); String texto = serv.in.readUTF(); System.out.println(valor); System.out.println(texto); serv.out.writeInt(6000); serv.out.writeUTF("Olá - Socket Servidor."); serv.in.close(); serv.out.close(); serv.sock.close(); serv.server.close(); } catch(IOException e){ System.out.println(e.getMessage()); } } } Aq ui ficam as principais bas e s de sta m atéria, a partir daq ui é usar a im aginação. Com o suge stão para a aplicação dos novos conh e cim e ntos adq uiridos , sugiro q ue e xpe rim e nte m a criação de um s im ple s softw are de conve rsação ('ch at'). a program ar Fá b io C o rre ia <17> Estruturas de dados a program ar 1*10^2 + 2*10^1 3*10^0 = 100 + 20 + 3 = 123 E os núm e ros fraccionários? Sim ple s , vam os ve r o e xe m plo 123,456: 1*10^2 + 2*10^1 + 3*10^0 + 4*10^-1 + 5*10^-2 + 6*10^-3 O u s e ja, cada dígito à e s q ue rda da vírgula re pre s e nta um valor e ntre 0 e 9 m ultiplicado por um a potência de bas e 10 cujo e xpoe nte aum e nta com a distância à vírgula. Nos dígitos à dire ita da vírgula é um valor de 0 a 9 m ultiplicado por um a potência de bas e 10 com um e xpoe nte ne gativo q ue cre sce à m e dida q ue s e afasta da vírgula. S im , lá ve m a M ate m ática! M as não s e pre ocupe m m uito com is so, trata-s e de M ate m ática s im ple s . Agora vam os pas sar ao s iste m a binário. No s iste m a binário só pode m os e ncontrar 2 valore s o 0 e o 1, e a partir de ste s 2 dígitos pode m os facilm e nte obte r q ualq ue r valor de cim al corre sponde nte . A m ane ira de conve rte r um binário num de cim al é bastante s im ilar ao q ue fize m os com os núm e ros de cim ais . O s iste m a binário não pe rm ite dígitos dife re nte s de 0 e 1 e a potência é s e m pre de bas e 2 e m ve z de bas e 10. Vam os e ntão conve rte r o s e guinte núm e ro binário para de cim al: 11001010 1*2^7 * 1*2^6 + 0*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 128 + 64 + 8 + 2 = 202 S im ple s não é? Para faze r a ope ração inve rsa é um pouco pior, te m os de dividir suce s s ivam e nte um núm e ro de cim al por 2 até o re sultado s e r m e nor q ue 2. D e pois te m os de colocar o últim o re sultado e os re stos ante riore s na orde m com o o e xe m plo a s e guir. O u s e ja: Ne sta série de artigos vam os de slindar um as sunto q ue para m uitos é difícil de e ncaixar, e nq uanto para outros é com o som ar 1 + 1. No prim e iro capítulo de sta série de artigos vam os abordar os s iste m as num éricos . Com o a m aioria dos le itore s sabe m , o com putador não inte rpre ta os núm e ros com o nós e te m as suas lim itaçõe s aritm éticas . Isto porq ue o proce s sador ape nas trabalh a com im pulsos e léctricos e e ste s só pode m tom ar 2 valore s : 0 e 1, re pre s e ntando as s im a ausência e a pre s e nça, re spe ctivam e nte , de s s e s ditos im pulsos . Portanto, e stam os diante um s iste m a num érico binário. Naturalm e nte , com o nós pe nsam os num núm e ro s e m pre no s iste m a de cim al e lim itam os a te r um a im age m m e ntal de q uantidade , não nos ape rce be m os q ue de facto um núm e ro, por e xe m plo o 123, pode s e r re pre s e ntado da s e guinte form a: <20> Para iniciar o inte rpre tador pe la linh a de com andos ou consola basta e scre ve r pyth on s e guido de <Ente r> . As s im q ue o fize re m vão s e r apre s e ntados com o s e guinte (pode s e r lige iram e nte dife re nte de pe nde ndo do vos so s iste m a ope rativo): Python 2.5 (r25:51908, Oct 6 2006, 15:22:41) [GCC 4.1.2 20060928 (prerelease) (Ubuntu 4.1.1-13 ubuntu4)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> Para fe ch ar o inte rpre tador basta pre s s ionar Ctrl-Z s e guido de Ente r e m W indow s , ou Ctrl- D e m Linux. Para aq ue le s q ue não s e s e nte m confiante s a trabalh ar e m linh a de com andos, o Pyth on tam bém ve m com um a inte rface gráfica q ue pode s e r usada para program ar tanto no m odo inte ractivo com o com fich e iros de código fonte . Esta fe rram e nta ch am a-s e ID LE (Inte grate d D e ve Lopm e nt Environm e nt) e é forne cida com a instalação bas e do Pyth on. Se durante a instalação pe diram ao instalador para criar atalh os no m e nu Iniciar e ntão pode m s e guir por e s s e cam inh o. Caso não te nh am instalado atalh os , o ID LE e ncontra- s e e m <pasta de instalação do Pyth on> \Lib\idle lib\idle .pyw . Agora q ue te m os o inte rpre tador iniciado vam os com e çar a e scre ve r alguns program as . Se m pre q ue o inte pre tador m ostrar > > > s ignifica q ue e stá pronto a re ce be r instruçõe s . Para com e çar vam os introduzir a instrução print “H e lo W orld”. Com o de ve m te r re parado as s im q ue pre s s ionaram a te cla Ente r o Pyth on avaliou o q ue introduziram e e fe ctuou a de vida ope ração (e scre ve u H e lo W orld num a linh a). As s im q ue acabou de o e fe ctuar voltou a m ostrar os > > > , s ignificando q ue e stá pronto a re ce be r novas instruçõe s . >>> print “Hello World” Hello World >>> print "Hello", "World" Hello World >>> print <Linha em branco> Com o de ve m te r re parado o com ando print s e rve para e scre ve r algo na linh a de com andos . Ne ste e xe m plo e scre ve m os um a string (cade ia de caracte re s) m as tam bém pode m os e scre ve r listas , tuplas e ntre outros tipos de dados q ue vam os conh e ce r m ais à fre nte ... Se e fe ctuare m o com ando print e não forne ce re m nada para o inte rpre tador e scre ve r, e le e fe ctua ape nas um parágrafo, s e ndo e q uivale nte a faze re m print de um a string vazia (“”). Tam bém é de notar q ue s e pode faze r print a vários valore s num a única instrução, s e ndo os dados s e parados por vírgulas . Tipos de dados Em Pyth on e xiste um a e norm e varie dade de tipos de dados q ue dão um a e norm e fle xibilidade ao program ador com o núm e ros , strings (s e q uência de caracte re s), listas (arrays/ve ctore s), tuplas, dicionários (arrays as sociativos / m atrize s), obje ctos , e tc... O s núm e ros subdivide m -s e e m q uatro tipos : os inte iros ou de cim ais (inte ge rs), os inte iros grande s (long inte ge rs), os núm e ros fraccionários (floating point) e os núm e ros com ple xos (com ple x num be rs). A s e guir apre s e ntam -s e alguns e xe m plos de ope raçõe s com núm e ros : >>> 5+5 10 Ne ste caso juntam os dois núm e ros inte iros s e ndo o re sultado outro inte iro. Tam bém de pode m re alizar outras ope raçõe s : >>> 2.5*2 5.0 a program ar <21> Com o viram m ultiplicam os um núm e ro fraccionário por um núm e ro inte iro s e ndo o re sultado um núm e ro fraccionário. Ate nção q ue para o inte rpre tador 5 não é o m e sm o q ue 5.0. >>> 2**3 8 >>> pow(2, 3) 8 Com o já de ve m te r pe rce bido o s ím bolo ** s ignifica e le var, ne ste caso e le vám os o núm e ro 2 ao cubo. Aprove itam os tam bém para apre s e ntar o uso de funçõe s , ne ste caso a função pow (x, y), s e ndo x e y os ch am ados argum e ntos da função ou s e ja, os dados q ue forne ce m os à função. Este te m a irá s e r abordado m ais profundam e nte q uando criarm os as nos sas próprias funçõe s . >>> 10/3 3 >>> 10.0/3 3.3333333333333335 Q uando s e divide m dois inte iros o re sultado é um inte iro, m as q uando s e m isturam inte iros com fraccionários , o re sultado é um fraccionário, convém te r e ste facto e m ate nção já q ue é um e rro fre q ue nte . O utra função a conh e ce r m uito útil q uando e stam os a iniciar é a type (), q ue pe rm ite sabe r o tipo de dados com q ue e stam os a lidar. >>> type(5) <type 'int'> >>> type(5.0) <type 'float'> >>> type(“Python”) <type 'str'> As strings com o já foi dito são cade ias de caracte re s ou s e ja pode m conte r núm e ros , le tras e s ím bolos, e o s e u conte údo e stá s e m pre lim itado por aspas ou plicas : >>> 'Python' 'Python' >>> "Portugal" 'Portugal' >>> """Python ... Portugal ... P@P""" 'Python\nPortugal\nP@P' Esta últim a string construída por três aspas é cons ide rada um a string de várias linh as , re pare m q ue q uando iniciam os a string e dam os um <Ente r> o inte rpre tador pas sa autom aticam e nte para a linh a s e guinte m ostrando ... e m ve z das h abituais > > > . O utro porm e nor inte re s sante é q ue a string final de volvida pe lo inte rpre tador te m ape nas um a linh a apare ce ndo o \n (ne w line ) s e m pre q ue ocorre um a m udança de linh a. Tam bém pode m os m udar de linh a m anualm e nte s e m usar e ste últim o tipo de strings : >>> 'Python\nPortugal' 'Python\nPortugal' >>> 'Triton'Portugal' File "<stdin>", line 1 'Triton'Portugal' ^ SyntaxError: invalid syntax Aq ui pode m ve r outro porm e nor inte re s sante sobre as strings q ue ainda não foi re fe rido. Com o faze m os s e q uis e rm os usar aspas ou plicas de ntro de um a string? Se usarm os as s im s e m m ais ne m m e nos o inte rpre tador confunde -s e , não sabe ndo onde acaba a string, m as s e usarm os tipos dife re nte s de aspas/plicas no conte údo dos q ue usam os para lim itar a string e ntão já é pe rm itido: a program ar <22> >>> "Triton ' Portugal" "Triton ' Portugal" >>> 'Triton " Portugal' 'Triton " Portugal' >>> """Triton '" Portugal""" 'Triton \'" Portugal' Ne ste últim o caso pode m os ve r com o é q ue o Pyth on re pre s e nta a plica num a string. Usam os o ch am ado caracte r de e scape , a barra para a e s q ue rda, para re pre s e ntar os tais caracte re s não pe rm itidos norm alm e nte ou caracte re s e spe ciais (\n). >>> print "Triton \" Portugal" Triton " Portugal >>> print "Uma barra \\" Uma barra \ >>> "abc".upper() 'ABC' No prim e iro e xe m plo usam os um a aspa no m e io de um a string lim itada pe lo m e sm o tipo de aspa. Para is so faze m os o e scape da aspa, usando para is so o \”. Para faze m os e scape à barra usam os duas barras , com o s e ve rifica no s e gundo e xe m plo. As strings apre s e ntam um conjunto de m étodos q ue pode m os utilizar, com o fize m os no últim o e xe m plo, ch am ando o m étodo .uppe r() q ue faz com q ue a string s e ja conve rtida para le tras m aiúsculas . Para conh e ce r os m étodos de q ualq ue r tipo de dados usa-s e a função dir(), por e xe m plo, dir('Foo') vai m ostrar todos os m étodos da string (ne ste caso 'Foo'). Até agora não te m os guardado os valore s das e xpre s sõe s q ue introduzim os , para is so usam os as variáve is . Um a variáve l é ape nas um nom e q ue aponta para o e nde re ço de m e m ória onde vam os guardar a inform ação. Para guardar um inte iro e m m e m ória usam os um a variáve l, para is so te m os de lh e atribuir um nom e para q ue nos pos sam os re fe rir a e s s e valor no futuro: >>> numero = 1 É tão s im ple s com o isto, basta e scre ve r o nom e da variáve l s e guido de um igual (=, atribuição) e s e guido do q ue q ue re m os guardar. >>> print numero 1 >>> inteiro = numero + 1 >>> inteiro 2 Agora cada ve z q ue nos re fe rirm os à variáve l núm e ro é com o nos e stivés s e m os a re fe rir ao valor q ue e la guarda e m m e m ória, pois cada ve z q ue o inte rpre tador te m de proce s sar a variáve l ace de à m e m ória e substitui pe lo de vido valor guardado. As variáve is pode m s e r usadas para guardar todos os tipos de dados : >>> frac = 2.0*2 >>> print frac 4.0 Ne ste caso ante s de guardar o valor o inte rpre tador avalia a e xpre s são (2.0*2) s e ndo o re sultado um núm e ro fraccionário. G raças á s im plicidade de Pyth on, e sta linguage m é m uitas ve ze s acons e lh ada para q ue m e ntrar no m undo da program ação. Tam bém por is so, é pos s íve l e ncontrar m uita inform ação (docum e ntação, artigos , e xe m plos ...) livre s na inte rne t, sobre e la. Aq ui têm alguns link s inte re s sante s : • h ttp://w w w .dive intopyth on.org • h ttp://w w w .onlam p.com /pyth on • h ttp://w ik i.pyth on.org/m oin • h ttp://pt.w ik ipe dia.org/w ik i/Pyth on a program ar Jo ã o M a to s <25> Para e nte nde r com ple tam e nte com o o buffe r ove rflow é e xplorado para s e obte r ace s sos inde vidos ao s iste m a, s e ria ne ce s sário com pre e nde r com o é q ue os proce s sos são organizados na m e m ória, no q ual cada arq uite ctura de h ardw are , s iste m a ope rativo ou com pilador pode organizar de form a dife re nte . Buffe r ove rflow é ape nas um dos m uitos tipos de vulne rabilidade s pos s íve is num softw are . Se ndo alguns de le s : h e ap ove rflow , inte ge r ove rflow , re turn-to-libc attack , form at string attack , race condition, code inje ction, SQ L inje ction, cros s -s ite scripting e cros s -s ite re q ue st forge ry. G e ralm e nte um e xploit ape nas tom a vantage m de um a única vulne rabilidade de softw are , o q ue torna por ve ze s norm al s e re m utilizados vários e xploits e m s im ultâne o: prim e iro para ganh ar ace s so de níve l re duzido, de pois para e scalar privilégios re pe tidam e nte até obte r privilégios m áxim os , nom e adam e nte Adm inistrador/root. Norm alm e nte um único e xploit pode ape nas s e r utilizado para tom ar vantage m num a única vulne rabilidade de softw are . H abitualm e nte , q uando um e xploit é publicado, a vulne rabilidade é corrigida através de um a corre cção (patch ) e o e xploit torna-s e obsole to para novas ve rsõe s do softw are . Esta é a razão pe lo q ual alguns h ack e rs não publicam os s e us e xploits , m ante ndo-os privados . Tais e xploits são ge ralm e nte re fe re nciados com o e xploits 0day e obte r tais e xploits é o de s e jo principal dos atacante s ine xpe rie nte s , ge ralm e nte ch am ados ‘script k iddie s’. Proje cto M e tasploit? O Proje cto M e tasploit é um a plataform a online ope n-source , disponíve l para dow nload, q ue pe rm ite controlar e utilizar e xploits publicados online . Escrito e m Pe rl, com com pone nte s e m C, As s e m ble r e Pyth on, o M e tasploit tornou-s e um a fe rram e nta fam osa por facilitar o uso de e xploits a todos . Criticado pe los e xpe rts da áre a com o um a fe rram e nta q ue ve m facilitar o trabalh o aos script-k iddie s e as s im aum e ntar o núm e ro de s iste m as sob ataq ue s . Com e sta fe rram e nta, a fas e de procura e de s e nvolvim e nto dos e xploits é praticam e nte e lim inada visto q ue s e torna bastante fácil de de scarre gar novos e xploits para utilizar na plataform a. Program ar e m Se gurança Existe m m uitos tipos de vulne rabilidade s , cada um a de las ocorre de vido a um e rro do program ador. G e ralm e nte causadas pe la m á conce pção, falta de conh e cim e nto, e nte ndim e nto do funcionam e nto das funçõe s/bibliote cas utilizadas de outros program adore s ou até m e sm o falh as aritm éticas ine spe radas . Com isto pode -s e facilm e nte concluir q ue e stas vulne rabilidade s ape sar de s e re m bastante conh e cidas , não são ge ralm e nte e nte ndidas , e isto e xplicaria o porq uê de continuare m a apare ce re m e norm e s q uantidade s de stas falh as nas aplicaçõe s de softw are . s e gurança <26> Ape sar disto, te m os de e nte nde r q ue todos os tipos de vulne rabilidade s , nom e adam e nte as faladas ante riorm e nte são pre vis íve is . Talve z num te m po próxim o no futuro, as condiçõe s q ue pe rm ite m e stas falh as e xistire m , ve nh am a s e r “corrigidas” e e lim inadas, ficam aq ui alguns m étodos q ue pode m ajudar q ualq ue r program ador a pre ve nir e stas : 1. Utilizar dife re nte s linguage ns . Linguage ns de program ação q ue forne ce m autom aticam e nte ve rificação de lim ite s com o Pe rl, Pyth on, Java, Ruby, e tc. É ve rdade q ue e stas e xiste m , porém isto por ve ze s torna-s e im pos s íve l q uando s e cons ide ra q ue praticam e nte todos os s iste m as ope rativos m ode rnos são e scritos e m C. A m udança de linguage m torna-s e particularm e nte crítica q uando é ne ce s sário ace s so de baixo-níve l ao h ardw are . A boa notícia é q ue as linguage ns e stão a e voluir, e a s e gurança tornou-s e um as sunto sério. Por e xe m plo, a M icrosoft com a sua iniciativa .NET, re scre ve u por inte iro o Visual Bas ic e Visual C+ + com a s e gurança e m m e nte . Adicionalm e nte , a linguage m Visual C# q ue foi de s e nh ada por com ple to com a s e gurança e m m e nte . 2. Elim inar o uso de funçõe s de bibliote cas com vulne rabilidade s . Linguage ns de program ação, são tão vulne ráve is com o o program ador pe rm ite q ue s e jam . No e xe m plo dado, no ínicio, utilizám os um a função vulne ráve l da Standard C Library (strcpy). Esta é um a, de várias , funçõe s e xiste nte s na bibliote ca q ue falh am e m ve rificar o com prim e nto/lim ite dos s e us argum e ntos . Por e xe m plo, pode ríam os te r corrigido a nos sa aplicação alte rando unicam e nte um a linh a de código: // substituindo: strcpy(buffer, arg); // por: strncpy(buffer, arg, 10); s e gurança Esta s im ple s alte ração, inform a o strcpy() q ue o buffe r de de stino só te m um tam anh o de 10 byte s , e q ue de ve de scartar q uais q ue r dados após e ste com prim e nto. 3. Im ple m e ntar e construir s e gurança de ntro do código. Pode de m orar m ais te m po, e consom e m ais e sforço, m as o softw are pode s e r construído com a s e gurança e m m e nte . Se no e xe m plo ante rior, tivés s e m os adicionado um pas so e xtra, atingiríam os ainda um m e lh or níve l de s e gurança: strncpy(buffer, arg, sizeof(buffer)); Novam e nte , isto pode re m e te r a ve rdade ira q ue stão, de com o os program adore s são e ducados . Se rá a s e gurança e ns inada, ou e ncorajada? Se rá dado o te m po e xtra ne ce s sário para im ple m e ntar a s e gurança ade q uada? Tipicam e nte , e infe lizm e nte , a re sposta é não. 4. Utilizar m ódulos de bibliote cas s e guras . Bibliote cas de s e gurança e m strings e stão disponíve is e m linguage ns com o C+ + . Por e xe m plo, a C+ + Standard Te m plate Library (STL) ofe re ce a clas s e String. Esta clas s e ofe re ce funçõe s inte rnas q ue são s e guras no tratam e nto das strings , e de ve s e r pre fe rida e m re lação às funçõe s usuais . 5. Utilizar bibliote cas disponíve is (M iddle w are ). Existe m várias bibliote cas de “s e gurança” disponíve is para utilização. Por e xe m plo, a Be l Labs de s e nvolve u a “libsafe ” q ue prote ge a utilização de funçõe s ins e guras . Libsafe funciona na e strutura da stack , e pe rm ite as s e gurar q ue q uando um a função é e xe cutada, o e nde re ço de re torno não é alte rado. No e ntanto, com o m uitas outras bibliote cas , e sta não é im une a falh as e de ve s e r s e m pre utilizada a últim a ve rsão. <27> 6. Utilizar fe rram e ntas de anális e do código. Foram fe itas várias te ntativas de criar um a aplicação q ue e xe cutas s e um a anális e no código fonte e te ntas s e e ncontrar pote nciais falh as , inclus ive Buffe r O ve rflow ’s . Um a aplicação e xe m plar ch am a-s e PurifyPlus criada pe la Rational’s (h ttp://w w w .rational.com ) q ue e xe cuta anális e s a código e scrito e m Java, C ou C+ + e de te cta várias vulne rabilidade s . 7. Utilizar fe rram e ntas de optim ização do com pilador. Praticam e nte um conce ito novo, várias e xte nsõe s foram re ce nte m e nte fe itas disponíve is para funcionar dire ctam e nte com o com pilador q ue pe rm ite m m onitorizar o com portam e nto do RET (e nde re ço de re torno dum a de te rm inada função) e salvaguardar e ste valor de pote nciais alte raçõe s . Stack S h ie ld (h ttp://w w w .ange lfire .com /s k /stack s h ie ld) e (h h ttp://w w w .re s e arch .ibm .com /trl/proje cts/s e cu rity/s sp). 8. Actualizar o s iste m a ope rativo e aplicação. Talve z a m e lh or de fe sa é m ante r- s e ofe ns ivo e inform ado. Novas vulne rabilidade s são de scobe rtas e re portadas todos os dias . Aplicar as de vidas alte raçõe s e actualizaçõe s às aplicaçõe s é fundam e ntal. Por e xe m plo, re ce nte m e nte foi de scobe rto um a falh a na API – M e s sage BoxA – para q ue m de s e nvolve aplicaçõe s e m W indow s e sta função é bastante fam iliar, pois é utilizada para m ostrar m e nsage ns de e rro/aviso/inform ação na plataform a. Este e xploit é agora conh e cido com o o prim e iro e xploit do W indow s Vista (abrange o W indow s XP/2003/Vista). Um program ador q ue utilize e sta API para criar m e nsage ns e m q ue de algum a form a é pe rm itido ao utilizador forne ce r o te xto a s e r colocado na m e nsage m , têm um a pote ncial falh a na aplicação q ue pe rm ite um atacante bloq ue ar o S iste m a O pe rativo. M ais inform açõe s e m h ttp://w w w .s e curite am .com / w indow sntfocus/6D 00R0AH PK .h tm l. Finalizando Educação é a ch ave no pe rcurso de tornar um a aplicação s e gura. G rande parte dos program adore s sabe m da ne ce s s idade de ve rificar dados introduzidos pe lo utilizador, ve rificar os lim ite s nas ope raçõe s de dados, e ntre outros , m as poucos têm a noção das cons e q uências da falta de stas ate nçõe s . É ne ce s sário conh e ce r e stas cons e q uências para pode rm os adoptar as de vidas práticas . Por ve ze s não s e trata ape nas de um a pote ncial falh a ou cras h na aplicação, m as s im dos riscos de s e gurança q ue pode m causar aos s e us utilizadore s . D e ve m e xistir m étodos e ciclos no de s e nvolvim e nto do softw are , e m q ue o te star do softw are te m um pape l im portante . Um a m aior ate nção de ve s e r dada a todos os dados obtidos do utilizador, q ue r s e ja do te clado, fich e iro, sock e t, pipe , e tc. S ite s acons e lh ados ao le itor inte re s sado: • h ttp://e n.w ik ipe dia.org/w ik i/Exploit_(com pu te r_s e curity) • h ttp://ins e cure .org/stf/sm as h stack .h tm l • h ttp://julianor.tripod.com /lam agra-bof.txt • h ttp://w w w .m ilw 0rm .com / • h ttp://w w w .m e tasploit.com / Fá b io P e d ro sa s e gurança <30> É pos s íve l faze -lo “à m ão” m as pode s e r de m orado. A solução é ligar todas e s sas m áq uinas a um a nova q ue corra aplicaçõe s de m onitorização, de m odo a avisar o re sponsáve l q uando h ouve r falh as . D e pe ndo da nature za do s iste m a pode m os ainda utilizar e stas ligaçõe s para actualizaçõe s de softw are e m anute nção das m áq uinas m onitorizadas . Um e xe m plo de sta s ituação pode s e r e ncontrado nas e m pre sas de W e b H osting (q ue forne ce m e spaço na Inte rne t para criação de páginas). São e m pre sas q ue , ge ralm e nte , contam com grande núm e ro de s e rvidore s e q ue , de vido à nature za do softw are q ue corre m , ne ce s s itam de actualizaçõe s com algum a fre q uência. Ne ste caso a m onitorização é tam bém útil para de te rm inar s e um a m áq uina e stá com proble m as , isto é crítico para um ne gócio q ue te m de e star a corre r 24 h oras por dia. G rid Com puting Conce ito e de finição bastante s e m e lh ante à com putação parale la m as com um a dife re nça e m m uitos casos . É natural usar o te rm o G rid Com puting para re fe rir um a re de de com putação parale la sobre a Inte rne t. É na m e sm a com putação parale la m as com algum as lim itaçõe s ao níve l da largura de banda e latência. Exe m plos são o G IM PS, SETI@ H om e , Folding@ H om e , e tc. Este s proje ctos ne ce s s itam de grande pode r com putacional e ao invés de com prare m m áq uinas q ue fiq ue m ao s e u s e rviço optaram por distribuir pe los s e us utilizadore s pe q ue nos program as q ue re ce be m dados de um s e rvidor ce ntral, e fe ctuam os cálculos e de volve m os re sultados a e s s e m e sm o s e rvidor. Este s são proje ctos de nature za m uito própria, e m q ue um a ligação constante à Inte rne t não é ne ce s sária, ne m tão pouco q ue s e ja rápida ou de baixa latência (algo im pos s íve l de garantir). M uitos de le s ape nas ne ce s s itam de um a ligação um a ve z por m ês de m odo a pe dir dados e e nviar re sultados . São um tipo de cluste ring e m e rge nte pois cada ve z m ais pe s soas têm com putadore s e m casa e ace s so à Inte rne t. Este m ode lo te m , com o é óbvio, bastante s lim itaçõe s pe lo q ue a sua m aior utilização é junto de proje ctos m e nos críticos e onde o dinh e iro é um a q ue stão de pe so. Pe rform ance do Cluste r A pe rform ance de um cluste r de pe nde do núm e ro (e q ualidade ) das m áq uinas q ue e stão inte rligadas . Q uando é ne ce s sário m ais capacidade de arm aze nam e nto ou m ais pode r com putacional são adicionados m ais discos ou m ais m áq uinas . O cre scim e nto de pe rform ance , a níve l com putacional, não é line ar m as s e rve os propós itos ne ce s sários s e m grande s bottle ne ck s . O m aior proble m a surge na ligação via re de . Existe m duas grande s q ue stõe s : largura de banda e latência. O s proble m as de largura de banda são facilm e nte re solvidos m udando a ligação ou adicionado linh as e xtra. O s e gundo proble m a, a latência, trás bastante s m ais dificuldade s . A latência é o te m po q ue os dados de m oram a pas sar por todo o h ardw are de um ponto inicial ao ponto final (inde pe nde nte m e nte do tam anh o dos dados, isto é, te m po adicionado ao te m po total de pas sage m da inform ação). Este factor é im pos s íve l de anular m as pode s e r m e lh orado com h ardw are de boa q ualidade . Esta q ue stão traz proble m as com os q uais o program ador de ve contar, tais com o a s incronização. É im portante te r noção de q uanto te m po s e gasta e m com unicação via re de de m odo a m inim izar o te m po pe rdido e nq uanto os dados são e nviados de nó a nó. Q uando a program ação de cada nó é e ficie nte a baixa pe rform ance da re de é um proble m a de m e nor im portância. Um a boa técnica para e vitar pe rda de te m po e m e nvios de dados pe la re de é a e xe cução de duas instâncias do m e sm o program a na m e sm a m áq uina. Enq uanto um a com unica e e spe ra a re ce pção ou e nvio de dados a outra s e gue o proce s sam e nto norm al. Pe d ro V e rru m a & L ui s Re nt e proje cto <31> tutorial Com o foi re fe rido no artigo ante rior, o te m a de sta e dição é re lacionado com bas e de dados, m ais concre tam e nte , ire m os falar sobre a m anipulação de dados e ntre o VB.NET (h ttp://m sdn2.m icrosoft.com /e n-us/ vbas ic/de fault.aspx) e o M S SQ L Se rve r 2005™ (h ttp://w w w .m icrosoft.com /s q l). O AD O .NET é um m ode lo de ace s so de dados (suce s sor do AD O – Acce s s D ata O bje ct) q ue nos forne ce o ace s so a variados “data source s” com o por e xe m plo ao M S SQ L Se rve r 2005, q ue é o q ue vam os utilizar para os e xe m plos ne ste artigo. As clas s e s do AD O .NET e stão re fe re nciadas no nam e space Sy ste m .D ata m as ne ste artigo vam os utilizar o nam e space Sy ste m .D ata.Sq lClie nt. Visual Bas ic .NET 5ª Parte O nam e space Sy ste m .D ata.Sq lClie nt dá-nos ace s so a todas as clas s e s q ue corre sponde m ao provide r para o SQ L Se rve r, pe rm itindo-nos as s im a ligação ao s e rvidor, e xe cução de com andos, le itura dos dados, e tc, tudo isto com as suas clas s e s incluídas . Para e xe m plificarm os a utilização de stas clas s e s , ire m os cons ide rar um a s ituação não re al: “No s ite da Re vista Program ar e stão listadas todas as e diçõe s lançadas até ao m om e nto. Um a aplicação foi de s e nvolvida para pe rm itir a ins e rção, alte ração e re m oção das e diçõe s por um adm inistrador q u e a te nh a instalada no s e u com putador. Todos e ste s dados e stão arm aze nados num a bas e de dados e m M S SQ L Se rve r 2005.” A bas e de dados utilizada irá conte r ape nas 2 tabe las . Um a arm aze na as e diçõe s já lançadas e a outra contém todos os com e ntários ins e ridos pe los vis itante s . Para pode rm os com unicar com a bas e de dados q ue criam os pre cisam os de e stabe le ce r um a ligação e ntre a nos sa aplicação e o SG BD . O obje cto Conne ction é usado e ntão ne sta s ituação, pe rm itindo- nos com unicar com a bas e de dados utilizando clas s e s com o a Sq lConne ction. <32> tutorial Dim ligacao As SqlConnection = New SqlConnection("Data Source=XPTO; Initial Catalog=RevistaProgramar;User Id=SA;Password=XPTO;") Try ligacao.Open() Console.WriteLine("A ligação teve sucesso") Console.ReadLine() Catch Console.WriteLine("Erro na ligação") End Try Na de claração da Sq lConne ction pre cisam os tam bém de indicar um a Conne ctionString2, usada para e stabe le ce rm os a ligação à bas e de dados e m q ue stão. Data Source=XPTO;Initial Catalog=RevistaProgramar;User Id=SA;Password=XPTO; Estabe le cida a ligação à bas e de dados é te m po de com e çar a m anipular os nos sos dados . Para is so pre cisam os de usar a clas s e Sq lCom m and para ins e rir, actualizar ou até m e sm o apagar os nos sos dados da bas e de dados . Com e sta clas s e pode m os as sociar um a e xpre s são e m T-SQ L ou e ntão um Store d Proce dure a s e r e xe cutado na bas e de dados e um a ligação (Sq lConne ction) SqlCommand(“Expressão T-SQL ou Stored Procedure”, SqlConnection) Para e xe cutarm os o Sq lCom m and pode m os usar os m étodos Exe cute NonQ ue ry (), Exe cute Re ade r() e Exe cute Scalar(). Exe cute NonQ ue ry : Exe cuta a e xpre s são e de volve o núm e ro de linh as afe ctadas na bas e de dados Exe cute Re ade r: Exe cuta a e xpre s são e constrói um Sq lD ataRe ade r com os dados de volvidos Exe cute Scalar: Exe cuta a e xpre s são e de volve o valor da prim e ira coluna na prim e ira linh a dos re sultados de volvidos . (Este m étodo é norm alm e nte utilizado q uando te m os um a e xpre s são q ue de volve valore s agre gados com o por e xe m plo “SELECT CO UNT(*) FRO M tabe la”.) Proce dim e ntos : • Ins e rir Edição Private Sub InserirEdicao() Dim ligacao As SqlConnection Dim cmdInserir As SqlCommand Dim NrLinhasAfectadas As Integer = 0 Try ligacao = New SqlConnection("Data Source=XPTO;InitialCatalog=RevistaProgramar; User Id=SA;Password=XPTO;") cmdInserir = New SqlCommand("INSERT INTO Edicoes(Nr_Edicao,Titulo,Data) VALUES(@nr,@titulo,@data)", ligacao) <35> Com o pode m ve r, e sta é um a m ane ira s im ple s de e nviar pe didos à bas e de dados para e xe cutar algo. Um a técnica m uito usada, é o uso de parâm e tros nos Sq lCom m ands de form a a s im plificar e clarificar o nos so código. Em ve z de te rm os a tare fa de concate nar strings , com o por e xe m plo, “SELECT * FRO M tabe la W H ERE Id=” & variave l_id & “ Nom e =’” & variave l_nom e & “’”, o q ue faria com q ue um a e xpre s são m ais e xte nsa s e torna-s e bastante confusa, pode m os as sociar ao Sq lCom m and um ou vários parâm e tros (Sq lParam e te r). cmdInserir.Parameters.Add("@nr", SqlDbType.Int, 4).Value = Convert.ToInt32(txtNumero.Text) de : Proce dim e nto “Ins e rir Edição” Um Sq lParam e te r na sua de claração m ais s im ple s , pode conte r um nom e (“@ nr”), o tipo de dados (Sq lD bType .Int) e um tam anh o (4). O nom e do parâm e tro é de pois usado na e xpre s são T- SQ L com o valor atribuído na proprie dade Value . Ne sta s ituação, trata-s e de um parâm e tro com a dire cção de Input. Após e ntão e xe cutarm os o com ando, te m os de pois q ue nos ce rtificar q ue tudo corre u com o pre visto e s e o q ue pre te ndíam os foi re alm e nte e xe cutado. Com o re fe rim os e m cim a, o m étodo Exe cute NonQ ue ry () de volve o núm e ro de linh as q ue foram afe ctadas na e xe cução de um a e xpre s são. A variáve l “NrLinh asAfe ctadas” arm aze na e ntão e s sa inform ação, bastando e ntão s e r igualada ao m étodo re fe rido. NrLinhasAfectadas = cmdInserir.ExecuteNonQuery() If NrLinhasAfectadas > 0 Then MessageBox.Show("O registo foi inserido com sucesso", "P@P", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) de : Proce dim e nto “Ins e rir Edição” Para pode rm os alte rar ou re m ove r um a e dição, pre cisam os de indicar à nos sa aplicação q ual é o núm e ro do s e u re gisto de form a a e xe cutar am bas as e xpre s sõe s corre ctam e nte . Com o pude m os ve rificar no proce dim e nto Alte rarEdicao() e Re m ove rEdicao, te m os as s e guinte s e xpre s sõe s as sociadas aos com andos : UPD ATE Edicoe s " & _ "SET Nr_Edicao = @ nr,Titulo = @ titulo, D ata = @ data " & _ "W H ERE ID = " & Conve rt.ToInt32(dgvEdicoe s .Curre ntRow .Ce ls ("ID ").Value ) D ELETE FRO M Edicoe s " & _ "SET Nr_Edicao = @ nr,Titulo = @ titulo, D ata = @ data " & _ "W H ERE ID = " & Conve rt.ToInt32(dgvEdicoe s .Curre ntRow .Ce ls ("ID ").Value ) Este ID é atribuído pe lo valor arm aze nado da coluna com o nom e “ID ” e na linh a s e le ccionada do com pone nte D ataG ridVie w (dgvEdicoe s), com pone nte e ste q ue nos pe rm itir listar todos os re gistos da tabe la Ediçõe s . tutorial <36> Proce dim e nto ListarEdicoe 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 ste proce dim e nto faze m os uso dos obje ctos D ataSe t e D ataAdapte r. Pode m os cons ide rar o D ataSe t com o um conjunto de dados, tal com o as e struturas das bas e de dados, pe rm itindo as s im um a m aior facilidade na m anipulação dos dados, te ndo tam bém com o vantage ns a não ne ce s s idade de e star com um a ligação activa à bas e de dados, e a não inte racção dire cta com a nos sa fonte de dados . O D ataAdapte r por sua ve z, é a ponte de ligação e ntre a nos sa bas e de dados e o D ataSe t. Para e sta s ituação, utilizám os o Sq lD ataAdapte r e as socíam os um com ando com um a e xpre s são T-SQ L para nos de volve r a lista das e diçõe s ins e ridas na bas e de dados . Após is so, usám os o m étodo Fil, q ue vai pre e nch e r o D ataSe t com os re sultados de volvidos , pode ndo as s im de finir o nos so D ataSe t com o o D ataSource da D ataG ridVie w q ue vai m ostrar as e diçõe s . Fe ito isto, te m os finalm e nte a nos sa aplicação a funcionar corre ctam e nte , com a listage m das e diçõe s e a pos s ibilidade de ins e rir, alte rar e re m ove r e diçõe s . O proje cto de de m onstração e ncontra-s e disponíve l e m : h ttp://w w w .portugal-a-program ar.org/artigos/vb5.rar tutorial Tia g o S a lg a d o <37> gnu/linux Q uantas ve ze s q uis criar um tutorial com a sua distro de G NU/Linux ou a e scre ve r um código q ue q ue ria partilh ar e , e m ve z de o apre s e ntar com im age ns e com e ntários , pe nsou e m gravar um víde o cons igo a com e ntá-lo? Criar um proje cto para a e scola ou unive rs idade e m q ue um víde o s e ria m ais fácil e prático de apre s e ntar? Criar um víde o para um a plataform a de e Le arning ou bLe arning? O u s im ple sm e nte , para m ostrar aos am igos os e fe itos 3D do s e u D e s k top? Ne ste artigo irá s e r apre s e ntada um a solução para tal. O program a usado é o re cordM yD e s k top. re cordM yD e s k top O re cordM yD e s k top é um program a criado Joh n Varouh ak is , program ado e m C, lançado e m 12 de Julh o de 2006 (data da inscrição do proje cto no Source Forge ) e disponíve l para dow nload e m h ttp://re cordm yde s k top.source forge .ne t. A lice nça de ste softw are é G PL (G NU Public Lice ns e ). Está de m om e nto e m e stado alph a, m ais concre tam e nte na ve rsão 0.3.1. Ape sar do program a original s e r e m m odo te xto e xiste um a ve rsão gráfica usando a plataform a G TK . Ante riorm e nte à e scrita de ste artigo não e xistia um a ve rsão portugue sa de ste program a. No e ntanto, os m e m bros de sta re vista diponibilizaram -s e , e , e xiste agora um a tradução disponíve l q ue facilitará a utilização do program a e m m odo gráfico. D e pe ndências • libasound2 (> 1.0.10) • libc6 (> =2.3.2.ds1-21) • libice 6 • libogg0 (> =1.1.2) • libsm 6 • libth e ora0 • libvorbis0a (> =1.1.0) • libvorbis e nc2 (> =1.1.0) • libvorbisfile 3 (> =1.1.0) • libx11-6 • libxdam age 1 • libxe xt6 • libxfixe s3 • zlib1g (> =1:1.2.1) Com andos A form a ge nérica de e xe cutar o program a é: $ recordmydesktop Isto irá gravar um fich e iro com o nom e out.ogg na sua pasta h om e . Para parar a gravação s im ple sm e nte cliq ue Ctrl + C. Para de finir o nom e do fich e iro e /ou a localização basta: $ recordmydesktop /home/user/video.ogg O program a tam bém pe rm ite de finir áre as a s e r gravadas . As s im pode usar-s e : $ recordmydesktop -x x-pos -y y-pos -width largura -height altura -o video.ogg Tanto a opção x-pos com o a opção y-pos re fe re m -s e à distância e m pixe ls a partir do canto supe rior e s q ue rdo. G ravação do D e s k top <40> Se o le itor não soube r o q ue é de s e nvolvim e nto orie ntado a obje ctos , dom ain-drive n de s ign ou re factoring e tive r curios idade e m apre nde r sobre e ste s te m as , e ntão e ste livro é para s i. S e , inclus ivé, for um program ador q ue não saiba e xactam e nte com o plane ar um proje cto q ue pre te nda com e çar, e ntão vai e ncontrar m uitas re spostas ne ste livro. "D e s e nvolvim e nto orie ntado por obje ctos - D om ain-D rive n D e s ign, Te ste s Unitários e Re factoring", de João H ugo M iranda e José António Alm e ida, e ditado pe lo Ce ntroAtlântico.pt, é um livro q ue foca te m as e conce itos e m voga na áre a da e nge nh aria de softw are , com o o conce ito de obje ctos , dom ain-drive n de s ign, de s e nvolvim e nto te st- drive n, de s e nvolvim e nto de inte rface s de utilização e re factoring. Q ue m q uis e s s e e studar e stas te m áticas te ria de re corre r a livros e scritos e m inglês, visto q ue não e xistiam praticam e nte re fe rências ne nh um as e m língua nacional. O livro aborda, portanto, te m as cons ide rados de níve l inte rm édio-avançado de form a s im ple s , pragm ática e e stim ulante até para os iniciante s , alargando as s im o público alvo da obra. Se gue um e stilo re fle xivo e por ve ze s tam bém didáctico. Para além de e xpore m factos e abordage ns , os autore s contam h istórias , apre s e ntam e xe m plos práticos , re fle cte m e discute m os factos . A obra re laciona ainda o paradigm a dos obje ctos com as práticas de program ação m ais re ce nte s e de m onstra q ue a anális e , de s e nh o e a codificação de um s iste m a de inform ação não de ve m s e r actividade s s e paradas, com o é m uito usual aconte ce r. O livro faz com q ue o le itor s e s inta inte re s sado com e ste s te m as , já q ue apre s e nta e xe m plos do dia-a-dia de um program ador, e xce rtos de código de vidam e nte com e ntados, diagram as e e s q ue m as fe itos por profis s ionais . O s e xe m plos são e m C# , m as q ualq ue r pe s soa com conh e cim e ntos m ínim os de program ação de ve rá s e gui-los s e m dificuldade . É re com e ndado a e studante s de program ação e program adore s profis s ionais , obviam e nte . Pode ainda s e r re com e ndado a ge store s de proje ctos , analistas ou re sponsáve is técnicos já q ue parte do te xto, e spe cialm e nte os prim e iros capítulos, e stabe le ce o e nq uadram e nto conce ptual das te m áticas de batidas ao longo dos re stante s capítulos . D e s e nvolvim e nto O rie ntado por O bje ctos Ru i M a ia João H ugo M iranda José Antonio Alm e ida Editora: Ce ntroAtlantico.pt Cole cção: Te cnologias Páginas : 232 1ª e dição: O utubro de 2005 ISBN: 9 89 -615-013-3 anális e s <41> O m ais fam os o m otor de bu s ca da inte rne t continua a tradição anual de publicar os de z te rm os m ais pe s q u is ados no s e u s ite . A s duas palavras m ais pe s q u is adas foram Be bo e M y Space , dois portais de com unidade s a criação de pág inas pe s s oais e afins , s e gu idas pe los fanáticos do fute bol com "W orld Cup". O víde o online tam bém m arca pre s e nça nas pe s q u is as dos inte rnautas , no 4º lugar com o s ite M e tacafe e e m 7º com a palavra Vide o. Para m ais inform açõe s : h ttp://w w w .google .com /intl/e n/pre s s /ze itg e is t2006.h tm l inte rne t 1. Be bo 2. M y Space 3. W orld Cup 4. M e tacafe 5. Radioblog 6. W ik ipe dia 7. Vide o 8. R e be lde 9 . M ininova 10. W ik i G oogle apre s e nta os 10 te rm os m ais procurados de 2006 Re gisto de m arcas online Foi disponibilizado dia 22 de D e ze m bro do pre s e nte ano um a nova áre a no portal do Instituto Nacional da Proprie dade Industrial (INPI), e ntidade re sponsáve l pe lo re gisto de m arcas, pate nte s e afins , q ue pe rm ite o re gisto M arcas, D e s igns e Inve nçõe s . Este s iste m a pas sa a s e r m ais cóm odo para o utilizador, visto não pre cisar de sair de casa ne m de tratar de pape lada e s im ultane am e nte m ais barato. h ttp://w w w .inpi.pt Th e CSS Pow e r H á algum te m po atrás , foi apre s e ntado no fórum do Portugal-a-Program ar um s ite bastante inte re s sante para todos os program adore s w e b q ue q ue re m apre nde r CSS e /ou trabalh am com e le re gularm e nte , falo do s ite M aujor (h ttp://w w w .m aujor.com /). Espantoso. Isto é o pe nsam e nto q ue m uitos pode rão te r ao abrir e ste s ite , e e xplico o porq uê: grande q uantidade de inform ação, fiáve l e , principalm e nte , e m Português . É ce rto q ue é português do Bras il, m as ainda h á e spe rança q ue s e de s e nvolva um a plataform a as s im e m Portugal. Ficam os à e spe ra... <42> blue scre e n D ificuldade s e m largar o com putador nas férias ... Nova am e aça aos M acs Novo gadge t para a fam ília iPod Te clado l33t
Docsity logo



Copyright © 2024 Ladybird Srl - Via Leonardo da Vinci 16, 10126, Torino, Italy - VAT 10816460017 - All rights reserved