e dit orial

índice 3 not ícias 4 t m a de capa e 10 a program ar 26 s e gurança 28 e lct e rónica 33 t cnol e ogias 38 t orial ut 44 gnu/inux l 47 e v nt e os 49 anále s is 50 int rne t e 51 bl s cre e n ue 52 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

Criar Agir e Apre s e nt , ar
Nos v ários e v nt por onde t nh o pas s ado, um t m a t m s ido e os e e e re corre nt : a inov e ação e m P ugal com o al ort ou, guns indicaram , a f t de l O e xe m pl m ais apre s e nt al a a. o ado e ra no de s e nv v e nt olim o de apl icaçõe s w e b, um a áre a q ue act m e nt e s t e m f ual e á ranco de s e nv v e nt olim o. T odos os dias s urge m nov as e originais apl icaçõe s , m as ainda é raro e ncont um a e q uipa port rar ugue s a e nv v olida. F oram apre s e nt adas v árias e xpl icaçõe s para e s t a gre v de criação: a l ização (cada v z m e nos im port e ) a e ocal e ant , m e nt idade , a f t de inv s t e nt e , principal e nt , a f t de al al a e im o m e al a corage m . Cada v z m ais s e pe ns a duas v ze s ant s de s e at e e e irar de cabe ça nal gum proj ct arris cado. No e nt o, o m e lor e o ant h cam inh o apre s e nt ado para o s uce s s o f m e s m o "e nt (m uit oi t ar" as v ze s ) de dicar-s e a um proj ct e f r t e , e o aze udo para q ue v ingue . F ica aq ui o ince nt o a t iv odos os port ugue s e s q ue e s t e re m a lr, iv e s e m e s m o com t oda a de dicação não obt e re m re s ul iv t ados (o q ue pode rá acont ce r m uit e as v ze s ) apre ndam com a e , e xpe riência e av ance m para nov ide ias . M as t nt m ... as e e A part de s t e dição ire m os t nt acom panh ar m ais e v nt q ue ir a e ar e os acont çam por P ugal no s e nt e ort , ido de div gar o q ue s e v ul ai f ndo pe l nos s o país e prom ov r a dis cus s ão nos m e s m os . P aze o e or is s o, pe dim os q ue nos not iq ue m de f uros e v nt , para if ut e os pode rm os div gar na re v t de nt do pe ríodo pos s ív lT bém ul is a, ro e . am pode rão e nv iar-nos re s um os e f os de e v nt j de corridos para ot e os á s urgire m na nov s e cção Ev nt , inaugurada com o e v nt a e os e o T cnonov 2007, no q ual s t e pre s e nt . e e iv e

coorde nador adj o unt
M ig ue l ais P

e dit or

Joe l Ram os

re dacção

D anie l Corre ia Rui G onçal s ve P dro T ixe ira e e B runo V az João P re ira e R icardo Roch a G uile rm e Rodrig ue s h Nuno Corre ia M ig ue l ah non W Ce l Ram os so F rnando M art e ins

col aboradore s
Jos é O l ira ive

cont o act w e bs it e

re vis t aprog ram ar @ port al ug -a-prog ram ar.org w w w .re vis t a-prog ram ar.inf o

<2>

Sérgio Sant os

not ícias

UE am e aça M icros of t
A e m pre s a de B lG at s t m de cobrar m e nos il e e pe l ce dência de códigos -f e s a out a ont ras com panh ias de s ofw are . O av o f f it no t is oi e o dia 1 de M arço pe l Com is s ão Europe ia. A CE a de u q uat s e m anas à M icros of para re duzir os ro t cus t de ace s s o a código-f e por produt os ont oras de s ofw are t q ue q ue re m as s e gurar a com pat idade e int racção com apl ibil e icaçõe s da M icros of. t D e acordo com o e xe cut o com unit iv ário, os pre ços prat icados pe l M icros of ape nas e s t a t ão a al cance das m aiore s com panh ias . A M icros of re s ponde u à adv rt t e ência da CE, algando q ue os pre ços de ace s s o aos e códigos s ão 30% m ais baixos q ue a m édia prat icada e m cas os s im il s . A Com is s ária are para a Concorrência Europe ia, acus a a M icros of de v ar o art t iol igo 82 do T ado rat Europe u da Concorrência, com prát icas de abus o de pos ição dom inant . Se não s at f r e is ize as e xigências da CE, a M icros of arris ca-s e a t gas t ar num a m ul o corre s ponde nt às t a e re ce it de cinco m e s e s no m undo int iro… as e

Adobe l ança v rs ão do e P ot h op onl h os ine
Se gundo inf açõe s de B orm ruce Ch ize n, pre s ide nt da e m pre s a, nos próxim os s e is e m e s e s s e rá l ançada um a v rs ão onl do e ine P ot h op, o m ais conh e cido e ut izado h os il program a de e dição de im age m do m undo.

O P ot h op j ar-s e -á port o, ao Adobe h os unt ant Re m ix, o j e xis t nt s ofw are onl para á e e t ine e dição de v o. Com e s t m e didas , a íde as Adobe e s t ará a com pe t dire ct e nt com ir am e e m pre s as com o o G oogl, q ue j of re ce m e á e s e rv iços s e m e lant s . h e

Se m inários I -T ST agus 2007
O s Se m inários I -T ST agus , iniciados no ano de 2004, s ão um e v nt re al e o izado anual e nt m e v ando prom ov r a dis cus s ão de e xpe riências e t is e roca de ide ias re l acionadas com a áre a t cnol e ógica, be m com o a s ua infuência no m undo e m pre s arial Se ndo organizado por l . al unos do I t ut Supe rior Técnico (pól do T ns it o o agus park ) e s t e v nt t m t um a cre s ce nt , e e o e ido e part icipação de prof s ionais , s e ndo j um conce it is á uado pal para a apre s e nt co ação de proj ct inov e os adore s e de f e im pact no m e rcado. ort o A 4ª e dição dos Se m inários I -T ST agus re al izar-s e á nos dias 19 e 20 de M arço, no Ce nt de ro Congre s s os do T agus park , s e ndo s ubordinada ao t m a " al e B ine s s " O ut dos grande s e Re Tim us . ro at ract os da e dição de s t ano s e rá a e xibição iv e de T rabalos de F h inalde Curs o por part de e al unos do I . ST O e v nt irá cont com um lq ue s ignif iv de oradore s de pre s t e o ar e icat o ígio, e nt os q uais s e re de s t acam Jos é M agalãe s (Se cre t h ário de Es t ado da Adm inis t ração I e rna) Carl B is t (T nt , os at a Sy s t m s ) Jorge L s (B SA) Ant e , ope RI , ónio M arce l (TECM I Eas y t o C ran V odaf ) e nt out . one , re ros P ara m ais inf açõe s , cons ul o s it of orm t e e icialh tp:/s e m inarios .t : t / agus .is t l .ut.pt

<3>

t m a de capa e

I rodução ao W M L(W AP nt )
A t cnol e ogia W AP f criada pe l F oi o órum W AP , f undado e m 19 9 7 por m arcas com o a Nok ia ou a M ot a, com o obj ct o de criar um orol e iv prot ocol de t o roca de inf ação e m orm dis pos it os m óv is (w ire ls s ) com o os iv e e t lm óv is . O W AP cons is t num a l e e e e inguage m de t roca de inf ação orm própria de nom inada W M L O W M Lé com pat e l . ív com os s t andards de T /P H TM L e XM L e incl CPI , ui t bém am um a l inguage m de s cript ing s e m e lant ao Jav cript m as m ais lv de h e as , e e f a a s e r de rápida e xe cução por part orm e dos dis pos it os m óv is , j q ue e s t s não iv e á e pos s ue m grande pode r de proce s s am e nt o, de nom inada W M L Script . A s igl W AP s ignif a ica W ire ls s Appl ion e icat P ocol ou s e j P ocol para Apl rot , a, rot o icaçõe s W ire ls s e é de f e inida com o um a apl icação XM L1.0. O s brow s e rs q ue cons e gue m int rpre t e s t e ar a l inguage m s ão e s pe cíf , ou s e j não icos a, pode us ar o s e u brow s e r h abit ual não s e r (a q ue pos s ua al gum pl ugin para o e f it para e o) v r páginas W AP O s t e . ipos de brow s e r com pat e is com o W AP s ão de nom inados ív M icro B s e rs , pe l s uas caract rís t row as e icas óbv ias – não pode m t r grande s e ne ce s s idade s ao nív l do h ardw are , m ais e e s pe cif icam e nt ao nív l m e m ória e CP e e da U, e por is s o s ão ide ais para s e r us ados nos dis pos it os m óv is . iv e O W M L com o f e xpl , oi icado ant riorm e nt , é e e um a l inguage m q ue a bas t e s ant program adore s pare ce rá f il por s e r um am iar m is t de H TM L e XM L m as m ais rígida e m o , t rm os de int rpre t e e ação. As páginas e m W M L não s ão de m uit o dif re nt program ação das páginas e m H TM L e e , por is s o o program ador com e xpe riência e m H TM L pode f m e nt acil e iniciar-s e ne s t a l inguage m . Es t as páginas t êm a e xt ns ão e .w m le s ão s e ns ív is a m aiús cul por t re m e as e por bas e o XM L ou s e j s e e s cre v r <abc> , a, e não v t r o m e s m o re s ul ai e t ado do q ue s e e s cre v s s e <AB . P s t e C> or andard do XM L as , t ags de v m s e m pre s e r apre s e nt e adas e m m inús cul e de v m s e r s e m pre f ch adas . as e e No W AP e xis t m t rm os e s pe cíf e e icos para as páginas e o s e u conj o, e cos t a f r-s e unt um aze a anal ogia e nt o W AP e um j re ogo de cart . as I agine q ue t m um a t m e orre de cart , as de nom inado por D e ck , e cada e lm e nt e o de s s a t orre é, obv e nt , um a cart – iam e a de nom inada por Card no código. O ra as s im s e ndo, um a página W M L é cons ide rado um de ck e de nt da página W M L pode m e xis t ro ir m úl as cards . Q uando um ut izador ace de t ipl il à página W M L s ão de s carre gadas t odas as cards do de ck , s e ndo q ue a nav gação e e nt e l e s t re as ará a cargo do dis pos it o q ue iv as re q ue re u, q ue ne s s a al t ura não e s t ará e m cont o com o s e rv act idor.

<4>

t m a de capa e
O lit ne s t m om e nt pode e s t um pouco conf o e m re l e or e o ar us ação al guns t ópicos m e nos e xpl orados e por is s o é pre f rív l ue obs e rv um e xe m pl de um de ck , para m e lor cons ol e e q e o h idar os conh e cim e nt at agora adq uiridos : os é
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card id="carta1" title="Título da Carta 1"> Isto é uma card. <br /> Várias tags HTML funcionam aqui e serão abordadas mais à frente nesta introdução ao WML. </card> <card id="carta2" title="Segunda Carta"> <p> Segunda carta do deck </p> </card> </wml>

Re s ul t ado:
Expl icação do Código:
<w m l - T q ue de l it o de ck . > ag im a <card> T q ue de l it cada card. P ag im a ode m t r e v ários at ribut , os apre s e nt os ados s ão: id –de nt icação da cart de v s e r um nom e I if a, e único no de ck . t l – ul da card, nos t rm inais W APcos t a it e Tít o e um s e r apre s e nt ado no t opo do e crã. <p> - P arágraf idênt ao H TM L o, ico . <b r /> - Q ue bra de l a, s e m e lant ao H TM L inh h e .

V árias t ags H TM Lpode m s e r ut izadas da m e s m a f a e m W M L Aq ui f il orm . ica um a pe q ue na lt is a das m e s m as : <p> - P arágraf o <b r /> - Q ue bra de l a inh <b ig> - T xt G rande e o <sm al - T xt P q ue no l e o e > <b > - B d ol <i> - I ál t ico <u> - Subl ado (Unde rl ) inh ine

<5>

t m a de capa e
Um e lm e nt m uit ut izado e m H TM Le q ue t bém pode s e r ut izado no W M Lé a t e o o il am il abe l As a. t abe l f as uncionam prat icam e nt do m e s m o m odo do q ue no H TM L e :
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card title="Tabela"> <p> <table columns="2" border="1"> <tr> <td>Coluna 1</td> <td>Coluna 2</td> </tr> </table> </p> </card> </wml>

Re s ul t ado:
O ut t ras ags com o o <a> , q ue t o s ão ut izadas para ant il anch ors com o para l s e m H TM L pode m s e r ut izados ink il e m W M L m as com um a pe q ue na al ração na f a , t e orm com o os anch ors s ão ut izados : il

<anchor>Clique Aqui <go href="teste.wml"/> </anchor>

As im age ns e m W M L j s ão um a h is t á ória dif re nt . P e e or s e re m dis pos it os com poucas capacidade s e m t rm os iv e de h ardw are t êm de s e r ut izadas pe q ue nas , il norm al e nt m onocrom át m e icas . Es t im age ns t um a e xt ns ão e s pe cíf as êm e ica, o .w bm p. Não s e rá abordada aq ui a cons t rução de im age ns .w bm p, m as um a bre v pe s q uis a na I e rne t e nt de v rá e s cl ce -l re l iv e nt a e s t as s unt e are o at am e e o. A im age m de v rá s e r ins e rida do s e guint m odo: e e
<img src="imagem.wbmp" alt="imagem_alt" />

O s f ul orm ários s ão e lm e nt m uit út is para adicionar int ract idade ao s e u s it ou port , e os o e e iv e al ape s ar dos ut izadore s não f il icare m m uit t m po a nav gar na W APao cont o e e rário da I e rne t nt . Ne s t s e cção v os de ixar o lit e xpl a am e or orar por s i próprio código de f ul orm ários j conce bidos , á be m com o o s e u re s ul t ado, de m odo a pode r apre nde r m e lor a t h rabalar com f ul h orm ários e m W M L (e xe m pl re t . os irados do s it w 3s ch ool e s .com e t radu zidos para port gu ês ) u

<6>

t m a de capa e
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card title="Input"> <p> Nome: <input name="Nome" size="15"/><br/> Idade: <input name="Idade" size="15" format="*N"/><br/> Sexo: <input name="Sexo" size="15"/> </p> </card> </wml>

(im age m e ncu rt ada de v ido ao t anh o do am e crã do s im u l ador)
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card title="Lista de seleccao"> <p> <select> <option value="htm">HTML Tutorial</option> <option value="xml">XML Tutorial</option> <option value="wap">WAP Tutorial</option> </select> </p> </card> </wml>

<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card title="Lista de seleccao 2"> <p> <select multiple="true"> <option value="htm">HTML Tutorial</option> <option value="xml">XML Tutorial</option> <option value="wap">WAP Tutorial</option> </select> </p> </card> </wml>

<7>

t m a de capa e
<?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card title="Fieldset"> <p> <fieldset title="CD Info"> Titulo: <input name="titulo" type="text"/><br/> Premio: <input name="premio" type="text"/> </fieldset> </p> </card> </wml>

Not Es t s im ul a: e ador não re produz o f l e t ie ds
da m e lor f a. h orm

Em W M L para a nav gação e nt as div rs as , e re e páginas e af , t m os os s e guint s e lm e nt : ins e e e os

P v re ious

G o:
<anchor> Ir para Carta <go href="carta.wml"/> </anchor>

D irige para a página v it is ada ant riorm e nt . e e
<anchor> Página Anterior <prev/> </anchor>

P v re ious :
<anchor> Anterior <prev/> </anchor>

Re f s h re

Act iza a página ao cl , e ual icar act iza as v ual ariáv is dadas . e

t bém am

Re f s h : re
<anchor> Actualizar <go href="pagina.wml"/> <refresh> <setvar name="a" value="10"/> </refresh> </anchor>

<anchor> Actualizar a página <go href="paginaactual.wml"/> <refresh> <setvar name="a" value="20"/> </refresh> </anchor>

C om andos W M L
Go
D irig e para a pág ina indicada no h re f .
<anchor> Ir para abc <go href="abc.wml"/> </anchor>

No O pe rat (noop) ion P v um a acção de s e r re al re ine izada.
<anchor> Ir para abc <go href="abc.wml"/> <noop/> </anchor>

<8>

t m a de capa e
Tim e rs
Ut izam -s e norm al e nt para il m e re dire ccionar para um a página e s pe cíf ica, de pois de x s e gundos .
<card ontimer="test.wml"> <timer value="30"/> <p>Vai ser redireccionado em 3 segundos.</p>

V ariáv is e m W M L e
D e f um a v inir ariáv l e :
<setvar name="a" value="500"/>

Com is t é criada um a v o ariáv la com o e v or 500. al P ara de f inir um a v ariáv la part de um e ir inputf m os : aze
<card id="carta1"> <select name="escolha"> <option value="pap">Portugal-aProgramar</option> <option value="revista">Revista PROGRAMAR</option> </select> </card>

E s e guidam e nt us am os o s e guint código e e para us ar a v ariáv l ida: e obt
<card id="carta1"> Seleccionaste: $(escolha) </card>

Se s e guiu at nt e nt e s t art e am e e igo com ce rt za irá gos t de aprof e ar undar m ais os s e us conh e cim e nt e apl os nos s e us os ica-l próprios s it s , por is s o de ixo aq ui um a e e xce lnt f a de apre nde r m ais s obre e e orm e s t t m a. e e Cons ul o t orial W 3Sch ool s obre e s t t e ut da s e as s unt m ais e s pe cif o, icam e nt a página e de e xe m pl (h tp:/w 3s ch ool os t / s .com / ap/ w w m l xam pls .as p) _e e . D aq ui é t udo, bons s it s ! e

<9 >

D anie l Corre ia

a program ar

P rogram ação O rie nt ada aos As pe ct com os As pe ct J
I rodução nt
D urant os úl os anos as s is t os a um a e t im im grande divul gação da program ação orie nt ada aos obj ct e os (P O ) Es t ve io O . a re s ponde r a re q uis it os e s s e nciais no de s e nvol e nt de s ofw are , nom e adam e nt vim o t e no q ue diz re s pe it às f idade s de o acil m anut nção e re ut ização do código. M as e il ape s ar de t odas e s t e vol as uçõe s , ne m t udo aq uil q ue a P O s e propunh a cons e guir f o O oi al cançado. É ne s t cont xt q ue s urge a e e o program ação orie nt ada aos as pe ct (P A) os O . Es t novo paradigm a de program ação s urgiu e e m 19 9 6 por G re ge r K iczal e pe l s ua os a e q uipa no Xe rox P ARC, q ue t bém f am oram re s pons áve is pe l o de s e nvol e nt vim o do As pe ct a l J, inguage m P A m ais us ada. O Q uando v os am de s e nv v r ole um a apl icação, é conv nie nt e e div idir o problm a q ue nos f propos t e m part s . e oi o e A s e paração do problm a de acordo e com os dados e as f uncional idade s a e ls e as s ociadas f it o e s t acila udo dos re q uis it os da apl icação. I t é o q ue s e de s igna por so s e paração de int re s s e s . O paradigm a e OO e st abe lce e um a s e paração de int re s s e s t ndo e m cont os t e e a ipos de dados , re pre s e nt ados pe l obj ct , e as os e os f unçõe s q ue ut izam cada t il ipo de dados , ou s e j os m ét a, odos a q ue um obj ct e o re s ponde . M as , com o j f re f rido ant riorm e nt , á oi e e e ape s ar da orie nt ação aos obj ct e os t r e t razido m e lorias na f a de program ar h orm , não cons e guiu re s ole r al v guns problm as . e Exe m pl cl s icos s ão o re gis t os ás os das ope raçõe s e m f e iros de l ich og q ue e ncont ram os e m m uit os s ofw are s , ou t program ação concorre nt / t e dis ribuída. O código as s ociado a e s t e t ipo de f uncional idade s e ncont e norm al e nt ra-s m e e s palado por t h odos os m ódul , o q ue os dif t a m anut nção e a e v ução do icul a e ol código. Em P A dize m os q ue is t s ão O o int re s s e s e nt cort e s , pois cort e re ant am t rans v rs al e nt t e m e odos os m ódul . A P A os O v m re s ole r e s t problm a int e v e e roduzindo um nov nív l s e paração de int re s s e s , o e de e os as pe ct . os B icam e nt e s t s int re s s e s t as e e e rans v rs ais à e apl icação s ão e ncaps ul ados ne s t nov as as unidade s m odul s are e pos t riorm e nt e e f undidas com as cl s e s num único s is t m a. as e I t não s ó aum e nt a f idade de so a acil m anut nção de s t e as f uncional idade s da apl icação, v t q ue t is o udo s e e ncont num ra único l , com o aum e nt as pos s ibil ocal a idade s de re ut ização das cl s e s nout cont xt , il as ros e os pois e s t as e ncont -s e l pas de s t ram im as f uncional idade s q ue norm al e nt v m e ariam m uit de cas o para cas o. o

<10>

a program ar

O As pe ct J
O As pe ct (h tp:/w w w .e cl e .org/ pe ct) f J t / ips as j oi a prim e ira l inguage m O A de s e nv v olida e é, prov e l e nt , av m e a m ais us ada. Es t a l inguage m pe rm it acre s ce nt as pe ct a e ar os program as f it e m Jav P e os a. ara com pre e nde r o As pe ct é ne ce s s ário conh e ce r t J rês conce it f os undam e nt pre s e nt s na P A : ais e O • adv s - s ão f ice ragm e nt de código os com as acçõe s re f re nt s aos int re s s e s e e e e nt cort e s ; re ant •oin point - s ão l j s ocais de um program a onde os adv s s e rão e xe cut ice ados , q ue pode m s e r a ch am ada/ xe cução de um e m ét odo, o ace s s o a m e m bros de um a cl s e , a criação de um obj ct o as e o, l ançam e nt de e xce pçõe s , e t o c.; • point s - s ão um conj o de j cut unt oin point , de f s inidos s e gundo um de t rm inado e crit ério, q ue ide nt icam os l if ocais onde um de t rm inado adv s e rá e xe cut e ice ado.

• it in - j point q ue ocorre m de nt w h oin s ro de de t rm inadas cl s e s ; e as •arge t- e nv de m e ns age ns a um t io obj ct de um de t rm inado t e o e ipo; • args - e nvio de m e ns age ns e m q ue os argum e nt s ão de um de t rm inado t os e ipo. A e xpre s s ão pode s e r um a pal ra (nom e av de um a cl s e , nom e de um m ét as odo, e t , c.) m as t bém t m os caract re s e s pe ciais : am e e • - re pre s e nt um a s e q uência de * a caract re s q ualue r de s de q ue não e q , cont nh a pont ; e os • - re pre s e nt um a s e q uência de .. a caract re s q ualue r m e s m o cont ndo e q , e pont ; os • - re pre s e nt as s ubcl s e s de um a + a as dada cl s e . as V j os agora al e am guns e xe m pl : os • point tt t : e xe cu t cu os r() ion(St ring t ring() ; oSt ) Re pre s e nt a t odas as e xe cuçõe s do m ét odo t ring. P oSt ode m os re s t ringir ape nas à e xe cução do m ét odo a obj ct da e os cl s e Xpt s ubs t uindo St as o it ring t ring() por oSt St ring Xpt oSt o.t ring() ou a obj ct , e os da cl s e Xpt e t as o odas as s uas s ubcl s e s as f ndo St aze ring Xpt .t ring() o+ oSt ; • point ts e t () : cal Xpt .s e t (..) ; cu s l (* o* * ) Re pre s e nt a a ch am ada de m ét odos com e çados pe l pal ra s e t de cl s e s a av as com e çadas pe l pal ra Xpt com um a av o, núm e ro q ualue r de argum e nt . P q os ode m os l it ape nas a m ét im ar odos q ue re ce bam argum e nt de um de t rm inada t os e ipo, por e xe m pl f ndo * Xpt .s e t (int ring) o, aze o* * ,St l it im aríam os ape nas aos m ét odos cuj o o prim e iro argum e nt f s e um int iro e o o os e s e gundo um a s t ring (para al de v rif ém e icar t odas as out condiçõe s j indicadas ) ras á . • point tge t () : ge t at St cu s (priv e ring abc* ); Re pre s e nt a t odos os ace s s os (para cons ul a at t a) ribut priv e do t os at ipo St ring, com e çados por abc.

P cut oint s
G e ne ricam e nt , a de f e inição de point obe de ce à s e guint s int : cut e axe um

pointcut <nome>() : <tipo>(<padrão>);

O nde : • <nom e > é o ide nt icador de s t point if e cut • ipo> indica a q ue t de j point <t ipo oin nos re f rim os (ch am ada de um a f e unção, ace s s o a um at ribut e t ; o, c.) • <padrão> é um a e xpre s s ão q ue re s t ringe os j point a s e re m oin s cons ide rados àq ue ls q ue f m m at ing e aze ch com e s t e xpre s s ão. a D e s e guida indicam -s e point m ais im port e s : s ant os t ipos de j oin

• l ch am ada de um a f calunção; • xe cut - e xe cução de um a f e ion unção; • t- cons ul dos at ge t a ribut de um os obj ct e o; •e t- al ração dos at s t e ribut de um obj ct os e o;

<11>

a program ar
P ara de f inirm os point s t bém t m os à nos s a dis pos ição ope radore s l cut am e ógicos (!, || e & & , cuj s ignif o icado é o h abit ) ual .
pointcut gets() : get(* *) && within(Xpto);

Es t point re pre s e nt um ace s s o a q ualue r at e cut a q ribut de s de q ue s e j da cl s e Xpt o, a as o. Agora v os v r com o ut izar o t am e il arge t e o args para re s t ringir o t ipo dos obj ct a q ue o e os m ét odo é e nv iado, as s im com o o t dos argum e nt com os q uais o m ét ipo os odo f inv oi ocado.
pointcut p1(Xpto x,int y,float z) : execution(* *(..)) && target(x) && args(i,j);

D e s t f a re s t a orm ringim os os j point aos m ét oin s odos e nv iados a um obj ct do t e o ipo Xpt e q ue o re ce be m 2 argum e nt (o prim e iro do t os ipo int e o s e gundo do t ipo foat. É cl q ue is t l ) aro o pode ria t r s ido cons e guido com a e xpre s s ão * Xpt (int l ) m as , com o v re m os de e o.* ,foat, e s e guida, e s t opção pe rm it us ar o obj ct ao q ual oi e nv a irá e o f iado o m ét odo, as s im com o os argum e nt re ce bidos na e s pe cif os icação de adv s . ice

Adv s ice
Se os point s indicav cut am o conj o de pont de um a apl unt os icação onde q ue ríam os re al izar out ope raçõe s , os adv s pe rm it m -nos de f q uais s ão e s s as ope raçõe s . ras ice e inir T m os 3 (ou 5) t e ipos de adv s . Us am os o: ice • f , q uando q ue re m os e xe cut acçõe s ant s de um j point be ore ar e oin ; • t r q uando q ue re m os e xe cut acçõe s de pois de um j point e xis t afe , ar oin , indo t al rnat as : rês t e iv • afe r() q ue é s e m pre e xe cut o t , ado; • afe r() re t o t urning, q ue ape nas é e xe cut ado q uando o m ét odo as s ociado ao j point oin re t orna; • afe r() t row ing, q ue ape nas é e xe cut o t h ado q uando o m ét odo as s ociado ao j point oin l ança um a e xce pção. • around , q uando q ue re m os e xe cut acçõe s e m ve z de um m ét ar odo (s e ndo q ue de nt do ro adv pode m os e xe cut o m ét ice ar odo original ) . V os agora analar al am is guns e xe m pl concre t . P os os ara t v os cons ide rar as s e guint s al am e cl s e s Jav as a:
public class Classe1 { private int x; private boolean a; public Classe1(int x,boolean a) { this.x = x; this.a = a; } public void setX(int x) {this.x=x;} public void setA(boolean a) {this.a=a;} public String toString() { return ("x=" + this.x + " / a=" + this.a); } }

public class Classe2 { private int y; public Classe2(int y) { this.y=y; } public void setY(int y) {this.y=y;} public String toString() { return ("y=" + this.y); } }

<12>

a program ar
O prim e iro problm a q ue v os re s ole r cons is t e m al rar os m ét e am v e t e odos t ring() V os al ráoSt . am t e l de f a a q ue pas s e m a criar um a s t os orm ring q ue cont nh a t bém o nom e da cl s e . T e am as al pode s e r cons e guido do s e guint m odo: e

pointcut tostr(Object obj) : execution(String toString()) && target(obj); String around(Object o) : tostr(o) { String s = proceed(o); return ("<" + o.getClass().getName() + " @ " + s + ">"); }

P e iro de f os o point rim inim cut q ue , para al de re s t ém ringir os m ét odos à e xe cução do t ring() oSt , t bém capt o obj ct ao q ualo m ét am a e o odo é e nv iado at és do t rav arge t D e s t f a f . a orm oi pos s ív l il o obj ct no adv , com o s e pode v r nas l as 5 e 6. F t bém us ado e ut izar e o ice e inh oi am proce e d, q ue e xe cut o m ét a odo originalD e pois é s ó acre s ce nt o nom e da cl s e e de v v r . ar as ole o re s ul t ado. No próxim o e xe m pl v os v r com o us ar o args , q ue é s e m e lant ao t o am e h e arge t m as e s t capt , e a os argum e nt do m ét os odo (ou cons t or com o s e rá o cas o) Es t as pe ct irá im prim ir um a rut , . e o m e ns age m s e m pre q ue um obj ct de um a cl s e com e çada por Cl s e f inicial e o as as or izado at és de um cons t or q ue re ce ba um argum e nt do t int iro. rav rut o ipo e

pointcut init(int x) : initialization(new(..)) && within(Classe*) && args(x); after(int x) : init(x) { System.out.println("Classe: " + thisJoinPointStaticPart.getSignature().getDeclaringType().getName()); System.out.println("Argumentos: " + x); }

Ne s t e xe m pl f t bém us ada a v e o oi am ariáv lt is JoinP St icP , q ue cont e h oint at art ém um a s érie de inf açõe s s obre o j orm oin point e m q ue o as pe ct v s e r e xe cut o ai ado. Exis t t bém a v e am ariáv l e t is JoinP , q ue pode ria s e r us ada ne s t cas o para s abe r q uais os argum e nt re ce bidos . T s e rá h oint e os al f it no próxim o e xe m pl e o o. Suponh am os agora q ue q ue ríam os re gis t t ar odas as al raçõe s re al t e izadas e m q ualue r um a q das cl s e s . P as ara al rar o v or dos at t e al ribut é ne ce s s ário re corre r aos m ét os odos s e t . L * ogo v os criar um point am cut q ue agrupe t odas as e xe cuçõe s de s t s m ét e odos . T bém v os am am q ue re r re gis t q ual obj ct af ct ar o e o e ado, q uais os argum e nt us ados no m ét os odo (s e ndo q ue o s e u t ne m s e m pre é o m e s m o) e q ual nom e do m ét ipo o odo.

pointcut sets(Object obj) : call(* Classe*.set*(..)) && target(obj); before(Object obj) : sets(obj) { try { BufferedWriter bw = new BufferedWriter(new FileWriter("history.txt",true));

<13>

a program ar

Date d=(Calendar.getInstance()).getTime(); bw.write("Data: " + d + "\nObjecto: " + obj + "\nMetodo: " + thisJoinPointStaticPart.getSignature().getName() + "\nArgumentos:\n"); Object[] args = thisJoinPoint.getArgs(); String[] ids = ((CodeSignature)thisJoinPoint.getSignature()) .getParameterNames(); for (int i = 0; i < args.length; i++) { bw.write(" " + ids[i] + "=" + args[i] + "\n"); } bw.close(); } catch(Exception e){System.out.println(e);} }

Aq ui j re corre m os à v á ariáv lh is JoinP e t oint para obt r os argum e nt us ados no m ét e os odo, as s im com o os ide nt icadore s dos argum e nt . O re s ul if os t ado obt s e rá al com o: ido go D at SatD e c 09 17:56:30 W ET 2006 a: O bj ct <Cl s e 1 @ x=12 /a=t > e o: as rue Me t odo: s e t X Argum e nt : os x=10

Concl ão us
Ao l ongo de s t art e igo f icaram v ív is al is e guns dos be ne f ícios q ue pode m os obt r com a P A. e O Cont udo h á al guns f os q ue é ne ce s s ário re al . Em prim e iro, q ue um a abordage m dos act çar problm as s e gundo e s t m e t e a odol ogia, é bas t e m ais com pl ant icada do q ue a abordage m O O . É dif de f a e s t ura do s ofw are , ide nt icando corre ct e nt t ícil inir rut t if am e odas as part s q ue o e com põe m . M e s m o de pois de de f inida a e s t ura, com e t m os f m e nt e rros na de f rut e acil e inição dos as pe ct (acont ce v os e árias v ze s de f as pe ct q ue originam cicl inf os , pois ao e inir os os init e xe cut os criáv os s it á-l am uaçõe s onde out ros as pe ct pode riam s e r e xe cut os ados ) q ue por , v ze s não s ão m uit v ív is . Subl a-s e ainda q ue não é obj ct o da P A s ubs t uir a P O , e o is e inh e iv O it O t am -s e s im de dois paradigm as com plm e nt s . rat e are P úl o re f ria-s e q ue e s t t xt é ape nas um a int or t im e e e o rodução à P A/ pe ct e , com o t , m uit O As J al as das capacidade s de s t nov paradigm a não f e o oram aq ui de m ons t radas . Suge re -s e a q ue m q uis e r aprof undar os s e us conh e cim e nt ne s t áre a, a cons ul da página w e b do As pe ct os a t a J, onde pode rá e ncont um a v t docum e nt rar as a ação s obre e s t t m a. e e

h h h h

tp:/w w w .e cl e .org/ pe ct t / ips as j tp:/e n.w ik ipe dia.org/ ik i/ pe ct t / w As -orie nt d_program m ing e tp:/w w w .re s e arch .ibm .com / ype rs pace t / h tp:/w w w .de v t / x.com / a/ icl/ Jav Art e 28422

<14>

Rui G onçale s v

Re f rências e

a program ar
O código do cl nt e do s e rv ie e idor não t êm de se r ne ce s s ariam e nt e dif re nt s , e e f m e nt s e de s e nv v um a apl acil e ole icação q ue t o pode f ant uncionar com o cl nt ie e com o para s e rv . A grande dif re nça idor e e s t no s e u com port e nt ou s e j o á am o, a, s e rv idor inicia a e xe cução e aguarda um a l igação, o cl nt inicia a e xe cução e a ie e l igação ao s e rv . idor P ara dar um e xe m pl prát o ico de com o f uncionam os s ock e t , v os f r um s am aze s im pls par de apl e icaçõe s e m q ue o cl nt e nv ie e ia um a pal ra com lt av e ras m inús cul para o s e rv . O s e rv as idor idor t a rat de conv rt r as lt e e e ras e m m aiús cul as de v v ndo a pal ra ao cl nt . V os ole av ie e am ut izar o m odo T do prot il CP ocol T /P e o o CPI conj o de apl unt icaçõe s s ão f ch adas e q uando o cl nt digit a pal ra “e xit ie e a av ”. Ant s de m ais nada conv e ém v r com o e f unciona o e s t abe lcim e nt e o de um a l igação T . A s e guint f CP e igura é bas t e ant e xpl a q uant a is s o: ícit o

Sock e t de B rk e l s e y em l inguage m C
Na ant rior e dição da Re v t P G RAM AR e is a RO f dado a conh e ce r com o f oi uncionam os s ock e t e m Jav T bém f s a. am oram de s crit as as principais dif re nças e nt UD P e T . e re CP Ne s t art e igo v os f r um a bre v am aze e int rodução aos Sock e t de B rk e ly e m s e e l inguage m C para am bie nt s UNI e L e X inux. B icam e nt os Sock e t de B rk e ly s ão um as e s e e AP, is t é, um conj o de bibl e cas de I o unt iot f unçõe s para a program ação s obre prot ocol de com unicação. os

M ode l Cl nt – rv o ie e Se idor
O m ode l Cl nt – Se rv o ie e idor é com pos t o por um conj o de dois program as e m unt e xe cução q ue com unicam e nt re s i. O s e rv idor e s t s e m pre à e s pe ra de pe didos á e f ct e uados pe l cl nt s m as de s conh e ce os ie e a s ua l ização. O cl nt t m de ocal ie e e conh e ce r obrigat oriam e nt a l ização e ocal do s e rv idor (I ) para pode r l P igar-s e e com unicar com e l. e

<15>

a program ar
Agora v os v r pas s o a pas s o as f am e unçõe s ut izadas : il

5 - Es t abe lce r a l e igação ao s e rv idor:
// efectua a ligação ao servidor. // Se falhar (por exemplo o servidor // estar em baixo) o programa termina if(connect(sock, (struct sockaddr *)&target, ad1) == -1) { close(sock); puts("Conexao falhou!"); exit(0); }

Cl nt ie e
1 - Conj o de bibl e cas a adicionar unt iot às t radicionais :
#include #include #include #include #include #include #include <sys/types.h> <sys/socket.h> <netdb.h> <netinet/in.h> <arpa/inet.h> <sys/ioctl.h> <unistd.h>

6 - L um a pal ra do t cl ê av e ado e nq uant e s t f dif re nt de “e xit o a or e e ”. Em s e guida e nv ia-a para o s e rv idor e re ce be -a com lt m aiús cul : e ras as de de s t ino
do { scanf("%s", palavra); // envia para o servidor os dados // contidos na variável “palavra” write(sock, palavra, 50); if(strcmp(palavra, "exit") != 0){ // recebe do servidor os dados // e guarda-os na variável // “palavra2” read(sock, palavra2, 50); printf("%s\n", palavra2); } }while(strcmp(palavra, "exit") != 0);

2 - De f inir a e s t ura rut (s e rv idor) e as v ariáv is : e

// definição da estrutura do servidor struct sockaddr_in target; // criar o socket, indicando a família // a que pertence (AF_INET), o tipo de // protocolo (neste caso TCP // SOCK_STREAM) e o parâmetro do // protocolo (0). int sock = socket(AF_INET,SOCK_STREAM,0); // variáveis char palavra[50], palavra2[50]; // tamanho da estrutura do servidor int ad1 = sizeof(target);

7 - F ch ar o s ock e t e :
close(sock);

3-I nicial a e s t ura: izar rut
// inicializa a estrutura do servidor bzero((char *)&target, ad1);

Se rv idor
1 - Conj o de bibl e cas a adicionar unt iot às t radicionais :
#include #include #include #include #include #include <sys/types.h> <sys/socket.h> <netinet/in.h> <arpa/inet.h> <unistd.h> <ctype.h>

4 - D e f as proprie dade s do s e rv inir idor ao q ual v os l nos am igar:
// indica a família do protocolo target.sin_family = AF_INET; // especifica o endereço (IP) do // servidor target.sin_addr.s_addr = inet_addr("127.0.0.1"); // porta que o programa vai usar target.sin_port = htons(8450);

<16>

a program ar

2 - De f inir a e s t ura do cl nt , do rut ie e s e rv idor e as v ariáv is : e
// definição das estruturas do // cliente e do servidor struct sockaddr_in me, from; // criação dos sockets.o “sock” é // declarado identicamente ao cliente int newSock, sock = socket(AF_INET,SOCK_STREAM,0); // declaração das variáveis int tam = 0, i = 0; int ad1 = sizeof(me); char palavra[50], palavra2[50];

6 - Es pe rar por pe didos . É criado um nov s ock e tpara t ar ape nas de s t o rat e pe dido e nq uant q ue o out s ock e t o ro cont inua à e s pe ra de pe didos :
// coloca o socket à escuta. // Podem ser mantidos em espera 5 // pedidos de ligação listen(sock, 5); // gera um novo socket específico // para essa ligação newSock = accept(sock, (struct sockaddr *)&from, (void *)&ad1); // fechar o socket antigo close(sock);

3-I nicial a e s t ura: izar rut
// inicializa a estrutura do servidor bzero((char *)&me, ad1);

7 - Cicl inf o q ue t a dos pe didos o init rat do cl nt : ie e
for(;;){ // recebe os dados do cliente e guarda-os na variável “palavra” read(newSock, palavra, 50); if(strcmp(palavra, "exit") != 0){ tam = strlen(palavra); for(i=0;i<tam;i++){ if((palavra[i]>='a') && (palavra[i]<='z')){ palavra2[i] = toupper(palavra[i]); } } palavra2[i] = '\0'; // envia os dados que estão na variável “palavra2” para o cliente write(newSock, palavra2, 50); } else{ close(newSock); exit(0); } }

4 - D e f as proprie dade s do s e rv inir idor:
// indica a família do protocolo me.sin_family = AF_INET; // fica associado a todos os // endereços IP do host local me.sin_addr.s_addr = htonl(INADDR_ANY); // porta em que o servidor vai // estar à escuta me.sin_port = htons(8450);

5 - Al ocar a port Se e s t e r ocupada é a. iv f ch ado o s e rv . e idor
// se a porta estiver ocupada o servidor não pode correr e é terminado if(bind(sock, (struct sockaddr *)&me, ad1) == -1) { close(sock); puts("Porta Ocupada!"); exit(0); }

<17>

a program ar

Se rv idor
#include #include #include #include #include #include #include #include #include <stdio.h> <string.h> <stdlib.h> <sys/types.h> <sys/socket.h> <netinet/in.h> <arpa/inet.h> <unistd.h> <ctype.h>

int main() { struct sockaddr_in me, from; int newSock, sock = socket(AF_INET, SOCK_STREAM, 0); int tam = 0, i = 0; int ad1 = sizeof(me); char palavra[50], palavra2[50]; bzero((char *)&me, ad1); me.sin_family = AF_INET; me.sin_addr.s_addr = htonl(INADDR_ANY); me.sin_port = htons(8450); if(bind(sock, (struct sockaddr *)&me, ad1) == -1) { close(sock); puts("Porta Ocupada!"); exit(0); } listen(sock, 5); newSock = accept(sock, (struct sockaddr *)&from, (void *)&ad1); close(sock); for(;;){ read(newSock, palavra, 50); if(strcmp(palavra, "exit") != 0){ tam = strlen(palavra); for(i=0;i<tam;i++){ if((palavra[i]>='a') && (palavra[i]<='z')){ palavra2[i] = toupper(palavra[i]); } } palavra2[i] = '\0'; write(newSock, palavra2, 50); } else{ close(newSock); exit(0); } } return 0; }

<18>

a program ar

Cl nt ie e
#include #include #include #include #include #include #include #include #include #include <stdio.h> <string.h> <stdlib.h> <sys/types.h> <sys/socket.h> <netdb.h> <netinet/in.h> <arpa/inet.h> <sys/ioctl.h> <unistd.h>

int main() { struct sockaddr_in target; int sock = socket(AF_INET, SOCK_STREAM, 0); char palavra[50], palavra2[50]; int ad1 = sizeof(target); bzero((char *)&target, ad1); target.sin_family = AF_INET; target.sin_addr.s_addr = inet_addr("127.0.0.1"); target.sin_port = htons(8450); if(connect(sock, (struct sockaddr *)&target, ad1) == -1) { close(sock); puts("Conexao falhada!"); exit(0); } do { scanf("%s", palavra); write(sock, palavra, 50); if(strcmp(palavra, "exit") != 0){ read(sock, palavra2, 50); printf("%s\n", palavra2); } }while(strcmp(palavra, "exit") != 0); close(sock); return 0; }

Se não pode t bém pe s q uis ar na I e rne t j q ue e xis t inúm e ra inf ação no q ue diz am nt á e orm re s pe it à AP s ock e t de B rk e ly. o I s e e

<19 >

P dro T ixe ira e e

P ara conh e ce r m e lor com o s ão com pos t al as e s t uras o lit pode v it os l s : h as gum rut e or is ar ink h tp:/j t /an.ne t com p.m onas h .e du.au/ ie nt rv r/ ock e ts ock e t t l Cl Se e s / .h m h tp:/w w w .de i.is e p.ipp.pt~ andre / t / / docum e nt / ock e t -be rk e ly.h t l os s s e m

e

a program ar

Es t ís t at icas e m P P H 1ª P e art

• aani P PSW FCh art M H / s É um a f rram e nt l re q ue nos pe rm it e a iv e criar gráf icos e m Sh ock w av Fas h e m e l t m po re al com dados e s t icos ou e át dinâm icos . Encont ram o dow nl oad e inf ação m ais com plt e m : orm e a h tp:/w w w .m aani.us / art / t / ch s inde x.ph p De v ido à e xt ns ão do s cript ne s t art e , e igo ape nas ire i f ar das f al unçõe s m ais re lv e s . O s cript na s ua t al e ant ot idade , im plm e nt 4 gráf e a icos ( 2 de barras , e 2 circul s ) e 4 t are , abe l re s um o. No e nt o as ant ape nas ire m os f ar aq ui da cons t al rução de um gráf ico e de um a t abe l re s um o. Na a concl ão do art us igo (na próxim a e dição) s e rá re f rido um l para o s criptcom plt e ink e o.

Q ue m j criou um w e bs it ce rt e nt á e am e t v a curios idade de s abe r q uant e e as pe s s oas por l pas s aram e de onde á s e riam e s s as pe s s oas . A curios idade h um ana é nat ural e lv a e s t e a as q ue s t s . Es t é a prim e ira part dum õe a e t orial ue s e rá concl ut q uído na próxim a e dição.
P ara re s ole r de um a f a s im pls e v orm e int iram e nt e e ao nos s o gos t o irá s e r de s e nv v olido aq ui um t orial “pas s o-aut pas s o” de f a a q ue no f orm inalde s t art e igo t nh a um s is t m a de e s t ís t e e at icas s im pls e e f uncional com as inf açõe s m ais ut izadas . orm il T odas e s t as inf açõe s s e rão m os t orm radas com auxíl v ualde gráf , para q ue os io is icos re s ul t ados se j am m ais ape l iv at os aos v it e s . is ant Ant s de com e çar a program ar conv e , ém f r o dow nl aze oad de al as cl s e s e m P P gum as H q ue irá ut izar de f a a m inim izar o s e u il orm t rabalo. São e l : h as • EO I G P É um a cl s e com v rs ão ope ns ource e as e v rs ão l nciada. Nós ire m os ut izar a v rs ão e ice il e l re para nos re t iv ornar o código e nom e do P de orige m do v it e s . P aís is ant ode rão re al izar o dow nl oad e m : h tp:/w w w .m axm ind.com / t / app/ oip_count ge ry

I t ação ns al
Após t r f it o dow nl e e o oad de am bas as f rram e nt (G e oI e M aani Ch art ) de v rá e as P s, e de s com pact as para a raiz do s e u á-l w e bs it . e O s f e iros de s crit nas próxim as páginas ich os de v rão t bém s e r guardados na raiz do e am w e bs it . e

SQ L
Com o o proj ct irá s alaguardar os dados e o v de t odos os v it e s q ue pas s am no is ant w e bs it , de v rá guardar os re s pe ct os e e iv dados num a bas e de dados e m M y SQ L .

<20>

a program ar

CREATE DATABASE IF NOT EXISTS `stats`; USE `stats`; DROP TABLE IF EXISTS `estatisticas`; CREATE TABLE `estatisticas` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ip` varchar(15) NOT NULL, `referer` varchar(150) DEFAULT NULL, `browser` varchar(150) DEFAULT NULL, `os` varchar(150) DEFAULT NULL, `pagina_visitada` varchar(150) NOT NULL, `cod_pais` varchar(4) DEFAULT NULL, `nome_pais` varchar(75) DEFAULT NULL, `dominio_visitante` varchar(150) DEFAULT NULL, `data` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM;

Re cola de I orm açõe s h nf
Agora q ue j t m a bas e de dados pront e pre parada para re ce be r dados , pas s a à f e do á e a as P Pcriando o f e iro 's t is t .ph p'. H ich at ics I nicia as s im o f e iro l ich ogo com a f unção m ais im port e de t ant odo o s is t m a. A f e unção q ue pe rm it re cole r os dados do v it e , e irá ins e rir na re s pe ct a t e h is ant iv abe l a.
<?php function saveStatistics ( ) { include( "connection.php"); include( "geoip.inc" ); $geoIP_Pais = geoip_open( "GeoIP.dat" , GEOIP_STANDARD );

Ut izando a f il unção ‘ge oip_ope n’ q ue f part da Cl s e G e oI f com q ue s e carre gue com az e as P az a ‘bas e de dados ’ q ue irá s e rv para ide nt icar os P e s . ir if aís
$ip = $_SERVER[ 'REMOTE_ADDR' ]; if ( ! $_SERVER[ 'HTTP_REFERER' ] ) { $referer = "URL Directo"; } else { $temp_referer=parse_url(htmlspecialchars(strip_tags($_SERVER['HTTP_REFERER']))); if ( $temp_referer[ 'host' ] == $_SERVER[ 'HTTP_HOST' ] ) { $referer = "URL Directo"; } else { $referer = $temp_referer[ 'host' ]; } }

<21>

a program ar
O próprio P P t m q uas e t H e odas as ins t ruçõe s ne ce s s árias para re cole r a inf ação q ue h orm ne ce s s it A v a. ariáv l _SERV pe rm it s abe r o I do v it e at és de ‘REM O TE_AD D R’. Com e ‘$ ER’ e P is ant rav ‘H TTP _REF ERER’ cons e guir s abe r de q ue página é originário. No e nt o o ‘H TTP ant _REF ERER’ é um a ins t rução m uit t o raiçoe ira, pois por v ze s dá inf açõe s incorre ct q ue t m q ue s alaguardar. e orm as e v Se não e xis t ne nh um ‘H TTP ir _REF ERER’ s ignif q ue o ut izador prov e l e nt ins e riu dire ct e nt ica il av m e am e o URLdo w e bs it e com o t , f e al icará cat ogado com o ‘URLD ire ct Cas o e xis t um ‘H TTP al o’. a _REF ERER’ e nt não irá pre cis ar de t ão odo o ‘REF ERER’ para o t am e nt irá ape nas ne ce s s it de al do rat o, ar go géne ro: w w w .port ugal -a-program ar.com . P ara t ut iza um a s érie de ins t al il ruçõe s do P P q ue irá H is ol a inf ação q ue pre t nde de t ar orm e oda a inf ação q ue v m a m ais no URL orm e . O úl o problm a a de re s ole r pre nde -s e com o f o de q ue s e f e f ct t im e v act ôr e uado um ‘REF RESH ’ na própria página o ‘H TTP _REF ERER’ de v v ape nas um “array () v ole ” azio. I cat ogar um ‘REF rá al RESH ’ com o um 'h it de ‘URLD ire ct ' o’.
$temp_page_visited = explode ( "/" , $_SERVER[ 'PHP_SELF' ] ); $page_visited = end ( $temp_page_visited );

Num s is t m a de e s t ís t e at icas é im port e q ue t nh a conh e cim e nt de q uais as páginas m ais ant e o v it is adas no s e u w e bs it . Ut izará $ e il _SERV ER['P P H _SEL ']cont F, udo ao ut izar e s t ins t il a rução re ce be inf ação adicional URLq ue não ne ce s s it T rá q ue is ol a part f orm no a. e ar e inal URLde f a a do orm q ue t nh a ape nas a página v it e is ada.
$country_code = geoip_country_code_by_addr ( $geoIP_Pais , $ip ); $country_name = geoip_country_name_by_addr ( $geoIP_Pais , $ip ); $visitor_hostname = @gethostbyaddr ( $ip ); if(ereg("^(([1]?[0-9]{1,2}|2([0-4][0-9]|5[0-5]))\.){3}([1]?[0-9]{1,2}|2([0-4][09]|5[0-5]))$", $visitor_hostname)) { $visitor_hostname = "Indefinido";

P ara q ue pos s a s abe r q ual código e o nom e do P do v it e at és do I v t a ut izar a o aís is ant rav P ol a il cl s e G e oI com as f as P unçõe s 'ge oip_count _code _by _addr() e 'ge oip_count _nam e _by _addr() ry ' ry ' re s pe ct am e nt . iv e Com o '@ ge t os t addr() pode s abe r o dom ínio do v it e . No e nt o pode t r não cons e guir h y ' is ant ant e s abe r o nom e do dom ínio por e s t a s e r ut izado um Se rv ar il idor Anónim o, ou ainda a s e r ut izado il um s e rv idor q ue s e e s conde por v árias int rl e igaçõe s e m f a de s al (h ops ) e acaba s e m pre orm t os , por s e r re t ornado um nov I . Salaguardando e s t h ipót s e , t s t s e o q ue é re t o P v a e e a ornado é um I P v ido com a f ál unção ‘e re g() cas o s e j um a condição v rdade ira e nt de f -s e o dom ínio do ’, a e ão ine v it e com o 'I is ant nde f inido'.
$browser_info = $_SERVER[ 'HTTP_USER_AGENT' ]; if ( eregi ( "(opera) ([0-9]{1,2}.[0-9]{1,3}){0,1}" , $browser_info ) ) $browser = "Opera"; elseif ( eregi ( "(opera/)([0-9]{1,2}.[0-9]{1,3}){0,1}" , $browser_info ) ) $browser = "Opera"; elseif ( eregi ( "(konqueror)/([0-9]{1,2}.[0-9]{1,3})" , $browser_info ) ) $browser = "Konqueror"; elseif ( eregi ( "(konqueror)/([0-9]{1,2})" , $browser_info ) ) $browser = "Konqueror"; ... else $browser = "Desconhecido";

<22>

a program ar
D e v m os conh e ce r q ue Expl e orador de I e rne t (B s e r) ut iza o v it e , ao criar um w e bs it nt row il is ant e de v rá s e r s e m pre com pat e lcom t e ív odos os Expl oradore s e xis t nt s . É óbv q ue com pat e l e e io ív com t odos a 100% é prat icam e nt im pos s ív lport o é ne ce s s ário s abe r s e m pre q uais s ão os e e , ant m ais im port e s e m ais ut izados pe l v it e , de f a a de s e nv v r no s e u w e bs it a ant il o is ant orm ole e com pat idade com os out Expl ibil ros oradore s dos v it e s . Com o código acim a de s crit pode is ant o s e e nt ão v rif e icar q ue a ins t rução $ _SERV ER[‘H TTP _USER_AG ENT’]de v v um a s t ole ring, na q ual pe rm it s abe r o Expl e orador de I e rne tq ue e s t a s e r ut izado na v ual nt á il is ização do s e u s it . e Aq ui, ape nas é col ocado al guns Expl oradore s a t ul de e xe m pl no s cript com plt e xis t m ít o o, e o e m uit m ais . os
if ( eregi ( "linux" , $browser_info ) ) $os = "Linux"; elseif ( eregi ( "Win 9x 4.90" , $browser_info ) ) $os = "Windows ME"; elseif ( eregi ( "win32" , $browser_info ) ) $os = "Windows"; elseif ( eregi ( "windows 2000" , $browser_info ) ) $os = "Windows 2000"; ... else $os = "Desconhecido";

D a m e s m a f a q ue s oube q ual Expl orm o orador de I e rne t at és da 's t nt rav ring' re t ornada pe l o 'H TTP _USER_AG ENT', t bém s e cons e gue s abe r o Sis t m a O pe rat o do ut izador É um dado am e iv il . bas t e im port e , principal e nt s e e s t e r a de s e nv v r um w e bs it com cont údo para ant ant m e iv ole e e P , Sm art one 's ou P A's . T bém aq ui o código f re s um ido, pode ndo e ncont m ais C's ph D am oi rar Sis t m as O pe rat os no Scriptcom plt e iv e o.
mysql_select_db ( $database , $connection ); $sqlQuery_Statistics = sprintf("INSERT INTO estatisticas (ip, referer, browser, os, pagina_visitada, cod_pais, nome_pais, dominio_visitante, data) VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", $ip, $referer, $browser, $os, $page_visited, $country_code, $country_name, $visitor_hostname, date("Y-m-d") ); $query_result = mysql_query($sqlQuery_Statistics, $connection) or die (mysql_error()); }

Com t odos os dados e s s e nciais do v it e j re colidos f a f t a s ua ins e rção na B e is ant á h ica al ar as de D ados , t rm inando as s im a f e unção q ue re cole dos e lm e nt h e os e s s e nciais ao f uncionam e nt do s cript o .

Cl s e as
Cont inuando o f e iro 's t is t .ph p' ch e gou a al ich at ics t ura de criar e nt a 'Cl s e ' re s pons áv l ão as e pe l ge ração dos gráf a icos e re l órios at és dos dados e xis t nt s na B e de D ados . at rav e e as A próxim a f unção da 'Cl s e St is t ' é de m e ra pe rs onal as at ics ização do gráf ico para o s e u as pe ct v ualcom o t não irá s e com e nt o is , al ada. M ais inf ação s obre a pe rs onal orm ização dos gráf icos de v rá s e r obt e m : h tp:/w w w .m aani.us / art / e ida t / ch s inde x.ph p? e nu=G al ry . m l e

<23>

a program ar
class Statistics { function setGraphicColumnStyle ( $chart ) { // Formatar o grafico com as propriedades visuais para o eixo do 'X' $chart[ 'axis_category' ] = array ( 'font'=>"arial", 'bold'=>true, 'size'=>9, 'color'=>"000000", 'alpha'=>50, 'skip'=>2 ); // Formatar o grafico com as propriedades visuais para o eixo do 'Y' $chart[ 'axis_value' ] = array ( 'font'=>"arial", 'bold'=>true, 'size'=>10, 'color'=>"000000", 'alpha'=>50, 'steps'=>4, 'prefix'=>"", 'suffix'=>"", 'decimals'=>0, 'separator'=>"", 'show_min'=>true ); // Formatar o grafico com as propriedades visuais da legenda $chart[ 'legend_label' ] = array( 'layout'=>"horizontal", 'font'=>"arial", 'bold'=>true, 'size'=>12, 'color'=>"333355", 'alpha'=>90 ); // Formatar o grafico com as propriedades visuais do fundo da legenda $chart[ 'legend_rect' ] = array ( 'height'=>20, 'margin'=>5, 'fill_color'=>"000066", 'fill_alpha'=>8, 'line_color'=>"000000", 'line_alpha'=>0, 'line_thickness'=>0 ); // Formatar o grafico com a cor para as colunas de dados $chart[ 'series_color' ] = array ("666666"); // Formatar o grafico com as propriedades visuais para o fundo do grafico $chart[ 'chart_rect' ] = array ( 'positive_color'=>"000066", 'negative_color'=>"000000", 'positive_alpha'=>10, 'negative_alpha'=>30 ); // Formatar com as propriedades visuais para a grelha do eixo do 'X' $chart[ 'chart_grid_h' ] = array ( 'alpha'=>20, 'color'=>"000000", 'thickness'=>1, 'type'=>"dashed" ); // Formatar o grafico com as propriedades visuais dos valores das colunas $chart[ 'chart_value' ] = array ( 'color'=>"ffffff", 'alpha'=>85, 'font'=>"arial", 'bold'=>true, 'size'=>10, 'position'=>"middle", 'prefix'=>"", 'suffix'=>"", 'decimals'=>0, 'separator'=>"", 'as_percentage'=>false ); return $chart; } // FIM DE "setGraphicColumnStyle"

Com e s t f a unção pre para-s e o as pe ct v ual o is para o gráf de col ico unas , m as e xis t t bém e am um a f unção para pe rs onal ização do gráf circul no Scriptcom plt ico ar e o.

<24>

a program ar
Com e s t f a unção pre para-s e o as pe ct v ual o is para o gráf de col ico unas , m as e xis t t bém e am um a f unção para pe rs onal ização do gráf circul no Scriptcom plt ico ar e o.
function getPageViewsGraph ( $beginDate , $endDate ) { include ( "connection.php"); include ( "date_functions.php" ); mysql_select_db ( $database , $connection ); $sql_pageViews = "SELECT count(ip) AS hits, data FROM estatisticas WHERE data >= '" . changeDate($beginDate) . "' AND data <='" . changeDate($endDate) . "' GROUP BY data"; $pageViews=mysql_query($sql_pageViews,$connection) or die(mysql_error());

Es t f a unção irá ge rar o G ráf para t ais de v it por dia, e xt ico ot is as raindo os dados da bas e de dados com cont age m de t odos os I guardados e com os t ais agrupados por dia. P ot
for ($i=0;$i<(($endDate-$beginDate)+1);$i++) { $days[$i]=date("d-m",strtotime("-".(($endDate-$beginDate)-$i)." day",strtotime(changeDate($endDate)))); }

Com o as dat int as roduzidas para v ual is ização dos gráf icos e re l órios é v at ariáv l cria-s e um e , 'array ' dos dias e xis t nt s e nt as duas dat com os rót os no f at de 'dia-m ês ' (e x: 17-01) e e re as ul orm o .
while($row_pageViews=mysql_fetch_array($pageViews,MYSQL_ASSOC)) { for ( $i=0 ; $i < sizeof ( $days ) ; $i++ ) { if($days[$i]==date("d-m",strtotime($row_pageViews['data']))){ $dailyVisits[$i]=$row_pageViews['hits']; } else { if ( $dailyVisits[ $i ] > 0) { $dailyVisits[ $i ] = $dailyVisits[ $i ]; } else { $dailyVisits[ $i ] = 0; } } } }

Com um 'array ' de int rv o dos dias e s colidos ch e gou a al de pre e nch e r um out 'array ' e al h t ura ro com o m e s m o núm e ro de pos içõe s q ue cont nh a os t ais de v it naq ue l re s pe ct o dia. e ot is a e iv
$chart = $this->setGraphicColumnStyle ( $chart );

P ara s e at ribuir um as pe ct v ual pe rs onal o is izado ao gráf ico ut iza-s e il ant riorm e nt para os gráf e e icos de col unas .
$chart [ 'chart_data' ][ 0 ][ 0 ] = ""; $chart [ 'chart_data' ][ 1 ][ 0 ] = "Total de Visitas por dia"; for ( $i=0 ; $i < sizeof ( $days ) ; $i++ ) { $chart['chart_data'][0][($i+1)] = $days[$i]; $chart['chart_data'][1][($i+1)] = $dailyVisits[$i]; } return $chart; } // FIM DE "getPageViewsGraph"

a f unção criada

A f a de pre e nch e r a inf ação para ge rar o gráf e m Fas h é com o num program a de orm orm ico l F h a de Cál o. Cria-s e o rót o do 'X' e do 'Y' e no cruzam e nt dos rót os pre e nch e -s e com os ol cul ul o ul dados re s pe ct os . Após o pre e nch im e nt da v iv o ariáv l ch art com t e '$ ' odos os dados ne ce s s ários à ge ração, re t orna-s e e s s a v aráv l ue irá s e r ut izada m ais t e q il arde pe l Cl s e Ch art . O re s t e a as s ant art s e rá apre s e nt igo ado na próxim a e dição.

<25>

B runo V az

s e gurança

T odos os s it s da I e rne t pode m s e r e nt ace didos at és de um ide nt icador rav if único, conh e cido por “e nde re ço I ”, q ue P os pe rm it l izar e ocal . O e nde re ço I é cons t uído por q uat P it ro núm e ros , de 0 a 255, s e parados por pont , com o por e xe m pl “127.0.0.1”. os o Com o os e nde re ços I s ão m ais dif is de P íce m e m orizar para o cére bro h um ano q ue t m m ais “capacidade s ” q uando s e t a e rat de m e m orizar nom e s , e xis t o “nom e de e dom ínio”, q ue é m ais f ácilde m e m orizar (por e xe m pl o, o w w w .port ugal -aprogram ar .org é m uit m ais f o ácil de de corar q ue “19 5.22.25.172”) Se m pre q ue . int roduzim os o nom e de dom ínio num brow s e r é t , raduzido para um I pe rm it P indo de s t m odo ace de r ao s it pre t ndido. Se e e e e xis t al ir gum e rro na t radução do “nom e de dom ínio” para “e nde re ço de I ” e e s s e e rro P t e r orige m e m al iv guém com int nçõe s e m al as pode m os cons ide rar q ue e xis t icios e um at ue de P arm ing bas e ado nas aq h al raçõe s de D NS's . t e

P arm ing h
I rodução nt
Nunca o com put ador f ut izado para oi il arm aze nar t a inf ação e t os ant orm ant dados pe s s oais com o agora. E não é ne ce s s ário s e r-s e m uit conh e ce dor para o cons e guir re t irar e s s as inf açõe s de um orm com put ador s e e s t não e s t e r be m e iv prot gido. H oj e m dia, com a cre s ce nt e e e ut ização da I e rne t para q uas e t il nt udo, é ne ce s s ário t r o conh e cim e nt s obre o q ue e o le pode acont ce r s e f alo de um h e or v at ue aq por part e de al guém m al int ncionado. Exis t m inúm e ros e s q ue m as e e on-l ine nos q uais os m e nos pre v nidos e pode m s e r apanh ados . Ne s t art e igo v os am f ar um pouco de P arm ing, um a t al h écnica q ue de riv a do P is h ing e h q ue é com plm e nt de s t s e gunda… e ar a

O at ue aq At ue nos s e rv aq idore s D NS
Al guns s ofw are s us ados e m s e rv t idore s D NS pos s ue m f h as de s e gurança, program ação al ou m á conf iguração, q ue pe rm it m e " nv ne nar" a m e m ória t m porária (cach e ) e e e do s is t m a at e acado. As s im o int o rus cons e gue ace de r ao s e rv idor e al rar ce rt t e as conf iguraçõe s at ribuindo “nom e s de dom ínio” a I ’s q ue não le s de v riam P h e corre s ponde r e q ue s ão cont ados pe l rol o int o. As s im , num at ue e s pe cíf rus aq ico, o e nde re ço I as s ociado ao dom ínio port P ugal a-program ar.org, por e xe m pl pode ria s e r o, m udado de 19 5.22.25.172 para 209 .85.129 .9 9 num s e rv idor D NS at acado e cons e q ue nt m e nt q uando s e int e e roduzis s e no brow s e r w w w .port ugal -a-program ar.org e s t s e ria re dire ccionado para a página e port ugue s a do G oogl. e

O q ue é?
O P arm ing é um a v h ariant m ais s of t e is icada de P is h ing q ue e xpl h ora v ne rabil ul idade s dos brow s e rs , dos s is t m as ope rat os e dos e iv s e rv idore s de D NS (D om ain Nam e Sy s t m ) e para cons e guir conduzir os ut izadore s a il s it s f ícios com o obj ct o de obt r os e ict e iv e códigos de ace s s o.

<26>

s e gurança
Ne s t at ue , um s e rv e aq idor de nom e s (s e rv idor D NS) é com prom e t ido, de t f a alorm q ue as re q uis içõe s de ace s s o a um s it e f it pe l ut izadore s de s t s e rv e as os il e idor s e j am re dire ccionadas para out e nde re ço, s ob ro cont o dos int os . rol rus Es t t e ipo de at ue s t bém pode s e r f it aq am e o re m ot e nt ou por m e io de program as am e m al os com o cav os -de -t icios al róia, al rando t e um f e iro pre s e nt nos com put ich e adore s de ut izadore s f il inais , ch am ado " os t " Es t h s . e f e iro, e ncont ich rado na m aioria das v rs õe s e do W indow s e out ros s is t m as ope rat os , e iv incl um a lt de nom e s de s it s as s ociados ui is a e a de t rm inados e nde re ços e lct e e rónicos . Se e st s e e nde re ços f m ore al rados , o t e com put ador do ut izador pode rá dire ccionáil l para um f s o s it s e m pre q ue o nom e de o al e um s it lgít o pre s e nt na lt f digit e e im e is a or ado no brow s e r. Ut ize um a f w alpara cont ar e v rif il ire l rol e icar a com unicação do com put ador com a I e rne t nt . Em cas o de dúv ida da v racidade de um a e página ou e -m ail cont e a e nt , act idade m as não ut ize os cont os e xis t nt s no e il act e e m ail página. ou

Concl ão us
D e pois de l ido e s t e art igo e s t ará ce rt e nt m ais inf ado e m ais cie nt am e orm e do q ue pode acont ce r de com o s e r e , burl ado on-l , m as is t é ape nas um a ine o got no oce ano da s e gurança porq ue o a m undo das burl on-l é im e ns am e nt as ine e v t e não é pos s ív l as a e abordá-l t as odas e m conj o. No e nt o, o P arm ing é um a unt ant h das t écnicas de burl on-l m ais us ada a ine em t odo o M undo por is s o é bom q ue f ue iq de alrt de f a a não cair e m e rros e a orm de s ne ce s s ários .

At ue aos ut izadore s aq il
Es t inv õe s dão-s e no com put as as ador da v im a f ndo m odif ít aze icaçõe s nos f e iros ich h os t . Ao cont s rário dos at ue s nos aq s e rv idore s D NS e s t s ape nas af ct e e am a m áq uina q ue inf ct e am e é ne ce s s ário o ut izador cl il icar e m al a l gum igação ou ins t ar al al gum program a. P ode h av r de s de e a ins t ação al de s py w are ’s para propaganda e publ icidade , à im it ação pe rf it de um s it bancário q ue t m por e a e e obj ct o roubar os dados da v im a (aq ui e iv ít e nt a j ra unção do P arm ing com o P is h ing) h h .

M e didas de prot cção e
João P re ira e
I t e um ant írus , m ant nh a-o act o e ns al iv e iv act izado. ual M ant nh a as apl e icaçõe s ins t adas no s e u al com put ador act izadas , nom e adam e nt ual e o s is t m a ope rat o e o s e u brow s e r e iv .

<27>

e lct e rónica
Em l igaçõe s pont a pont pont a pont o o o o: SP, RS232… L I igaçõe s m ul t ipont : I o 2C, USB , RS422, RS485, CAN (Cont lr Are a rol e Ne t ork ) w .

Re de CAN
I rodução nt
No s e guim e nt do art o igo M icrocont adore s rol da e dição 4 de s t nos s a re v t v os a is a am abordar ne s t art e igo, al guns conce it os s im pls int e rodut órios das t opol ogias das re de s de dados . P ara e xe m plicar a if apl icabil idade de s t as re de s v os us ar am m icrocont adore s da M icroch ip (P ) No rol ics . f inal s e rão apre s e nt ados al guns e xe m pl os prát icos re l acionados com o cont údo do e art igo.

Re de CAN e m icrocont adore s rol
D e f ape nas a l ine igação f ica e o cont o ís rol do ace s s o ao m e io de t rans m is s ão (l igação de dados ) oi de s e nv v .F olido para apl icaçõe s e m be dde d (l igação dos cont os nos rol m ot s de aut óv is ) - B ch 19 9 1. ore om e os Um a re de Can é com pos t por um grupo de a nós . Cada nó pode com unicar com q ualue r out nó da re de . A com unicação q ro é s uport ada por pacot s e robus t os de nom inados de M e ns age ns . O prot ocol o Can f us o do CSM A/ -CR (Carrie r Se ns e az CD M ul e Acce s s / Col ion D e t ct t ipl l is e ion and Col ion Re s ol ion) ou s e j cada nó ant s l is ut , a, e de e nv inf ação para a re de , “e s cut iar orm a” o q ue s e pas s a na re de , s e e v nt m e nt e ual e e s t e s t e r l re , e nt a iv iv ão col oca a s ua m e ns age m na re de , s e dois ou m ais nós t nt m col e are ocar inf ação na re de ao orm “m e s m o t m po”, e nt dá-s e um a colão. e ão is Am bos de t ct e am e s s a colão e e s pe ram is um t m po alat e e ório at v t a t é ol ar rans m it ir. Ao cont rário do art da e dição 4, onde f igo oi us ado um PC 16f I 877 ne s t art e igo irão s e r us ados PC18f I 2580. O obj ct o do t e iv rabalo h s e rá pôr 4 P a com unicar e nt s i. P ics re ara f ácilim plm e nt e ação v os us ar um M as t r am e e 2 Sl e s . D e not q ue o CAN não im pl av ar ica q ue e xis t um M as t r, m as para q ue s e j a e a m ais s im pls a apre ndizage m , adopt e e a-s e s t e s t égia. a rat Em cada nó v os t r um L d e um am e e pot ncióm e t e ro. O ut izador, at és do il rav t rm inalirá e s cole r um nó e pe de a e s s e e h nó o v or do pot ncióm e t ou e nt pe de al e ro, ão a um de t rm inado nó para ace nde r o ld x e e v ze s . M ais um a v z a com unicação e nt e e re os P m as t r e o P s e rá f it com us o da ic e C e o port s érie (ou us b com adapt a ador) t , al com o apre s e nt ado no art da 4ª e dição. igo

Conce it de l os igaçõe s de dis pos it os iv
Nal guns s is t m as e e lct e rónicos há a ne ce s s idade de m anipul e t ar de cis õe s ar om com bas e e m inf ação q ue não e s t orm á l m e nt ace s s ív l be m com o h á a ocal e e , ne ce s s idade de t rans f rir inf ação para e orm out l ros ocais . P ara s e pode r l com e s t idar as s it uaçõe s e xis t m “re de s ” q ue int rl e e igam dois ou m ais pont de int re s s e . D e um m odo os e s im plt pois e xis t m v is a, e árias v ariant s de e int rl e igaçõe s , e s t as pode m s e r pont o-apont ou m ul o t i-pont T com o os nom e s o. al indicam , a prim e ira l um pont a out iga o ro pont o.

E a s e gunda l iga v ários pont , onde é os pos s ív l ue e xis t t e q a roca de inf ação e nt orm re t odos , pode ndo e xis t um m as t r ou não… ir e

<28>

e lct e rónica

P ara não t ornar e s t art e igo m uit e xt ns o ne m m uit e s pe cíf o e o ico, as s um e -s e q ue as f unçõe s da USART AD Cs j e s t , á ão de s e nv v olidas . V t o prot is o ocol CAN t r m uit porm e nore s , o q ue o e os t ornaria o t m po de re al e ização de de t rm inados proj ct bas t e grande , a M icroch ip e e os ant dis ponibil as s uas principais f iza unçõe s para o CAN. Ant s de com e çar a program ar h á al e , guns porm e nore s re l iv e nt ao m odo de at am e f uncionam e nt dos P q ue de v m s e r t o ics e idos e m cont Ne s t art a. e igo, não irão s e r e xpl icados , s om e nt apre s e nt e ados , m om e adam e nt o m odo de ope ração dos P , re gis t de B e ics os aud Rat , f t e m ás caras dos bufe rs CAN. e il ros f

P rogram ação:
O s nós B ,C v ão s e r idênt icos , o q ue v dif rir é nom e pe l q uale l irão “re s ponde r” ai e o e (I nt ie r) O nó A ao s e rv de M as t r v s e r o re s pons áv l l re ce pção e apre s e nt de if . ir e , ai e pe a ação da inf ação. As s im com e çando pe l nó M as t r: orm o e Em prim e iro l ugar h á q ue com e çar por f r a inicial aze ização dos v ários m ódul . os
void main(void) { TRISA=0xff;//input port ADCON0=0b00000001; //channel AN0 ADCON1 = 0x00; //Vref=vss&VDD All PORTA analogic I/O ADCON2=0b00001010;//rigth justified;2tad;fosc/32 //Inicialização da USART //SYNC = 0, BRGH = 1, BRG16 = 0 //baudrate=115200 -->spbrgh=21 fosc=40Mhz,

OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE &USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 21); //Inicialização do móodulo ECAN ECANInitialize(); INTCONbits.GIE = 1; //Enable interrupts

<29 >

e lct e rónica
O M as t r s ó irá act e uar cons oant a e inf ação re ce bida do ut izador Us ando orm il . um a int rf e ace com bas e no H y pe r T rm inal e , as s im o M as t r v s e r re s pons áv l pe l e ai e o e nv io de s t rings q ue irão s ol ar a icit inf ação ao ut izador O ut e s t égia orm il . ra rat pode ria s e r t ada, cas o a int rf om e ace f s e os bas e ada e m V ual B ic, Jav , pois is as a… ne s s as circuns t âancias do pont de v t o is a do cont ado, s ó int re s s av a “orde m ” rol e a propriam e nt dit e a. V r no f e inal a print e nu() _m . e s t ura rut da f unção
case 's': Putsr("\r\r\r\r\r\r\r\r"); Putsr("\r########################"); Putsr("\r#_Select NODE"); Putsr("\r-->"); can_tx=Getn(); //teste se o nó existe if(!find_node(can_tx)) { Putsr("\rNODE DOESNT EXIST\r"); Putsr("\r press any key to continue"); Re(); can_tx=0; break; } break;

Es t irá t r com o v or de re t a e al orno o ch ar 'r' cas o s e j para pe dir inf ação a um nó a orm ou 's ' cas o s e j para e nv a iar:

Cas o a lt re ce bida não s e j ne m o 'r' e ra a ne m o 's ':
default: Putsr("\r parametro incorrecto\r"); break;

switch(print_menu()) { case 'r': Putsr("\r\r\r\r\r\r\r\r"); Putsr("\r#####################"); Putsr("\r#_Select NODE"); Putsr("\r-->"); can_rx=Re();

Re ce bido o nom e do nó t m de s e v rif e e icar s e e l e xis t , cas o não e xis t abort e a e e a a-s f unção e v t e a pe dir um a nov f ol a-s a unção:

Cas o o nó e xis t e m can_rx t re m os o nom e a e do nó do q ualpre t nde m os re ce be r o v or e al do pot ncióm e t e ro. AD C_REQ é um a m acro de f inida com o 0xa, m ais àá f nt v os us ar re e am a m acro AD C_V q ue e s t de f AL á inida com o 0xb. Es t m acros s ó s e rv m para f it a as e acilar program ação e t orná-l m ais lgív l a e e .
if(can_rx!=0) { data[0]=ADC_REQ;

if(! find_node(can_rx)) { Putsr("\rNODE DOESNT EXIST\r"); Putsr("\r press any key to continue"); Re(); can_rx=0; break; } break;

A f unção ECANs e ndM e s s age é um das m uit as f unçõoe s dis ponibil izadas pe l a M icroch ip, para q ue s e pos s a t rabalar com h o prot ocol CAN s e m q ue para is s o s e j o a ne ce s s ário um a grande pe rda de t m po na e m anipul ação dos re gis t dos P os ics As s im , e s t f a unção t m com o parâm e t de e ros e nt rada: • de nt ie r - nom e do node de s t ário I if inat • at - array onde e s t as m e ns age ns D a ão • Size - núm e ro de e lm e nt do array dat e os a • ECAN_TX_STD _FRAM E - fags re l iv l at as ao f uncionam e nt do m ódul ECAN. o o

Cas o a f unção pe dida pe l ut izador s e j o il a a de e nv e nt é re ce bido um 's ': io ão

<30>

e lct e rónica
D e not q ue s ó s e av ar ança no código q uando a m e ns age m f e nv or iada. É aq ui ne s t pont q ue e nt o prot e o ra ocol CSM A/ o CD CR. D o pont de v t do program ador o q ue o is a int re s s a é q ue a m e ns age m s e j e nv e a iada, no e nt o é pos s ív l abe r porq ue é q ue e l ant e s a não f e nv oi iada àá prim e ira, m as e s t e as s unt não v s e r abordado ne s t art o ai e igo.
while( ECANSendMessage(can_rx,data,1, ECAN_TX_STD_FRAME) ); Putsr("\rRequest send..."); Putsr("\rwaiting...\r");

O v or 0xc (código abaixo) à prim e ira v t al is a não t m ne nh um s ignif e icado, no e nt o e l ant e indica q ue a f unção a s e r de s e m pe nh ada pe l node é a de ace nde r o ld, t com o as o e al m acros AD C_V e AD C_REQ AL
data[0]=0xc; while( !ECANSendMessage(can_tx, data,4,ECAN_TX_STD_FRAME)); can_tx=0; }

As s im e s t concl á uída a ope ração do m as t r e . é T com o f dit ant riorm e nt , os out dois al oi o e e ros nós v ão t r o código m uit pare cido. As e o dif re nças v e ão e s t nos ide nt icadore s das ar if m e ns age ns CAN, pois um v t r q ue act ai e uar q uando f re ce bido o caract r B e o out or e ro t m q ue act q uando f re ce bido o caract r e uar or e C. As s im s e ndo, s ó irá s e r apre s e nt ado o código de um dos nós .

A f unção ECANRe ce iv M e s s age e f al e nt ide nt à ant rior. orm m e ica e

while( !ECANReceiveMessage(&id, data, &dataLen, ECAN_TX_STD_FRAME) );

O m as t r t m um ide nt ie r igual by t “0xa“. e e if ao e
if((id==0x’)&&(data[0]=ADC_VAL)) { Putsr("\r\rADC VALUE\r --> ");

T com o no art al igo da e dição 4 a AD C irá lr um v or e nt 0 a 5V o q ue v e al re ai corre s ponde r a um v or com pre e ndido al e nt re 0 e 255 (AD C de 8 bit ) as s im s, m ul ica-s e por 1.9 para q ue a s ua t ipl apre s e nt ação s e j lgív l l ut izador a e e pe o il .
aux_char=data[1]; aux_int=aux_char*1.9; Putn(aux_int,3,2); can_rx=0; }

NÓ B
void main(void) { adcInit(); ECANInitialize();

Tipo de s aída do port B (in=1 e out =0) v t o , is o o ld ir e s t l e ar igado na s aída RB 7.
TRISBbits.TRISB7=0 ; LATBbits.LATB7=0; //Enable interrupts INTCONbits.GIE = 1; INTCONbits.PEIE = 1; can_tx=0; can_rx=0; while(1) {

Se a ope ração e xigida pe l ut izador f a de o il or ace nde r o ld e s e o nó de s t ário e s t e r e inat iv l igado, ou s e j s e e xis t can_t irá s e r a, ir, x dif re nt de ze ro. e e
if(can_tx!=0) { Putsr("\r########################"); Putsr("\r#_Number of repetitions "); Putsr("\r-->"); data[1]=Getn();

Q uando o nó re ce be um a m e ns age m , v ai analar o ide nt ie r Se o ide nt ie r f o s e u, ou is if . if or s e j B ou C e nt re al a ope ração a ão iza

<31>

e lct e rónica
while(!ECANReceiveMessage(&id,data, &dataLen, ECAN_TX_STD_FRAME)); if(id==’0xb’) {

Na prát e s t t de re de s CAN pode m s e r ica e ipo us adas nas m ais v ariadas apl icaçõe s . O CAN f criado pe l B SCH para o ram o oi a O aut óv l Es t e ra us ado para cont ar os om e . e rol m ais v ariados e lm e nt e os de um carro, nom e adam e nt e e q uipam e nt os de s e gurança, m onit orização, cont o… O CAN rol ao l ongo do t m po j e á tv e e v árias act izaçõe s , com v t a m e lorar a s ua ual is a h pe rf ance . O ut t orm ro ipo de apl icação pode s e r por e xe m pl a de um robô. Um o m icrocont ador pode re ce be r inf ação rol orm dos m ais v ariados s e ns ore s at és de um rav barram e nt CAN, t com o e nv inf ação o al iar orm para os act uadore s (m ot s … ) T ando ore . om com o e xe m pl a f o igura 2, ao l ongo da e s t ura do robô s ó s ão ne ce s s ários dois f ( rut ios CAN h igh e CAN l ) para q ue t ow odos os pe rif éricos pos s am com unicar e nt s i. re Na dom ót ica, t bém s e pode us ar re de s am CAN. Supondo q ue se tm e v ários m icrocont adore s , l padas e s e ns ore s de rol âm pre s e nça, e s t s s ó ne ce s s it , t com o no e am al e xe m pl do robô de e s t l o ar igados e nt s i re at és de um barram e nt CAN, o q ue t rav o orna s im pls a s ua im plm e nt e e ação.No e nt o, é ant s e m pre ne ce s s ário f r o acondicionam e nt aze o do s inal v indo dos s e ns ore s e cont ar os rol act uadore s q ue irão cont or a int ns idade rol e das l padas (O n-O f, P M ,...) proce s s o e s t âm f W , e idênt ao da e dição 4. ico

Na prim e ira pos ição do array de dados do CAN e s t de f á inida a f unção a re al izar
switch (data[0]) { case ADC_VAL: data[0]=ADC_VAL;

Na s e gunda pos ição do array dat é a col ocado o v or da adc. Es s e v or s e rá um a al al m édia de v árias lit e uras …
data[1]=adc_read(0); id=0; //send to master while(ECANSendMessage(id,data,4, ECAN_TX_STD_FRAME) ); break; case LED_VAL: for(i=0;i<data[1];i++) { LATBbits.LATB7=1;

P ara q ue s e j v ív l olo h um ano a l do a is e ao h uz ld ao pis car t m de s e criar al e e guns at os , ras para q ue a t rans ição não s e j ins t âne a a ant
Delay10KTCYx(255);//255ms Delay10KTCYx(255);//255ms LATBbits.LATB7=0; Delay10KTCYx(255);//255ms Delay10KTCYx(255);//255ms } break; } } } }

Concl ão us

Em bora t odos e s t s prog ram as s e jam e s im pl s , e l s s ão a e s s ência de t e e odas as re de s C A N. A q u i f oram u s ados 3 Pics . D e pe nde ndo do obje ct ivo do proje ct o norm al e nt e s t s ol ção é dis pe ndios a. m e a u Na re al idade o q ue se u s a s ão cont adore s C A N cu ja s u a ope ração é rol idênt ica ao princípio apre s e nt ado (por e xe m pl o o M C P2515 t bém am da M icroch ip).

<32>

Ricardo Roch a

t cnol e ogias

M ul t i-Core
I rodução nt
A indús t de proce s s adore s t m v ria e indo a e v uir a um pas s o cons t e nos úl os ol ant t im anos . A prole ração dos com put if adore s e das t f q ue le s incum bim os cont are as h inuam a pre s s ionar a ne ce s s idade de proce s s adore s m ais pode ros os . As s im a t rans ição para proce s s adore s m ul t i-core t orna-s e num pont o crít ne s t nov de s e nv v e nt ico e o olim o. O M ul t i-Core cons is t e m col e ocar dois ou m ais núclos (core s ) no int rior de um único e e ch ip. O obj ct o de s t de s ign é para e iv e pos s ibilar ao s is t m a e xe cut it e ar v árias ope raçõe s e m s im ul o e as s im al t âne cançar m e lor ov ral pe rf ance para re s ponde r h e l orm às ne ce s s idade s dos dias de h oj . e No e nt o e xis t m v ant e árias abordage ns a e s t e problm a, no de corre r de s t art e e igo v os am f ar s obre t cnol al e ogias q ue e s t nde m a e ef iciência do proce s s ador – para al dos ém G H z e da L i de M oore (um a noção e rrada e do de s e m pe nh o dos proce s s adore s é as s ociar e s t à v l e e ocidade do s e u re l ógio) .

Sy m m e t M ul roce s s ing ric t i-P
SM P é a s ol ução m ais com um no q ue t oca a criar um s is t m a m ul e t i-proce s s ador e m q ue dois ou m ais proce s s adore s e st ão cone ct ados a um a m ain m e m ory part h ada. il Um a arq uit ct e ura SM P pode f m e nt acil e m ov r e cargas de t rabalo h e nt re proce s s adore s com o de v ido s uport por e part do SO (Sis t m a O pe rat o) O l e e iv . ado ne gat o de s t arq uit ct iv a e ura é q ue com o e m s is t m as com ape nas um proce s s ador e os ace s s os à m e m ória s ão m ais lnt q ue e os o proce s s ador a ace dê-l No cas o do SM P a. , j q ue ape nas um proce s s ador pode á ace de r à m e m ória de cada v z, é pos s ív l e e q ue v ários proce s s adore s não pos s am e xe cut t ar rabalo (s t at . Am bos os h arv ion) nov proce s s adore s dual os -core da AM D e I e lpode m s e r cons ide rados capaze s de nt SM P . Exis t m l it e im açõe s ao us o do SM P v , ários SO não s uport am e s t t cnol a e ogia (com o o W indow s XP H om e ) e não f arão us o do s e gundo proce s s ador T bém a m aior . am part dos program as e xis t nt s s ão s ingle e e e t re ade d, o q ue s ignif h ica q ue ape nas um proce s s ador pode e xe cut os com andos ar de s s e program a não t ando part om ido da capacidade t al s is t m a. ot do e

M ul h re ading, H y pe rt it Th re ading, or M ul t i-Core ?
T odos os program as s ão f it de t re ads , e os h s e q uências de ins t ruçõe s q ue o proce s s ador v ai e xe cut . ar P rogram as s e q ue nciais s ão f it e os a part de um a ir única t re ad. No pas s ado e s t t h e ipo de program as dom inav am o cam po do s ofw are . t

<33>

t cnol e ogias

O s SO de s s e s dias e ram ape nas capaze s de e xe cut um a t re ad de cada v z o ar h e q ue re s ul a t av num bl ue ar oq do com put ador s e m pre q ue m ais q ue um program a e ra e xe cut ado ao m e s m o t m po. e Com o t m po f e oram s urgindo nov as t cnol e ogias e nos dias de h oj os SO s ão e capaze s de m úl os program as e m t ipl s im ul o (m ul as k ing) T f al t âne t it . al oi cançado por parar por um m om e nt um program a o para out corre r T ro . rocando rapidam e nt os e program as q ue e s t ão a s e r e xe cut ados o s is t m a f e az pare ce r q ue t odos os program as e s t ão a s e r e xe cut ados ao m e s m o t m po m as , no f e undo, o proce s s ador pode ape nas e xe cut um a ar t re ad de cada v z. h e Um proce s s ador norm alpe rm it q ue v e árias t re ads e proce s s os s e j h am e xe cut ados de nt da s ua unidade de t m po (t e ro e im s l ) – t é ch am ado m ul h re ading. ice is o t it Um av anço de s t t cnol a e ogia é o Supe rt re ading onde h o proce s s ador pode e xe cut ar v árias ins t ruçõe s de dif re nt s e e t re ads e m cada cl h ock cy cl (cicl de e o re l ógio) as s im cicl q ue não s e j , os am us ados por um a t re ad pode m s e r e xe cut h ados por out M as é prov e l ue um a t re ad não ra. áv q h ut ize t il odos os re curs os prov nciados ide pe l proce s s ador (com o as e xe cut o ion unit ) s de nt ro do s e u t e s l , as s im SM T im ice (Sim ul ous M ul h re ading) pe rm it q ue t ane t it e m úl as t ipl t re ads h pos s am e xe cut ar dif re nt s ins t e e ruçõe s no m e s m o cicl o. H TT (H y pe r-Th re ading T ch nol ) é um a e ogy t rade m ark da I e lde SM T e m bora m ais nt av ançada q ue s upe r t re ading q ue ch e ga h a pe rm it q ue duas t re ads dif re nt s ir h e e se j am e xe cut adas ao m e s m o t m po onde e um a t re ad us a os re curs os parados da h out ra. Um e xe m pl s e ria e nq uant um a o o t re ad e xe cut ope raçõe s de v h a írgul a fut l uant , um a out e ra pode ria e xe cut ar ope raçõe s int iras e m s im ul o. e t âne

A ide ia por t rás da H TT é dupl icar a act idade no proce s s ador para re duzir o iv problm a de um cach e m is s q ue re duze m e o t m po de re s pos t de s t . e a e Em bora e s t t cnol a e ogia apare nt para a um a part dos SO com o s e ndo dois e proce s s adore s dif re nt s m as e s t não é e e a com paráv l com os D ual core v t q ue e is o am bas as t re ads part h am a m e s m a h il pipe l ine e cach e . H TT m e lora a h pe rf ance do s is t m a m as nunca t o orm e ant com o e m s is t m as dual ul core j q ue e / t m i á não cons e gue re al izar duas ope raçõe s iguais . Es t a dif re nça t e orna-s e óbv ia q uando j am os e s t unt as t cnol e ogias aos dual -core f ndo, e m aze t oria, q uas e e q uadrupl o de s e m pe nh o f . icar inal

I pl m icaçõe s no Sofw are t criadas pe l M ul o t i-Core
Q uant m ais opçõe s para re s ole r um o v problm a e xis t m , m ais f e ire ácils e t orna e s t e de re s ole r Um a e s t v . rada com ape nas um a v ia é m ais s us ce pt e l a ív f icar conge s t ionada por t rans it q ue um a com o duas v . Num a e s t ias rada de ape nas um a v ia a v l e ocidade do t râns it o f ica condicionada ao e lm e nt m ais lnt e o e o.

<34>

t cnol e ogias

No cas o dos proce s s adore s a re gra é a m e s m a. At agora t m os v é e indo a as s is t a ir m ét odos q ue m e loram o de s e m pe nh o h com o as t re ads q ue h pe rm it m e ao com put ados e xe cut dif re nt s ope raçõe s ar e e q uas e e m s im ul o. M as q uas e não t âne bas t nunca pode rá igual out iguala a, ar ro s i e é e s s e o conce it de m ul o t i-core . As t cnol e ogias a s e re m de s e nv v olidas com o o m ul t i-core de pe nde m do parallm o, is t é, m úl as act idade s a e is o t ipl iv s e re m e xe cut adas ao m e s m o t m po. e Se rv idore s t ípicos pos s ue m m úl as port t ipl as por caixa. O parallm o com e ça a t ar e is om im port ância e s e os produt s de s ofw are ore t q uis e re m s e r re lv e s , t rão de apre nde r e ant e a l com is s o. idar Um bom com e ço para analar o problm a is e s e ria obs e rv o q ue t m v ar e indo a s e r f it e o no cas o dos s upe r-com put adore s . Es t s e com put adore s at inge m o s e u nív l de e com put ação at és da cone xão e xis t nt rav e e e nt v re ários m ais pe q ue nos com put adore s . Exis t m e duas arq uit ct e uras dis t as : int m e m ória dis t ribuída m úl as ins t t ipl ruçõe s m úl a t ipl dat a (M I D ) ou M m e m ória part h ada M I D . É ch am ada de ‘m e m ória il M part h ada’ o s is t m a onde e xis t um il e e e nde re ço onde t odos os e lm e nt e os a s e re m proce s s ados part h am . Se il a m e m ória é dis t a e os e lm e nt a s e re m int e os proce s s ados ape nas pode m int ragir e at és da re de e nt e ls , ch am am os o rav re e s is t m a de ‘m e m ória dis t e ribuída’. No f uro v os as s is t a um cre s cim e nt ut am ir o e xpl iv no núm e ro de s is t m as com bas e os o e em m e m ória part h ada. E com il o cre s cim e nt do m ul o t i-core s is t m as de e m e m ória part h ada pas s arão a s e r il cons ide rados um a norm a. Es t s e v nt e e os irão pre s e nt ar o program ador com e pl af as de h ardw are parall . at orm e as

Exis t m duas opçõe s para l e idar com e s t s e problm as de pe nde ndo do t e rabalo e das h ne ce s s idade s do cons um idor A prim e ira é . com plt um a colcção de t e ar e rabalos no h m e nor t m po pos s ív l Ne s t cas o cada e e . e t rabalo indiv h idualpode corre r num único proce s s ador T . udo o q ue o program ador s e pre cis a de pre ocupar é q ue o s ofw are q ue t cont a os t m pos de e xe cução dos rol e t rabalos cons iga l h idar com e s t s de um a e m ane ira e f nt . icie e A s e gunda opção ocorre q uando os t rabalos indiv h iduais pre cis am de se r com plt e ados no m e nor t m po pos s ív l Um e e . e xe m pl s e ria o m undo dos ne gócios onde o s ão ne ce s s árias re s pos t as rápidas para s uport de cis õe s e m t m po re al Ne s t ar e . e cas o ape nas um t rabalo pre cis a de s e r h e xe cut ado e m m e nos t m po. Ch am am os a e is t t o irar part ido do parallm o de nt de e is ro um único t rabalo para pe rm it a e s t q ue h ir e corra e m m e nos t m po para um t anh o e am do problm a e dado, “program ação parall e a.” P rogram ação parall t m s ido durant e a e e anos o dom ínio dos program adore s de s ofw are t de com put ação de al t a pe rf ance orm (H P C, h igh pe rf ance orm cum put . H oj , cont ing) e udo, t odos os program adore s de s ofw are pre cis am de t pe rce be r program ação parall e a.

<35>

t cnol e ogias

I nicial e nt na s ua m aior part , s e não m e e t odos , os program adore s s ão t inados re para e s cre v r program as s e q ue nciais . M ais e t arde apre nde m q ue e xis t m e out ros m ode l de program ação s e ndo um de ls os e a program ação parall q ue t m os v e a e indo a de s cre v r I t s ignif e . so ica q ue e m v z de e e xe cut ar o program a num a dada s e q uência, um a ins t rução de cada v z, e e st v e ai s e r e xe cut ado por dif re nt s e e e nt idade s e m s im ul o. Um e xe m pl t âne o onde program ação parall s e t e a orna abs ol am e nt ne ce s s ária é e m s e rv ut e idore s de m odo a e s t s pode re m re s ponde r a e t odos os pe didos f it e os por pos s ív is e cl nt s e m s im ul o. ie e t âne

Concl ão us
P t nde u-s e com e s t art re e e igo proporcionar um conh e cim e nt o ge ral s obre as t cnol e ogias a s e re m de s e nv v olidas , os s e us propós it e os s e us s uport s . As s im o lit os e e or de ce rt cons e guirá l o idar com ce rt as de cis õe s da próxim a v z q ue s e e ncont e rar f -a-f ace ace com e s t nov t cnol as as e ogias . I e l e nt , o m undo por t do m ul nf izm e raz t i-core das s uas v age ns e apl ant icaçõe s no s e u t odo não pode s e r de s crit num t a rabalo h t pe q ue no ne m s e q ue r e m pape l ão . H á 30 anos at rás um e nge nh e iro da I e l nt aproxim ou-s e de G ordon M oore com um a ide ia para um com put ador q ue pode ria s e r us ado e m cas a. M oore pe rgunt ou as v age ns q ue t pode ria t ant al raze r e t udo o q ue o e nge nh e iro cons e guiu im aginar f oi q ue e s s e ins t e nt pode ria s e r us ado rum o para as donas de cas a arm aze nare m as s uas re ce it . M oore as não cons e guiu im aginar a s ua m ule r com re ce it num h as com put ador na cozinh a e de cl arou q ue a ide ia não f azia s e nt ne nh um . ido H oj e xis t m m ais de m e io bil e e ião de us uários de P e m t Cs odo o m undo com as m ais div rs as apl e icaçõe s . O f uro ainda ut re s e rv m uit s urpre s as e q ue m s abe s e o a as m ul t i-core não s e rá ape nas m ais q ue um ins t e nt de t rum o rans ição.

A f undação da program ação parall é a e a concorrência: a condição de um s is t m a e e m q ual duas ou m ais t f e s t act as are as ão iv e m s im ul o. t âne

A program ação parall pe rm it aos e a e program adore s div idir um program a para e s t e xe cut ope raçõe s de ace s s o ao e ar dis co e nq uant o o proce s s ador se e ncarre ga de e f ct e uar cál os , is t e m cul o s im ul o, al q ue nunca s e ria pos s ív l t âne go e num program a s e q ue ncial .

<36>

G uile rm e Rodrigue s & Nuno Corre ia h

publ icidade

t orial ut

P rogram ação e m C (1ª P e ) art
Es t art e igo v m na s e q uência de um ant rior, e e “P rogram ação e m Sch e m e ”, q ue s aiu na e dição núm e ro 6. E com o t , v a e s t al is abe lce r e um a e v ução l ol ógica do program ador principiant . Em bora o Sch e m e s e j um a e a l inguage m e xce lnt para s e apre nde r a e e program ar, não é f icarm os agarrados a um a l inguage m para s e m pre q ue s e re m os bons program adore s . O s abe r program ar dif re do e s abe r m uit l as inguage ns de program ação na m e dida e m q ue de pois de s e s abe r program ar, bas t e s t a udar al a s int , q ue gum axe t odas as l inguage ns s ão program áv is . e P ara um program ador, o prim e iro pas s o no início da criação de um nov program a, o de v s e r a bus ca da m e lor f rram e nt e e h e a l inguage m para o f r. P ant s e ndo o aze ort o, Sch e m e um a l inguage m para dar bas e s de conh e cim e nt de program ação, o C é um a o l inguage m , de baixo nív l , por is s o, com um e e pot ncial e xt m o, onde é pos s ív l ope rar e re e t udo s e m e xce pção. A L inguage m C f de s e nv v oi olida por D e nnis Rit ie e m 19 72 para s e r us ada nos s is t m as ch e UNI É um a l X. inguage m q ue s e bas e ia no paradigm a proce dim e nt , ut iza pas s age m al il de re f rência at és de e rav pont iros e e e nde re ços de m e m ória, o q ue a t orna um a l inguage m m inim alt e de baixo nív le m is a e t rm os de ace s s o à m e m ória, s e ndo por is s o, e m uit v rs át para criar s ofw are [pare cida o e il t com o As s e m bl] e adapt e be m ao y a-s h ardw are . Com o na m aior part das e l inguage ns , é pos s ív l criar-s e bibl e cas e iot para e xpandi-l O C s e rv de e v ução a. iu ol para m uit l as inguage ns , onde a principale m ais infue nciada l l inguage m f o C+ + , oi de s e nv v por Barne St t e m 19 83. olida j rous rup Não v os e nt am rar e m grande s porm e nore s m as para t rabalarm os e m C pre cis am os de h um com pil ador e de um e dit de t xt do or e o e s t o Not pad2 ou G e dit para W indow s e il e , L inux re s pe ct am e nt . iv e

P ara W indow s , e xis t o D e v e cpp q ue t m um e com pil ador de C e de C+ + , t m um e dit e or de t xt incl e o uído e é f e w are . P t is t re os o o, pode m os com e çar ...

H e l W orl l o d
Não s e j os originais e por is s o aq ui v o am ai prim e iro program a univ rs al de q ualue r e q l inguage m de program ação q ue s e pre ze : “H e l W orl l o d!”.
#include <stdio.h> int main() { printf(“Hellow World\n”); return 0; }

A única cois a q ue e s t program a f é a az im prim ir no e crã a f e “H e l W orl e ras l ow d” acre s ce nt h e um a nov l a. Em bora s ó ar-l a inh f aça is t t m m uit q ue s e le diga, por is s o o, e o h aq ui v a e xpl ai icação pe daço a pe daço: # incl ude <s t dio.h > diz ao com pil ador para incl a bibl e ca s t uir iot dio.h onde , e nt e l , re as e s t de f á inida a f unção print() Ao f rm os f. aze # incl ude “f e iro.h ” e s t os a dize r q ue j ich am á criám os um f e iro, ant riorm e nt , onde ich e e e s t de f ão inidas f unçõe s q ue q ue re m os us ar agora ne s t nos s o nov program a. P e o or agora f as s im , m ais para a f nt v re m os ica re e e m e lor com o re al e nt f h m e unciona. int m ain() é a f unção q ue nunca nos e s q ue ce m os pois s e m e l não h á program a. a T odos os program as f it e m C t e os êm de t r a e f unção m ain() de f inida. P ara al dis s o, a ém prim e ira cois a q ue um program a e m C f é az ir à f unção m ain() e corre r o s e u cont údo. e Ne s t cas o, o int q ue pre ce de a de f e inição m ain() podia ne m e s t l , ar á. Não v os aprof am undar agora o e s t udo de f unçõe s m as as f unçõe s re t ornam “cois as ” ne s t cas o, dis s e m os à f e unção m ain() para e l re t a ornar um int ou s e j um v or int iro. , a, al e M ais para a f nt s e rá e xpl re e icado o s ignif icado do re t orno de um v or int iro na al e f unção m ain, at és da pe núl a l a rav t im inh de s t pe q ue no código, re t 0; e urn .

<38>

t orial ut
{ } is t é um bl o oco. As ch av t s e rv m para e as e de l it um bl de código q ue t nh a m ais im ar oco e do q ue um a ins t rução (e m bora um bl oco de código pos s a t r ape nas um a ins t e rução) . Ne s t cas o, a f e unção m ain() pos s ui duas ins t ruçõe s , o print() l ch e gare m os , e o re t f, á urn 0. Já de nt do bl da f ro oco unção m ain() t m os as e ant riorm e nt m e ncionadas ins t e e ruçõe s print() f e re t 0. Um a de cada v z. A f urn e unção print() f re ce be um a s t ring e m os t ra-a no e crã (ne s t e cas o na cons ol . O u s e j a) a, print(“H e l f l o W orl ; im prim e na cons ol a f e “H e l d\n”) a ras l o W orl s e guida de um a nov l a. A nov d” a inh a l a de v -s e ao f o de a f e “H e l W orl inh e act ras l o d” e s t s e guida de um caract r e s pe cial o ‘\n’ ar e , (ne w l ) Exis t m v ine . e ários caract re s e s pe ciais e e m C q ue v re m os m ais à f nt . e re e E f m e nt t m os o re t inal e e urn 0. Com o j f á oi re f rido ant riorm e nt , um a f e e e unção s e f oi de f inida, t rá de re t e ornar. Ne s t cas o f e oi de f inida para re t ornar um v or int iro, int al e m ain() E por e s s a razão, e l re t . a orna o v or 0 al [ze ro] Com o j f re f rido, s e rá e xpl . á oi e icado m ais à f nt o re t re e orno de f unçõe s .
#include <stdio.h> int main() { int inteiro = 3; //definição de um int float pi = 3.14; //definição de um float //definição de um double double inteiro_gigante = 1234567890; //definição de um char char caracter = ‘A’; /* Imprimir as variáveis no ecrã*/ printf(“inteiro:%d\n pi: %f\n inteiro_gigante: %d\n caracter: %c\n”, inteiro, pi, inteiro_gigante, caracter); return 0; }

H á aq ui m uit cois a nov e q ue pode a a pare ce r com pl icada m as q ue no f undo não é. V os por part s . O program a com e ça e , am e com o j re f rim os , v dire it à f á e ai o unção m ain() . Ao ace de rm os ao s e u bl oco, e ncont os ram nas prim e ira 4 l as , de f inh iniçõe s de v ariáv is , e int int iro = 3; foat pi = 3.14; doubl e l e int iro_gigant = 123456789 0; e ch ar e e caract r = ‘A’;Ao criarm os , por e xe m pl o int e o int iro = 3, e s t os a dize r ao com pil e am ador para nos re s e rv um pe daço [um a zona, ar com um e nde re ço]de m e m ória do nos s o com put ador [RAM ] para pode rm os l guardar á al do t go ipo int [int iro]e q ue , ne s t cas o, e e cont nh a o v or int iro 3. e al e A m e s m a cois a para as out ras 3 de f iniçõe s de t ipos de v ariáv is . H á aq ui dois pas s os e q ue f oram e v ados e s cre v r no código para it e pode re m s e r f ados agora. Na de cl al aração de v ariáv is , não é obrigat e ório at ribuir-s e aut at om icam e nt um v or a e l e al a. P odia t r-s e e f a: orm e s crit o m e s m o da s e guint o e

V ariáv is (1ª part ) e e
V t j s abe rm os f r um program a e m C, is o á aze q ue m os t ra “f e s ” no e crã”, pode m os ras av ançar para al m ais int re s s ant : v go e e ariáv is . e Um a v ariáv l m é al q ue não t m v or f e e go e al ixo e q ue , port o, pode s e r al rado e t ar ant t e om q ualue r v or. I t é v rdade , m as e m C não q al s o e é as s im t l ar. ão ine Um a v ariáv l m C pode t ar q ualue r v or e e om q al do s e u t ipo, is t é, e xis t m v o e ários t ipos de v ariáv is : int iros [int e s uas v e e ariant s uns igne d e (s e m s inal e s igne d (com s inal, de v ) ) ] írgul a fut l uant [foat doubls [cas o intfoat não e l ] e /l ch e gue m ]e caract re s [ch ar]P agora e s t s , e . or e ch e gam e j nos v dar m uit j it á ão o e o. Com is t ach o q ue pode m os com e çar com um o s im pls program a q ue m os t no e crã cada um e ra dos t ipos de dados q ue acabám os de v r. e

int inteiro; inteiro = 3;

q ue o re s ul t ado s e ria e xact e nt o m e s m o. am e

<39 >

t orial ut
O u s e j para al de s e de cl a ém arar a v ariáv l e int iro com o s e ndo um int at e , ribui-s e -le o h v or 3 at és do s ím bol de at al rav o ribuição ‘=’. A at ribuição f unciona da dire it para a a e s q ue rda, ou s e j o 3 é at a, ribuído à v ariáv l e int iro e não ao cont e rário, e pode m pe ns ar: q ue e s t upide z, é óbv q ue não é ao io cont rário. M as um e xe m pl m os t be m o o ra problm a q ue m uit v ze s acont ce . e as e e print(“Caract re s norm ais : % d [para int iros f e e ou dou bls ] % f e , [para foat ] % c [para l s e caract re s ] e ... D e pois de f ch ar as pas , põe -s e o nom e de e cada v ariáv le parada por v e s írgul , pe l as a orde m q ue apare ce ram de nt da f e , ro ras ne s t cas o s e rá um int um foate de pois um e , l caract r e no nos s o cas o: “, int iro, pi, e e caract r) e ; A ide ia é pôr a % df e t e no f c, c, inal das “” “” pôr o nom e das v ariáv is pe l orde m q ue e a f oram ins e ridas de nt da f e . Se be m ro ras re pararam pôs -s e o print() e m v f árias l as . inh I t pode s e r m uit út para s e pode r so o il v ual is izar, m ais ou m e nos , com o v f ai icar o as pe ct f o inal ou m e s m o e m t rm os de e organização do código para q ue out ra pe s s oa pos s a v a lr e com pre e nde r be m . ir e P or f ar e m organização de código, al pode m os vr e q ue t bém am f oram acre s ce nt ados com e nt ários . D e s de j á, é bom h ábit acre s ce nt o ar com e nt ários ao código para q ue , m ais um a v z, q ualue r e q pe s s oa q ue o v lr, o pos s a e nt nde r ou á e e m e s m o para não pe rde rm os um raciocínio q ue s e e s t a a t r num dia e q uando av e v t os ao f e iro não f m os a m e nor ol am ich aze ide ia do q ue s e pas s a al Exis t m duas i. e f as de com e nt código e m C: ou num a orm ar única l a, us ando / ou e m m ais q ue um a inh / l a, us ando / para com e çar e * para inh * / acabar. E t udo o q ue de nt de s s e e s paço ro e s t e r, s e rá ignorado pe l com pil iv o ador. Com e st as bas e s e s t os pront am os para criar v ariáv is , at e ribuir-le s v ore s , s e j h al am e l de as q ue t ipo f m , e ainda de im prim i-l no ore as e crã.

int inteiro = 3; int outro_inteiro; int e_outro_inteiro = 5; outro_inteiro = inteiro; inteiro = ainda_outro_inteiro;

O q ue acont ce ne s t s it e a uação é: 3 é at ribuído a int iro;out e ro_int iro é criado com e um v or q ualue r inde f al q inido;5 é at ribuído a e _out ro_int iro. D e pois , int iro, q ue v e 3, é e e al at ribuído a out ro_int iro, pas s ando e s t a e e v e r 3, e m v z do v or ant rior, alat al e al e e ório; e _out ro_int iro, q ue v e 5, é at e al ribuído a int iro, de s t e ruindo o s e u v or ant rior, 3. al e Com o v m , o s ím bol de at êe o ribuição ‘=’ t m e o “pode r” de de s t ruição e de at ribuição, s e ndo e s t a, s e m pre da dire it para a a e s q ue rda. P t is t e não e s q ue ce ndo o os o o, re s t do código de s t s e gundo program a, o e v t m os a e l. ol e e O print() é um a f f unção q ue nos pe rm it e im prim ir f e s . M as e s e q uis e rm os im prim ir ras o v or q ue e s t de nt de um a v al á ro ariáv l No e ? nos s o cas o q ue re m os im prim ir o s e guint e t xt e o: “int iro: 3 e pi: 3.14 int iro_gigant : 123456789 0 e e caract r: A“ e Se re parare m , as as pas acabam na l a inh de baixo pois f acre s ce nt oi ado o caract r e e s pe cial ‘\n’, para al das out l as , no ém ras inh f inal f e . O ra para im prim ir as v da ras ariáv is e de nt da f e us am os a s e guint s int : ro ras e axe

V ariáv is 2 e Sím bol e os O pe radore s
Em bora j t nh am os apre ndido a us ar á e int iros , foat e caract re s , s e ria m ais e l s e int re s s ant s e pudés s e m os int ragir com e e e e ls : e s om ando-os , s ubt raindo-os , m ul icando-os , div t ipl idindo-os , e t c.

<40>

t orial ut
T udo f icará m ais cl aro com program a. um s im pls e M as é um a m ane ira m uit pre guiços a e na o q ualnão pode ríam os v t a us ar o v or ol ar al dos re s ul t ados , com o acont ce na v rs ão e e ant rior e .

#include <stdio.h> int main() { //declaração das variáveis a=3,b=4 e c int a = 3; int b = 4; //podia ter sido //declarado da seguinte maneira: int soma; //int a = 3, b = 4, soma; //que teria o mesmo efeito int sub,mult,div; soma = a + b; // soma a com b //e atribui o resultado a soma sub = a - b; // subtrai b a a e //atribui o resultado a sub mult = a * b; // multiplica a por b //e atribui o resultado a mult div = a / b; // divide a por b e //atribui o resultado a div printf(“soma=%d, sub=%d, mult=%d, div=%d\n”, soma, sub, mult, div); return 0; }

I nputO ut / put
Com o j re f rim os no ínicio, us am os o á e # incl ude <s t dio.h > para pode rm os ut izar il as f uncional idade s de input t cl , e ado, rat e o out , e out , m onit , f e iro ou ros put or ich pe rif érico. At agora s ó us ám os o out , é put com a f unção print() V os agora pode r f . am al argar e m uit a m ane ira de us ar o C, , o, pode ndo int ragir com o program a. e

Tão s im pls q uant is t e o o. Criám os as v ariáv is a e b e at e ribuím os -le s os v ore s h al 3 e 4 re s pe ct am e nt . D e pois criám os as 4 iv e v ariáv is para guardarm os os v ore s e al re s pe ct os às ope raçõe s e f ct iv e uadas a a e b, s om a, s ub, m ul e div Em s e guida t . at ribuím os a cada um a de s t ope raçõe s , as o v or da re s pe ct a ope ração e nt a e al iv re b. No f , im prim im os , com o j v os , as inal á im v ariáv is de nt da f e . O ut m ane ira de e ro ras ra t r f it is t s e ria a s e guint : e e o o e
int main() { //declaração das variáveis a=3, b=4 //e soma int a = 3; int b = 4; int soma; //podia ter sido declarado da //seguinte maneira: //int a = 3, b = 4, soma; //que teria o mesmo efeito printf(“soma=%d, sub=%d, mult=%d, div=%d\n”, a+b, a-b, a*b, a/b); return 0; }

#include <stdio.h> int main() { //declaração de variáveis int a,b,soma; printf(“Insira um valor para a: ”); // obter valor de a scanf(“%d”, &a); printf(“Insira um valor para b: ”); // obter valor de b scanf(“%d”, &b); soma = a + b; // soma a com b e atribui o resultado a soma // imprimir o resultado no ecrã printf(“soma=%d\n”, soma); return 0; }

O s canf pode pare ce r dif () ícil à part ida m as no f undo é m uit s im pls . o e No e nt o, um a v z m ais , v j os do ant e e am início o código de s t program a. No início e de cl arám os 3 v ariáv is , a, b e s om a, com e o obj ct o de at e iv ribuirm os um v or a a e a al b e de pois de adicionados at ribuído a s om a. P s e m os , e nt as ão, ao s canf . Ne s t () a f unção incl os o t uím ipo de dados q ue v os ins e rir e no f , f am im ora das as pas , o e nde re ço de l e no cas o de s e r m ais do a q ue um a, pom o-l por orde m a s e guir às as as pas , as s im com o f m os no print() aze f.

<41>

t orial ut
Ao e s cre v rm os & a e & b e s t os a dize r ao e am com pil ador q ue ao re ce be r dois int iros e [“% d”] q ue re m os q ue s e j , am al ocados no e nde re ço de m e m ória & a e & b re s pe ct am e nt . P ns e m os nis t com o s e ndo iv e e o cas as . T m os a cas a a com o e nde re ço & a e e a cas a b com o e nde re ço & b. O u s e j o a, program a e s pe ra o v or para o int iro a al e s e guido de ENTER e de pois , e s pe ra o v or de al b s e guido de m ais um ENTER. Se pe rce be rm os be m com o o s canf f unciona, f ica aq ui um program a q ue re ce be a dat de nas cim e nt a o e de pois a conf a, m os t irm rando no e crã as opçõe s e s colidas pe l ut izador: h o il
#include <stdio.h> int main() { //declaração de variáveis int ano; int dia; int mes; printf("Insira a sua data de Nascimento [mes em numero]\n\nAno:"); // obter valor de ano scanf("%d", &ano); printf("Dia: "); // obter valor de dia scanf("%d", &dia); printf("Mes: "); // obter valor de mes scanf("%d", &mes); // imprimir os dados do utilizador // no ecrã printf("Data:\n%d\\\%d\\\%d\n", ano, dia, mes); return 0; }

O if() f unciona da s e guint m ane ira: e
if (condição) { expressão 1; } else { expressão 2; }

Com o j re f rim os ant riorm e nt , um bl á e e e oco {} s ó pre cis a de e xis t , s e e xis t m ais do , ir ir q ue um a e xpre s s ão. Em C, al go é v rdade iro s e f dif re nt de 0 [ze ro] ou e or e e , s e j 1 é v rdade iro, 642 é v rdade iro, -2,3 a, e e é v rdade iro e 0 [ze ro]é s e m pre f s o. e al P t is t v os a um s im pls program a os o o, am e para pôr e m prát o nos s o if() ica :
#include <stdio.h> int main() { int x = 10; int user; printf(“Insira um numero maior que %d: “, x); scanf(“%d”, &user); if (user > x) // se condição for // verdadeira, executa o seu corpo { printf(“Inseriu o numero %d que é maior que %d\n”, user, x); } else // caso contrário // executa este corpo { printf(“O numero %d que inseriu nao é maior que %d\n”, user, x); } return 0; }

Expre s s õe s Condicionais e O pe radore s L ógicos
Ne s t s e cção v os apre nde r l a am ógica. A l ógica é m uit im port e para de cidir o ant s it uaçõe s . E para as de cidir e xis t m as e e xpre s s õe s condicionais . Exe m pl dis s o s ão o o if() e o s w it () P agora v j os e s t ch . or e am as duas .

Com o pode m os v r, é m uit f e o ácilpe rce be r a s int axe do if . Se o núm e ro ins e rido f () or m aior do q ue x, q ue v e 10, o corpo do ifé al e xe cut ado, cas o cont rário, o corpo do e l se é e xe cut ado. Não é obrigat ório q ue o if t nh a e l . Es t l e se a ógica é m uit s im pls m as o e pre cios a. P out l or ro ado, e xis t m ope radore s e l ógicos q ue nos aj udam a pre cis ar um a condição. São e ls o AND o O R e o NO T e , q ue e m C s e re pre s e nt am por, & & , || e ! re s pe ct am e nt . iv e

<42>

t orial ut
E s e r-nos -ão m uit út is no s e guint o e e program a [um a v rs ão 2 do ant rior] e e .
#include <stdio.h> int main() { int MIN = 5, MAX = 10; int user; printf(“Insira um numero maior que %d e menor que %d: “, MIN, MAX); scanf(“%d”, &user); if ((user > MIN) && (user < MAX)) // executa o seu corpo do if { printf(“Inseriu o numero %d que é maior que %d e menor que %d\n”, user, MIN, MAX); } else // caso contrário executa este corpo { printf(“O numero %d que inseriu nao é maior que %d e menor que %d \n”, user, MIN, MAX); } return 0; }

Um a v z m ais , pode e pare ce r m uit o com pl icado m as é v rdade iram e nt s im pls e e e e v ai-nos dar im e ns o j it P s ando à s ua e o. as e xpl icação: o s w it ch re ce be a v ariáv l a e analar. D e pois , j de nt do corpo, t m os is á ro e t odos os cas os q ue q ue re m os e por orde m , cada um s e guido de bre ak , de m odo a q ue um a v z e xe cut e ado o prim e iro “cas e ” q ue de r v rdade iro, o s w it e ch pare por aí e não e xe cut t e odas os out “cas e ”, e é f izado ros inal por um a condição de f t cas o ne nh um a aul , das ant riore s s e j v rdade ira. Um program a e a e para e xpl o s w it . P ue não um m e nu icar ch orq de um lit de m ús ica? e or
#include <stdio.h> int main() { int menuOption; printf("Escolha uma opcao do menu:\n\n"); printf("1-Play\n"); printf("2-Pause\n"); printf("3-Stop\n"); printf("4-Next\n"); printf("5-Previous\n\n"); printf("Opcao: "); scanf("%d", &menuOption); switch (menuOption) { case 1: printf("Escolheu a opcao Play\n"); break; case 2: printf("Escolheu a opcao Pause\n"); break; case 3: printf("Escolheu a opcao Stop\n"); break; case 4: printf("Escolheu a opcao Next\n"); break; case 5: printf("Escolheu a opcao Previous\n"); break; default: printf("Opcao invalida\n"); } return 0; }

Com o pode m os cons t ar, ne s t cas o, o at e corpo do ifs ó é e xe cut ado s e o v or ins e rido al pe l ut izador s at f r, obrigat o il is ize oriam e nt , as e duas condiçõe s , s e r m aior do q ue M I q ue N, v e 5, e ao m e s m o t m po, s e r m e nor do al e q ue M AX, q ue v e 10. É f al ácil rce be r e s t s pe e conce it os l ógicos nas condiçõe s , o im port e é prat ant icar para ganh ar “t ue j raq o” na m at éria. P t is t pas s e m os ao s w it () os o o ch . Es t f a unção é m uit im port e q uando o ant q ue re m os condicionar um a v ariáv la um a e e s cola por opçõe s . A s ua s int h axe é a s e guint : e
switch (variável) { case ‘caso_1’: { expressão_1 } break; case ‘caso_2’: { expressão_2 } break; default { expressão } }

12345-

<43>

M igue l ah non W

O u s e j de pois de m os t a, rarm os o m e nu, ut izam os o s canf à v il () ariáv l m e nuO pt e ion para de t rm inar a opção e s colida e e h conf e e s t cada “cas e ” dirá a re s pe ct a orm a, iv opção e s colida ou “O pção inv ida” cas o h al ne nh um dos “cas e ”s s e j v rdade iro. Na a e próxim a e dição pros s e guire m os com e s t a int rodução ao C.

gnu/inux l

Am bie nt s gráf e icos G NU/ inux L e m s is t m as de f e raco de s e m pe nh o
A q ue m f por não pe rde r pit az ada de cada nov pas s o no re ino das Nov T cnol o as e ogias , a q ue m é capaz de e s t m e s e s e m e s e s a ar j ar o pé de m e ia para com prar aq ue l unt a pl aca gráf ou proce s s ador t ica opo de gam a, pode pare ce r re l iv e nt e s t at am e ranh o q ue ainda h aj q ue m t a rabale na prim e ira v rs ão h e do P nt . M as , m ais (s upos t e nt ) raro e ium am e e xis t m s e rá, de nt de s s a m e s m a m inoria, ire ro h av r q ue m não q ue ira pe rde r o praze r de e ut izar G NU/ inux, e q ue com o t procure il L al s abe r as m e lore s opçõe s t ndo e m cont a h e a s ua s it uação. G NU/ inux é, af L inal de cont , um a das as m e lore s s ol h uçõe s no “m e rcado” para e s t a gam a de ut izadore s , com o t , ne s t art il al e igo de cidim os dar um as l s s obre o principal uze f or de gas t de de s e m pe nh o num a act o dis t ribuição: o am bie nt gráf e ico. É-nos m uit v ze s , e m v as e ários f óruns e m q ue part icipam os , pe rgunt ado q ual a m e lor h dis t ribuição para l pc's . A re s pos t é s im pls : ow a e não de pe nde da dis t ribuição, de pe nde do am bie nt gráf e ico q ue s e ut iza (ge ral e nt !) il m e , e s cole ndo-s e m uit v ze s a dis t h as e ribuição e m f unção dis s o. É ne s s a al q ue v m à bail a t ura e a q ue s t ão: Se ndo as s im , q u al o m e lor h am bie nt gráf e ico? Não é a e s t pe rgunt q ue pre t nde m os a a e re s ponde r, m as q ue re m os e xpor-v os as principais v age ns e caract rís t ant e icas das duas m ais adopt adas e s colas para l pc's : h ow XF e Fuxbox. CE l

Fuxbox l
A pal ra de orde m ne s t pe q ue no am bie nt av e e de t rabalo m inim alt h is a é m e s m o a s im pl icidade e m t rm os e s t icos e f e ét uncionais . D e s de l ogo, h á a re al q ue o Fuxbox não é çar l m ais q ue um W indow s M anage r com o t , , al não é de e s pe rar um lq ue v e ariado de apl icaçõe s com um a raiz com um a s uport a ar ut ização il de produt idade iv (e xe m pl o: apl icaçõe s K do K D E, q ue é um D e s k t op Env ironm e nt. O Fuxbox s ó s e e ncarre ga de ) l m odif icar o s is t m a gráf Xorg de m ane ira a e ico incl , e nt uir re out ras cois as , um a pe q ue na barra de t f , a pos s ibil are as idade de de corar o f undo do am bie nt com um w al e l pappe r e um m e nu de apl icaçõe s accionáv lpe l cl ue e o iq dire it do rat al o o, ém da pos s ibil idade de pe rs onal ização por v de t m as . L ia e ogo, t odas as apl icaçõe s a ut izar t rão de s e r ins t adas il e al pe l próprio ut izador, m as não s e pre ocupe , o il FuxB é com pat e lcom as apl l ox ív icaçõe s de G NO M E e K D E.

<44>

gnu/inux l
Es t pe q ue no am bie nt m inim alt não é e e is a propriam e nt al nov é bas e ado nout e go o, ro W M : o Back B l ox. Se ndo m uit s e m e lant a o h e e s t , principal e nt v ual e nt , t m -s e e m e is m e e progre s s iv e nt de s t am e acado e ganh o a popul aridade q ue o t orna num a e s cola a h cons ide rar para pc's de baixo de s e m pe nh o. Em re l ação ao Back B l ox apre s e nt m ais a al as f gum uncional idade s im port e s , com o ant um a barra de t f are as conf iguráv l a e , pos s ibil idade de ut izar at h os de t cl il al e ado, e pode r agrupar t odas as j ane l e m ape nas as um a com s e paradore s . V rs õe s m ais e re ce nt s apre s e nt e am inov açõe s no de s ign com o j ane l com cant arre dondados e as os t rans parências . e s t pe q ue no s is t m a ch e ga, o q ue é um e e ch am ariz para ut izadore s com m ais int re s s e il e e m apre nde r, ou m ais conh e cim e nt . os

É rápido, ao m e nos ?
Ne s t cam po não h á a m e nor dúv e ida, FuxB l ox é o W M m ais s im pls do re ino e G NU/ inux, q ue incorpora igual e nt um L m e m aior núm e ro de f uncional idade s . A s ua s ource não t m m ais de 1M B de m orando e , ape nas al guns m inut a com pil M als e os ar. e nt pode r-s e -á de s de l ra ogo cons t ar a at rapide z com q ue s e cons e gue ut izar e s t il e pe q ue no s is t m a, ge ral e nt ocupando, e m e s e m m ais ne nh um a apl icação e xt rior e abe rt t ndo ape nas o s is t m a bas e por a, e e t e s e m s w ap ut izada, aproxim adam e nt rás il e 39 M B de m e m ória. I t pe rm it corrê-l at so irá o é nos pc's m ais ant igos s e ndo ne ce s s ária, no e nt o, a cons ciência de q ue q ualue r ant q apl icação, por m ais s im pls q ue s e j e a, e lv e ará l ogo a m e m ória para v ore s m ais al al e q uiçá abus iv , com o al é l t os os iás ógico. Se s e q uis e r re duzir ainda m ais a m e m ória ocupada, pode r-s e -á opt por um a s is t m a ar e bas e m ais lv do q ue o q ue nos é e e proporcionado por um a norm aldis t ribuição com a opção de ins t ar Fuxbox (com o al l D e bian, G e nt oo, SuSe , e t , caindo a c) e s cola no bas t e f os o D am n Sm al h ant am l L inux, um a dis t ribuição de 50M B de t anh o q ue incl FuxB am ui l ox.

Sim pl icidade ?
Não s e rá pre cis o m uit t m po para q ue o e f ue a conh e ce r os cant à cas a de s t iq os e W M , com ut ização int ns iv pode rá at il e a é e st ranh ar e não s e h abit uar a m ais ne nh um s is t m a q ue não dê ao cl ue dire it do rat e iq o o um pape l f cral na acção. No e nt o, ul ant t udo is t t m um cus t o e o, ou ne nh um , de pe nde ndo do ut izador q ue s e j Al il a. ém da s ua s im pl icidade , FuxB l ox é t bém am conh e cido por cons e guir apre s e nt ar um s is t m a com um de s ign act e uale com um a boa dos e de e y e candy, m as não é re f rido e com o ch e gar l A v rdade é q ue e s t á. e e pe q ue no s is t m a é t al e nt conf e ot m e iguráv l e m as , para o f r t rá de s e h abit , t o aze , e uar ant à ut ização da cons ol com o a inv s t il a, e ir al gum t m po e m apre nde r a adicionar e nov os t m as , e dit e ar o m e nu e de f inir apl icaçõe s de com e ço aut át om ico no s t up do s is t m a, t art e udo conf iguráv le m e f e iros de t xt s im pls . Al ich e o e ém dis s o, e ape s ar dos m uit os t m as e xis t nt s na e e e I e rne t ne m s e m pre f nt , icam os cont nt s e e com o obt ido, e e s t m os a um pas s o de are andar a v cular nos f e iros dos t m as , as h ich e e a e dit os a nos s o be l praze r á-l o . Se s e re f re o abom ináv lq ue is t pos s a s e r e e o para um ut izador q ue ape nas q ue r al lv il go e e e pront a us ar, h á q ue re f rir t bém o o e am e s pant o de s t pe rs onal os a ização e xt m a a q ue re

Concl ão us
Se gos t de apre nde r, e q ue r o m e lor q ue a h e xis t não com prom e t ndo a pe rf ance , e e orm FuxB é a e s cola a t ar. O s e u de s ign l ox h om s im pls e f e uncional idade j conq uis t á aram m uit , de q ualue r f a, não h á com o os q orm e xpe rim e nt e t ar irar a prov dos nov . Se a e não q uis e r ins t ar propos it al adam e nt e s t e e am bie nt gráf e ico, pode rá s im pls m e nt e e f r o dow nl aze oad do L e CD da dis t iv ribuição D am n Sm al L l inux e com prov o q ue lv ar e a m uit , m e s m o pos s uindo pc's de e lv os e ada pe rf ance , a t o com o e s cola nº 1. orm ê-l h

<45>

gnu/inux l

Xf ce
P ode m os caract rizar Xf e ce num a única f e: ras D e sk t op Env ironm e nt lv e e se m de s pre zo da f uncional idade . T m na e rapide z, e m re l ação aos dois D E's dom inant s , o s e u principal t o. Se gue e runf um a f os of m odul ou s e j il ia ar, a, v m com um s is t m a bas e e e s e m m uit as de pe ndências a q ue se pode f m e nt acil e acre s ce nt f ar unçõe s à m e dida das ne ce s s idade s , at és da rav ins t ação de pacot s . As s im , al e cons e gue ocupar m e nos re curs os pois não ins t a por al de f t f aul unçõe s m uit as v ze s e de s ne ce s s árias ao ut izador. il O nom e Xf ce prov a inh original e nt m e de “XF s orm Com m on Env ironm e nt m as ”, com o f re e s crit duas v ze s oi o e j não us a XF s . O nom e á orm cont inuou o m e s m o, j não á s e ndo “XF ” m as “Xf ”, não s ignif ce ce icando a s igl abs ol am e nt nada, t com o o l a ut e al ogo, q ue é ape nas um a piada. O de s e nv v e nt com e çou por v t de olim o ol a 19 9 7 s e ndo um cl para L one inux do Com m on D e s k t Env op ironm e nt (CD E) um D E proprie t ário para UNI A s e gunda v rs ão f l X. e oi ançada j á com o Xf 's w indow m anage r (Xf m ) ainda ce w h oj pre s e nt . F na t rce ira v rs ão q ue e e oi e e de ixou Xf s e pas s ou a bas e ar-s e e m orm G TK , principal e nt por caus a de o m e prim e iro s e r proprie t ário, o q ue l it a im av o progre s s o do proj ct Com a v rs ão e o. e 4.2.0 f f it um grande s al com o oi e o t o updat para as bibl e cas G TK + 2 e e iot na 4.4 (act ) pas s ou a us ar o Th unar ual com o f e m anage r e m v z do Xfm . il e f

ção a e st , e s acrif icar al as gum f uncional idade s (t com o ace de r por s s h ) ais . A úl a v rs ão cons e gue s e r um bom t im e s ubs t ut it o de G NO M E ou K D E. É-nos apre s e nt ado um D e s k t s im pls , com duas op e barras h orizont com o e m G NO M E, q ue o ais t orna bas t e ant prát ico. P s ui um paine l im pls m as os s e bas t e út pe rm it ant il indo o f ácil ace s s o a v árias conf iguraçõe s do s is t m a. e O cupa ce rca de 55M b de m e m ória com a SW AP t al e nt l re , t ndo por ot m e iv e t rás o s is t m a bas e a corre r e . V m com t e rans parências e e f it e os s om bra nat os iv (ne ce s s it de ace lração 3d a e e m but ida no de s k t , op) apre s e nt ando um a e xce lnt fuide z. e e l

Not f a inal
Se q uis e r ape nas um D E lv ou m e s m o um e e s ubs t ut para G NO M E ou K D E, t m no Xf it o e ce um a boa apos t Al a. ém de s e r f ácil de ut izar principal e nt para q ue m v m do il , m e e G NO M E, t m um as pe ct l po e de e o im pe rs onal ização f . D e not q ue para ácil ar com put adore s q uas e “pré-h is t óricos ” prov e l e nt fuxbox é m ais indicado... av m e l

Sim pls e F e uncional
Us a a bibl e ca G TK (t com o G NO M E) iot al e v m por de f t com o Th unar com o e aul f e m anage r Es t úl o criado f para il . e t im oi s e r “lv ” q uando com parado com , e e por e xe m pl o naut us ( f e m anage r o, il il de f tdo G NO M E) ape s ar de , e m re l aul , a-

<46>

Ce l Ram os & M igue l ais so P

e v nt e os

No pas s ado dia 27 de Jane iro, de corre u o TECNO NO V 2007, um e ncont ro nacional de dicado à T cnol e ogia e I nov ação.
Es t e v nt v io dar cont e e o e inuidade a out ros j de corridos s obre a m e s m a áre a de á acção, com o B arCam pP ugale a SH iF, ort T s e ndo e s t úl o m ais v e t im irado para um públ int rnacional O TECNO NO V pe l ico e . , o cont rário, t a a int nção de m os t um inh e rar pouco do q ue s e f no nos s o país , aos az port ugue s e s , e principal e nt f e nt a m e om ar part h a de ide ias e m ot ar a inov il iv ação. O e ncont ro de corre u e m Coim bra, no caf audit é/ ório da F NAC, l izada no F ocal órum Coim bra, e s paço q ue , por v ze s , não f e oi s uf nt para o públ q ue ia pas s ando e icie e ico re s olia e s pre it L de nt iam de corre ndo v ar. á ro apre s e nt açõe s , m aiorit ariam e nt dirigidas a e um públ não-prof s ional com e xce pção ico is , de al guns t m as , com o a t rce ira v rs ão da e e e l nça G P , q ue e ra dire ccionada para a ice L áre a de de s e nv v e nt de s ofw are . Ao olim o t t odo, f oram s e t apre s e nt e açõe s , re al izadas por oradore s na s ua grande m aioria prof s ionais da áre a, m as com h is t is oriais dis t os . D urant t int e odo o e v nt e s t e ram e o iv t bém dis ponív is grat am e nt cds da am e uit e dis t ribuição G NU/ inux Ubunt para div rs as L u, e pl af as . at orm A prim e ira apre s e nt ação, de t ul "inux: ít o L Um cam inh o para a produt idade " f iv , icou a cargo de O ct io F ipe áv il G onçale s , v f undador da e m pre s a M agicB rain. F um a oi apre s e nt ação de dicada à div gação do ul " undo" do Sofw are L re e de um a das m t iv s uas principais " bande iras " as dis t : ribuiçõe s de s is t m as ope rat os G NU/ inux. e iv L

F oram de s m is t icados if m it os q ue se pe rpe t uam s obre e s t t e ipo de s ofw are e t e nunciadas al as gum das principais v age ns . ant Se guidam e nt , de corre u a apre s e nt e ação da t rce ira v rs ão da l nça G NU G P , por e e ice L Rui M igue l Se abra, V -P s ide nt da ice re e ANSO L (As s ociação Nacional para o Sofw are t L re ) F iv . oram cl icadas as arif principais dif re nças de s t nov v rs ão e m e a a e re l ação à ant rior e apre s e nt e adas al as gum v age ns da s ua adopção. P ant ara t rm inar e a prim e ira part do e v nt e e o, M arcos M arado, analt da Sonae Com I , re al is a T izou um a das apre s e nt açõe s q ue ge rou m aior int re s s e e dis cus s ão de t e odo e s t e v nt e e o, à v t do t m a " I ol a e A ndús t D is cográf ria ica e o D RM (D igit al Righ t / s t ions s Re rict M anagm e nt" Após a de s crição de s t ). a t cnol e ogia, f oram apre s e nt adas div rs as e concl õe s ne gat as a t us iv irar da s ua ut ização, j t icando as s im as acçõe s q ue il us if o orador ince nt av de f a a com bat r iv a, orm e a apl icação de t re s t ais riçõe s na indús t ria dis cográf ica. Após um curt cofe e bre ak , M ário L s , o f ope e st udant na F , v io apre s e nt o I AG E e EUP e ar M (I ndus t rial M anage m e nt G am e ) proj ct , e o com pos t por um a e q uipa de e s t o udant s e do curs o de Enge nh aria I orm át nf ica. Es t e cons is t e num j ogo w e b-bas e d de s im ul ação de ge s t ão e de s e nv v e nt olim o indus t . T ndo por bas e aq uil q ue rial e o re al e nt s e ut iza no s e ct , e s t j m e il or e ogo t orna-s e as s im num a boa pl af a para at orm t s t s de t icas e pl e e áct anos e m pre s ariais .

<47>

e v nt e os

Aprov it e ou-s e para abordar principal e nt m e as de cis õe s f it e as pe l e q uipa para o a de s e nv v e nt de s t proj ct olim o e e o, s e ndo dado um m aior f oco à pl af a w e b at orm e s colida, Ruby on Rail h s. O f undador da W e B ak St f e m pre s a re uf, port ugue s a de dicada ao de s e nv v e nt olim o, de s ign e e s t égia para produt w e b, rat os F de rico O l e ira, v io f ar s obre o t m a re iv e al e " ação e m I nov P ugal F ort " oram . f it e as div rs as e crít icas à f t al a de e m pre e nde doris m o da m aioria dos port ugue s e s e à f t de oport al a unidade s q ue s ão dadas a nov as ide ias , com parando com out pont do gl ros os obo. Se guiu-s e um a I rodução à l nt inguage m de program ação P rl e m bora m ais v e , irada para o as pe ct s ocial ou s e j para as o , a, com unidade s e s uport ge rado à s ua v t e ol a: CP AN, m ail lt e m l ing is s íngua port ugue s a, P rlM onge rs , e nt out ... Apre s e nt e re ros ação e s t q ue f re al a oi izada por Ne l s on F rraz, e prof s ional Se gul T ch nol s . is da a e ogie

P ara t rm inar a úl a apre s e nt e , t im ação f icou a cargo de P dro Sous a, program ador w e b e para a Acce nt , q ue ure j á h av ia apre s e nt ado o s e u proj ct na 5ª e dição e o da Re v t P G RAM AR, o w e Spe ndM one y. is a RO Es t a f oi um a cont inuação do t m a e " ação" de s t v z apre s e nt I nov , a e ando al guns bons e xe m pl , dando e s pe ciale nf e à os as W ii, a nov cons ol da Nint ndo. a a e Em s um a, f s e m dúv oi, ida ne nh um a, um a ópt a iniciat a, pois para al de s urgir im iv ém m ais um e s paço de div gação do q ue s e ul f az e m P ugal ne s t ort a áre a, s urgiu principal e nt m e m ais um e s paço de s e ns ibil ização, m ot ação e incubação de iv ide ias , pront as a s e r part h adas e il de s e nv v olidas . Es t é um dos cam inh os e para at ingir a re corre nt m e nt f ada e e al " ação" F l e nt I nov . e izm e é j á pos s ív l e obs e rv ar um re s ul t ado prát ico de s t e e v nt e o: um l ocal de div gação e ul s e ns ibil ização s obre as prát icas de al as gum e m pre s as , ao ins e rire m D RM s nos s e us produt (h tp:/w w w .drm -pt o) os t / .inf . P ara m ais inf açõe s s obre e s t e v nt orm e e o, v it m o s it of is e e icial tp:/t cnonov t h t /e .ne

<48>

Sérgio Sant os

anále s is

UM L M e t , odol ogias e F rram e nt CASE e as
A l rt S il be o va Carl V ira os ide
Edit ora: Ce nt roAtant l ico.pt
Colcção: T cnol e e ogias

P áginas : 357 2ª Edição, 1ª Edição: M arço de 2005 I N: 9 89 -615-009 -5 SB

UM L M e t , odol ogias e F rram e nt e as CASE, v um e ol 1, apre s e nt e a-s com o um l ro de re f rência para iv e al unos de l nciat ice uras e de curs os de pós -graduação, na áre a de conce pção de s is t m as e de s ofw are , com e s pe cial f t oco e m m ét odos , m ode l ação e f rram e nt e as CASE (Com put r Aide d Sofw are e t Engine e ring) .
I roduzido o l ro, o prim e iro im pact ao nt iv o corre r das páginas não im pre s s iona. O as pe ct gráf o ico pare ce indicar q ue o l ro iv f de s e nv v oi olido num corriq ue iro e dit de or t xt f e o, icando m uit aq uém da q ual o idade gráf ica q ue as e dit oras de re nom e m undial h abit uaram os prof s ionais e os al is unos do e ns ino s upe rior Es t . e prim e iro im pact o cons ol ida-s e ao l ongo do l ro, onde s e iv j am os im e ns os gráf unt icos e diagram as cuj q ual a idade gráf ica f ica abaixo das e xpe ct iv , ao pont de t at as o ornar dif ícila lit e m al e ura guns cas os . Ce nt rando a at nção no cont údo e não e e na f a, o l ro div -s e e m duas part s . orm iv ide e A prim e ira e f ct e ua o e nq uadram e nt o int roduzindo um a v ão ge ral s obre os is s is t m as de e inf ação, arq uit ct orm e uras , pl am e nt ane o, proce s s os e m ét odos de de s e nv v e nt de s ofw are . Não s e ndo olim o t e s t o obj ct o do l ro e m q ue s t e e iv iv ão, e s t a prim e ira part pe rm it q ue um lit f da e e e or ora

áre a de t cnol e ogias de inf ação s e orm f il am iarize com conce it e conh e cim e nt os os bás icos da áre a. A s e gunda part ce nt e na l e ra-s inguage m de m ode l ação UM L (Unif d ie M ode l ing L anguage ) s e ndo a s e gunda v rs ão do , e UM La grande razão de s e r de s t re e dição. a Na s e gunda part e e f ct e ua-s e um a e num e ração das v árias m ode l açõe s s uport adas pe l UM L e f ct o , e uando um a de s crição, int roduzindo os diagram as corre s ponde nt s e f ndo re f rência, de e aze e f a s upe rf orm icial às l it , im açõe s das v rs õe s e ant riore s do UM L m as não abordando e , pos s ív is problm as e s ol e e uçõe s na act ual v rs ão. Um pont int re s s ant é a incl ão e o e e us de e xe rcícios no f inalde cada s e cção de f a a t s t a s ol z dos conh e cim e nt orm e ar ide os adq uiridos . Era e xpe ct e l q ue após a áv int rodução dos conce it UM Ls e il t s e a os us ras s ua ut ização cons ol il idada e a s ua l igação a f rram e nt CASE, dado q ue o l ro t m a e as iv e pre t ns ão da apl e icação do UM L no proce s s o de de s e nv v e nt no e nt o olim o, ant t não acont ce . al e Ao cont rário das as piraçõe s as s um idas no início do l ro, o m e s m o pare ce indicado iv para lit s q ue t e m cont o pe l e ore om act a prim e ira v z com UM L m as f e , ica aq uém das ne ce s s idade s de al unos do e ns ino s upe rior q ue pre t ndam cons t e ruir um a carre ira na áre a das t cnol e ogias de inf ação. orm

<49 >

F rnando M art e ins

int rne t e

D ire ct ório de apl icaçõe s w e b 2.0

Um dire ct ório e xt ns o e pe s q u is áve l de f rram e nt w e b 2.0, m ant e e as ido pe l a Te ch C ru nch . A q u i é pos s íve le ncont rar as m ais variadas apl icaçõe s , de u m a f a bas t e int it orm ant u iva.

h t p:/ w w w .g o2w e b20.ne t t /

D igg B igSpy
D os l aborat órios do popul port de not ar al ícias D igg f oi criada um a nov e m uit ape l iv f a de obs e rv a a o at a orm ar act idade de t iv odos os ut izadore s . As s im , é pos s ív l il e v ual e m t m po re al t is izar e , odas as not ícias v adas pe l ot os m e m bros , e nq uant as not o ícias com m ais im port ância (ou s im pls m e nt m ais v adas ) s ão re al e e ot çadas .

h tp:/l .digg.com / t /abs bigs py /

V o-aul de P P ide as H
Bog m ant l ido por um a program adora, com um t orialde P P Cada aul ut H . a corre s ponde a um v o fas h , s obre íde l um as s unt part ar de s t popul o icul a ar l inguage m de program ação.

h tp:/program m ing.larningne rd.com / p-bl t / e ph og

Joos t
Nov apl a icação pe e r-t o-pe e r para o s t am ing de canais re de TV Um a nov f a de aprov it o m e lor dos dois . a orm e ar h m undos : TV e int rne t at és de um a apl e , rav icação f ácil de us ar e onde pode m os v rdade iram e nt e s cole r o q ue e e h q ue re m os v r e .

h tp:/w w w .j t t / oos .com
<50>

bl s cre e n ue

P e m as de t cl robl e ado

L v o s e u W indow s / ac e e M cons igo

Sol ução de s e s pe rada

As crianças e s t cada v z m ais int l nt s ... ão e e ige e
<51>

com unidade

Es t os no úl o m ês do prim e iro t e s t am t im rim re do ano e s int o-m e opt is t e m re l im a ação ao rum o q ue as cois as e s t ão a t ar na om com unidade . V j o núm e ro de ut izadore s e o il act os a aum e nt no f iv ar órum , as s im com o o núm e ro de ut izadore s no s e u t al v j il ot , e o v árias e q uipas de de s e nv v e nt a s e re m olim o f adas a part do f orm ir órum , v ários proj ct e os a s urgir v , árias de ze nas de pe s s oas a q ue re r cont ribuír act am e nt iv e para o cre s cim e nt da com unidade , e nf , v j o im e o v ade de t ont rabalar P v ze s t h . or e orna-s e dif ícil para o s t f apoiar t af odas as iniciat as , t iv odos os proj ct e os e dar iniciação a t odas as ide ias q ue s urge m . No e nt o, com al ant gum e s f orço e v ade as ont cois as acabam por s e f r com re l iv aze at a rapide z e s uce s s o.

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

O w ik i (h tp:/w ik i.port t / ugal -a-program ar .org) é m ais um a das pl af as de apoio à at orm f ação de s s e s proj ct , de apoio à orm e os e s crit de art a igos na nos s a l íngua-m ãe e de apoio a q ue m q ue r apre nde r al go s obre program ação. O próxim o pas s o s e rá dado t bém no s e nt am ido de cont inuar a prom ov r a cons t e rução de cont údos e e apre ndizage m de q ue m s e dis ponibil izar para t . al

@ 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

<52>

Rui M aia

Enf , concl o " Com unidade " de s t im uo A a e dição de s orris o e s t pado na cara pe l am o f o do P ugal rogram ar cont act ort -a-P inuar a f r s uce s s o por e s t país f aze e ora, m uit o de v ido ao t rabalo e col h aboração de t odos os m ode radore s do f órum , adm inis t radore s dos pól e aos ut izadore s os il q ue t êm de m ons t rado v ade ont e capacidade de t rabalo. Es pe ro q ue o h s e gundo t e s t rim re do ano t raga m ais pros pe ridade e q ue os re s ul t ados do t rabalo da com unidade agrade m a t h odos os program adore s nacionais .