You are on page 1of 52

e ditorial

índice

3 notícias
4 te m a de capa
10 a program ar
26 s e gurança
28 e le ctrónica
33 te cnol ogias
38 tutorial
44 gnu/l inux
47 e ve ntos
49 anál is e s
50 inte rne t
51 bl ue s cre e n
52 com unidade

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

adm inis tração


Rui M aia
D avid Pintas s il
go

coorde nador Criar, Agir e Apre s e ntar


S érg io S antos
Nos vários e ve ntos por onde te nh o pas s ado, um te m a te m s ido
coorde nador adjunto re corre nte : a inovação e m Portugalou, com o al guns indicaram , a
M ig ue lPais fal ta de l a. O e xe m pl o m ais apre s e ntado e ra no de s e nvol vim e nto
de apl icaçõe s w e b, um a áre a q ue actual m e nte e s tá e m franco
e ditor de s e nvol vim e nto. Todos os dias s urge m novas e originais
Joe lRam os
apl icaçõe s , m as ainda é raro e ncontrar um a e q uipa portugue s a
re dacção e nvol vida. Foram apre s e ntadas várias e xpl icaçõe s para e s ta
D anie lCorre ia gre ve de criação: a l ocalização (cada ve z m e nos im portante ), a
Rui G onçal ve s m e ntal idade , a fal ta de inve s tim e nto e , principal m e nte , a falta de
Pe dro Te ixe ira corage m . Cada ve z m ais s e pe ns a duas ve ze s ante s de s e atirar
Bruno Vaz de cabe ça nal gum proje cto arris cado. No e ntanto, o m e l h or
João Pe re ira
R icardo Roch a
cam inh o apre s e ntado para o s uce s s o foi m e s m o "te ntar"(m uitas
G uilh e rm e Rodrig ue s ve ze s ), de dicar-s e a um proje cto e faze r tudo para q ue vingue .
Nuno Corre ia Fica aq ui o ince ntivo a todos os portugue s e s q ue e s tive re m a l e r,
M ig ue lW ah non s e m e s m o com toda a de dicação não obtive re m re s ul tados (o
Ce ls o Ram os q ue pode rá aconte ce r m uitas ve ze s ), apre ndam com a
Fe rnando M artins
e xpe riência e avance m para novas ide ias . M as te nte m ...

col
aboradore s A partir de s ta e dição ire m os te ntar acom panh ar m ais e ve ntos q ue
Jos é O l
ive ira aconte çam por Portugal , no s e ntido de divul gar o q ue s e vai
Sérgio Santos

faze ndo pe l o nos s o país e prom ove r a dis cus s ão nos m e s m os . Por
contacto is s o, pe dim os q ue nos notifiq ue m de futuros e ve ntos , para
re vis taprog ram ar
@ portug al -a-prog ram ar.org
pode rm os divul gar na re vis ta, de ntro do pe ríodo pos s íve l
. Tam bém
pode rão e nviar-nos re s um os e fotos de e ve ntos já de corridos para
w e bs ite s urgire m na nova s e cção Eve ntos , inaugurada com o e ve nto
w w w .re vis ta-prog ram ar.info Te cnonov 2007, no q uale s tive pre s e nte .

<2>
notícias

UE am e aça M icros oft Adobe l ança ve rs ão do


Ph otos h op onl
ine
A e m pre s a de Bil lG ate s te m de cobrar m e nos
pe l
a ce dência de códigos -fonte s a outras Se gundo inform açõe s de Bruce Ch ize n,
com panh ias de s oftw are . O avis o foi fe ito no pre s ide nte da e m pre s a, nos próxim os s e is
dia 1 de M arço pe l a Com is s ão Europe ia. A CE m e s e s s e rá l
ançada um a ve rs ão online do
de u q uatro s e m anas à M icros oft para re duzir os Ph otos h op, o m ais conh e cido e util izado
cus tos de ace s s o a código-fonte por produtoras program a de e dição de im age m do
de s oftw are q ue q ue re m as s e gurar a m undo.
com patibil idade e inte racção com apl icaçõe s
da M icros oft.

D e acordo com o e xe cutivo com unitário, os


pre ços praticados pe l a M icros oft ape nas e s tão
a al cance das m aiore s com panh ias . A
M icros oft re s ponde u à adve rtência da CE,
al e gando q ue os pre ços de ace s s o aos
códigos s ão 30% m ais baixos q ue a m édia
praticada e m cas os s im il are s . A Com is s ária
para a Concorrência Europe ia, acus a a
M icros oft de viol ar o artigo 82 do Tratado O Ph otos h op juntar-s e -á portanto, ao Adobe
Europe u da Concorrência, com práticas de Re m ix, o já e xis te nte s oftw are onl ine para
abus o de pos ição dom inante . Se não s atis fize r e dição de víde o. Com e s tas m e didas , a
as e xigências da CE, a M icros oft arris ca-s e a Adobe e s tará a com pe tir dire ctam e nte com
gas tar num a m ul ta o corre s ponde nte às e m pre s as com o o G oogl e , q ue já ofe re ce m
re ce itas de cinco m e s e s no m undo inte iro… s e rviços s e m e l
h ante s .

Se m inários IST-Tagus 2007


O s Se m inários IST-Tagus , iniciados no ano de 2004, s ão um e ve nto re al izado anual m e nte
vis ando prom ove r a dis cus s ão de e xpe riências e troca de ide ias re l acionadas com a áre a
te cnológica, be m com o a s ua infl uência no m undo e m pre s arial . Se ndo organizado por
al unos do Ins tituto Supe rior Técnico (pól
o do Tagus park ), e s te e ve nto te m tido um a cre s ce nte
participação de profis s ionais , s e ndo já um conce ituado pal co para a apre s e ntação de
proje ctos inovadore s e de forte im pacto no m e rcado.

A 4ª e dição dos Se m inários IST-Tagus re al izar-s e -


á nos dias 19 e 20 de M arço, no Ce ntro de
Congre s s os do Tagus park , s e ndo s ubordinada
ao te m a "Re alTim e Bus ine s s ". O utro dos grande s
atractivos da e dição de s te ano s e rá a e xibição
de Trabal h os de Finalde Curs o por parte de
alunos do IST.

O e ve nto irá contar com um l e q ue s ignificativo de oradore s de pre s tígio, e ntre os q uais s e
de s tacam Jos é M agal h ãe s (Se cre tário de Es tado da Adm inis tração Inte rna), Carl os Batis ta (T-
Sy s te m s ), Jorge Lope s (BRISA), António M arce l o (TECM IC Eas y tran Vodafone ), e ntre outros .

Para m ais inform açõe s , cons ul


te o s ite oficial
: h ttp://s e m inarios .tagus .is t.utl
.pt

<3>
te m a de capa

Introdução ao W M L(W AP)


A te cnol ogia W AP foi criada pe l o Fórum W AP , O W M L, com o foi e xpl icado ante riorm e nte , é
fundado e m 19 9 7 por m arcas com o a Nok ia um a linguage m q ue a bas tante s
ou a M otorol a, com o obje ctivo de criar um program adore s pare ce rá fam il iar por s e r um
protocol o de troca de inform ação e m m is to de H TM L e XM L, m as m ais rígida e m
dis pos itivos m óve is (w ire l e s s ) com o os te rm os de inte rpre tação.
te l
e m óve is . O W AP cons is te num a l inguage m
de troca de inform ação própria As páginas e m W M L não s ão de m uito
de nom inada W M L. O W M Lé com patíve lcom dife re nte program ação das páginas e m H TM L,
os s tandards de TCP/IP , H TM L e XM L e incl ui por is s o o program ador com e xpe riência e m
tam bém um a l inguage m de s cripting H TM L pode facilm e nte iniciar-s e ne s ta
se m e l
h ante ao Javas cript, m as m ais l e ve de linguage m . Es tas páginas têm a e xte ns ão
form a a s e r de rápida e xe cução por parte .w m le s ão s e ns íve is a m aiús cul as por te re m
dos dis pos itivos m óve is , já q ue e s te s não por bas e o XM L, ou s e ja, s e e s cre ve r <abc>
pos s ue m grande pode r de proce s s am e nto, não vai te r o m e s m o re s ul tado do q ue s e
de nom inada W M LScript. e s cre ve s s e <ABC> . Por s tandard do XM L, as
tags de ve m s e m pre s e r apre s e ntadas e m
A s igl a W AP s ignifica W ire l e s s Application m inús cul as e de ve m s e r s e m pre fe ch adas .
Protocol , ou s e ja, Protocol
o para Apl icaçõe s
W ire l
e s s e é de finida com o um a apl icação No W AP e xis te m te rm os e s pe cíficos para as
XM L1.0. páginas e o s e u conjunto, e cos tum a faze r-s e
a anal ogia e ntre o W AP e um jogo de cartas .
O s brow s e rs q ue cons e gue m inte rpre tar e s ta Im agine q ue te m um a torre de cartas ,
linguage m s ão e s pe cíficos , ou s e ja, não de nom inado por D e ck , e cada e l e m e nto
pode us ar o s e u brow s e r h abitual(a não s e r de s s a torre é, obviam e nte , um a carta –
q ue pos s ua al gum pl ugin para o e fe ito) para de nom inada por Card no código. O ra as s im
ve r páginas W AP . O s tipos de brow s e r s e ndo, um a página W M L é cons ide rado um
com patíve is com o W AP s ão de nom inados de ck e de ntro da página W M L pode m e xis tir
M icro Brow s e rs , pe l as s uas caracte rís ticas m úl tipl
as cards . Q uando um util izador ace de
óbvias – não pode m te r grande s à página W M L s ão de s carre gadas todas as
ne ce s s idade s ao níve l do h ardw are , m ais cards do de ck , s e ndo q ue a nave gação
e s pe cificam e nte ao níve lda m e m ória e CPU, e ntre e las e s tará a cargo do dis pos itivo q ue
e por is s o s ão ide ais para s e r us ados nos as re q ue re u, q ue ne s s a al
tura não e s tará e m
dis pos itivos m óve is . contacto com o s e rvidor.

<4>
te m a de capa

O l e itor ne s te m om e nto pode e s tar um pouco confus o e m re l ação al guns tópicos m e nos
e xplorados e por is s o é pre fe ríve lq ue obs e rve um e xe m pl
o de um de ck , para m e l
h or cons ol
idar
os conh e cim e ntos até agora adq uiridos :

<?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
tado:

Expl
icação do Código:

<w m l > - Tag q ue de l im ita o de ck .


<card> Tag q ue de l im ita cada card. Pode m te r
vários atributos , os apre s e ntados s ão:
id –Ide ntificação da carta, de ve s e r um nom e
único no de ck .
titl
e –Títul o da card, nos te rm inais W APcos tum a
s e r apre s e ntado no topo do e crã.
<p> - Parágrafo, idêntico ao H TM L.
<b r /> - Q ue bra de l inh a, s e m e l
h ante ao H TM L.

Várias tags H TM Lpode m s e r util


izadas da m e s m a form a e m W M L. Aq ui fica um a pe q ue na l
is ta
das m e s m as :

<p> - Parágrafo
<b r /> - Q ue bra de l inh a
<b ig> - Te xto G rande
<sm al l> - Te xto Pe q ue no
<b > - Bold
<i> - Itál
ico
<u> - Subl inh ado (Unde rl ine )

<5>
te m a de capa

Um e le m e nto m uito util


izado e m H TM Le q ue tam bém pode s e r util
izado no W M Lé a tabe l
a. As
tabe l
as funcionam praticam e nte do m e s m o m odo do q ue no H TM L:

<?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
tado:

O utras tags com o o <a> , q ue tanto s ão util izadas para


anch ors com o para l ink s e m H TM L pode m s e r util
izados
e m W M L, m as com um a pe q ue na al te ração na form a
com o os anch ors s ão util
izados :

<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 dife re nte . Por


s e re m dis pos itivos com poucas capacidade s e m te rm os
de h ardw are têm de s e r utilizadas pe q ue nas ,
norm al m e nte m onocrom áticas . Es tas im age ns têm um a e xte ns ão e s pe cífica, o .w bm p.
Não s e rá abordada aq ui a cons trução de im age ns .w bm p, m as um a bre ve pe s q uis a na Inte rne t
de ve rá e s cl
are ce -l
o re l
ativam e nte a e s te as s unto.

A im age m de ve rá s e r ins e rida do s e guinte m odo:

<img src="imagem.wbmp" alt="imagem_alt" />

O s form ul ários s ão e l e m e ntos m uito úte is para adicionar inte ractividade ao s e u s ite ou portal ,
ape s ar dos util izadore s não ficare m m uito te m po a nave gar na W APao contrário da Inte rne t.
Ne s ta s e cção vam os de ixar o l e itor e xpl
orar por s i próprio código de form ul ários já conce bidos ,
be m com o o s e u re s ul tado, de m odo a pode r apre nde r m e l h or a trabal
h ar com form ulários e m
W M L. (e xe m pl os re tirados do s ite w 3s ch ool s .com e tradu zidos para portu gu ês )

<6>
te m a de capa
<?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 rtada de vido ao tam anh o do
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>
te m a de capa

<?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> Nota: Es te s im ul
ador não re produz o fie l
ds e t
da m e l
h or form a.

Em W M L, para a nave gação e ntre as dive rs as


páginas e afins , te m os os s e guinte s e l
e m e ntos : Pre vious
D irige para a página vis itada ante riorm e nte .
G o:
<anchor> <anchor>
Ir para Carta Página Anterior
<go href="carta.wml"/> <prev/>
</anchor> </anchor>

Pre vious :
<anchor> Re fre s h
Anterior Actual
iza a página ao cl icar, e tam bém
<prev/> actual
iza as variáve is dadas .
</anchor>
<anchor>
Re fre s h : Actualizar a página
<anchor> <go href="paginaactual.wml"/>
Actualizar <refresh>
<go href="pagina.wml"/> <setvar name="a" value="20"/>
<refresh> </refresh>
<setvar name="a" value="10"/> </anchor>
</refresh>
</anchor>
No O pe ration (noop)
C om andos W M L Pre vine um a acção de s e r re al
izada.

Go <anchor>
D irig e para a pág ina indicada no h re f. Ir para abc
<go href="abc.wml"/>
<anchor> <noop/>
Ir para abc </anchor>
<go href="abc.wml"/>
</anchor>

<8>
te m a de capa

Tim e rs
Utilizam -s e norm alm e nte para
re dire ccionar para um a página
e s pe cífica, de pois de x s e gundos .

<card ontimer="test.wml">
<timer value="30"/>
<p>Vai ser redireccionado em 3
segundos.</p>

Variáve is e m W M L
D e finir um a variáve l
:

<setvar name="a" value="500"/>

Com is to é criada um a variáve la com o


val
or 500.

Para de finir um a variáve la partir de um


inputfaze m os :

<card id="carta1">
<select name="escolha">
<option value="pap">Portugal-a-
Programar</option>
<option value="revista">Revista
PROGRAMAR</option>
</select>
</card>

E s e guidam e nte us am os o s e guinte código


para us ar a variáve lobtida:

<card id="carta1">
Seleccionaste: $(escolha)
</card>

Se s e guiu ate ntam e nte e s te artigo com


ce rte za irá gos tar de aprofundar m ais os
s e us conh e cim e ntos e apl ica-los nos s e us
próprios s ite s , por is s o de ixo aq ui um a
e xce l e nte form a de apre nde r m ais s obre
e s te te m a.
D anie lCorre ia

Cons ul te o tutorialda W 3Sch ool s s obre e s te


as s unto, m ais e s pe cificam e nte a página
de e xe m pl os (h ttp://w 3s ch ool
s .com /w ap/
wml _e xam ple s .as p).

D aq ui é tudo, bons s ite s !

<9 >
a program ar

Program ação
O rie ntada aos
As pe ctos com
As pe ctJ

Introdução
D urante os úl tim os anos as s is tim os a um a M as , com o já foi re fe rido ante riorm e nte ,
grande divul gação da program ação ape s ar da orie ntação aos obje ctos te r
orie ntada aos obje ctos (PO O ). Es ta ve io trazido m e l h orias na form a de program ar,
re s ponde r a re q uis itos e s s e nciais no não cons e guiu re s ol ve r alguns probl e m as .
de s e nvolvim e nto de s oftw are , nom e adam e nte Exe m pl os cl ás s icos s ão o re gis tos das
no q ue diz re s pe ito às facil idade s de ope raçõe s e m fich e iros de l og q ue
m anute nção e re util ização do código. M as e ncontram os e m m uitos s oftw are s , ou
ape s ar de todas e s tas e vol uçõe s , ne m tudo program ação concorre nte /dis tribuída. O
aq uil o q ue a PO O s e propunh a cons e guir foi código as s ociado a e s te tipo de
al cançado. É ne s te conte xto q ue s urge a funcional idade s e ncontra-s e norm al m e nte
program ação orie ntada aos as pe ctos (PO A). e s pal h ado por todos os m ódul os , o q ue
Es te novo paradigm a de program ação s urgiu dificul ta a m anute nção e a e vol ução do
e m 19 9 6 por G re ge r K iczal os e pe l a s ua código. Em PO A dize m os q ue is to s ão
e q uipa no Xe rox PARC, q ue tam bém foram inte re s s e s e ntre cortante s , pois cortam
re s pons áve is pe lo de s e nvol vim e nto do trans ve rs al m e nte todos os m ódul os . A PO A
As pe ctJ, a linguage m PO A m ais us ada. ve m re s ol ve r e s te probl e m a introduzindo
um novo níve lde s e paração de inte re s s e s ,
Q uando vam os de s e nvolve r um a os as pe ctos .
apl icação, é conve nie nte dividir o
probl e m a q ue nos foi propos to e m parte s . Bas icam e nte e s te s inte re s s e s trans ve rs ais à
A s e paração do probl e m a de acordo apl icação s ão e ncaps ul ados ne s tas novas
com os dados e as funcional idade s a e l es unidade s m odul are s e pos te riorm e nte
as s ociadas facil ita o e s tudo dos re q uis itos fundidas com as cl as s e s num único s is te m a.
da apl icação. Is to é o q ue s e de s igna por Is to não s ó aum e nta a facil idade de
s e paração de inte re s s e s . O paradigm a m anute nção de s tas funcional idade s da
OO e s tabe le ce um a s e paração de apl icação, vis to q ue tudo s e e ncontra num
inte re s s e s te ndo e m conta os tipos de único l ocal , com o aum e nta as pos s ibil idade s
dados , re pre s e ntados pe l os obje ctos , e as de re util
ização das cl as s e s noutros conte xtos ,
funçõe s q ue util izam cada tipo de dados , pois e s tas e ncontram -s e l im pas de s tas
ou s e ja, os m étodos a q ue um obje cto funcional idade s q ue norm al m e nte variam
re s ponde . m uito de cas o para cas o.

<10>
a program ar

O As pe ctJ •w ith in - join points q ue ocorre m de ntro


de de te rm inadas cl as s e s ;
•targe t- e nvio de m e ns age ns a um
O As pe ctJ (h ttp://w w w .e cl
ips e .org/as pe ctj) foi
obje cto de um de te rm inado tipo;
a prim e ira linguage m O A de s e nvol vida e é,
•args - e nvio de m e ns age ns e m q ue os
provave l m e nte , a m ais us ada. Es ta
argum e ntos s ão de um de te rm inado tipo.
l
inguage m pe rm ite acre s ce ntar as pe ctos a
program as fe itos e m Java. Para com pre e nde r
A e xpre s s ão pode s e r um a pal avra (nom e
o As pe ctJ é ne ce s s ário conh e ce r três
de um a cl as s e , nom e de um m étodo, e tc.),
conce itos fundam e ntais pre s e nte s na PO A :
m as tam bém te m os caracte re s e s pe ciais :
•advice s - s ão fragm e ntos de código
•*- re pre s e nta um a s e q uência de
com as acçõe s re fe re nte s aos inte re s s e s
caracte re s q ual q ue r, de s de q ue não
e ntre cortante s ;
conte nh a pontos ;
•.. - re pre s e nta um a s e q uência de
•join points - s ão l ocais de um program a
caracte re s q ual q ue r, m e s m o conte ndo
onde os advice s s e rão e xe cutados , q ue
pontos ;
pode m s e r a ch am ada/e xe cução de um
•+ - re pre s e nta as s ubcl as s e s de um a
m étodo, o ace s s o a m e m bros de um a
dada cl as s e .
clas s e , a criação de um obje cto, o
l
ançam e nto de e xce pçõe s , e tc.;
Ve jam os agora al
guns e xe m pl
os :
•pointcuts - s ão um conjunto de join
points , de finidos s e gundo um de te rm inado
•pointcu ttos tr() : e xe cu tion(String toString());
critério, q ue ide ntificam os l
ocais onde um
de te rm inado advice s e rá e xe cutado.
Re pre s e nta todas as e xe cuçõe s do
m étodo toString. Pode m os re s tringir ape nas
Pointcuts à e xe cução do m étodo a obje ctos da
clas s e Xpto s ubs tituindo String toString() por
G e ne ricam e nte , a de finição de um String Xpto.toString(), ou a obje ctos da
pointcutobe de ce à s e guinte s intaxe : clas s e Xpto e todas as s uas s ubcl as s e s
faze ndo String Xpto+ .toString();
pointcut <nome>() : <tipo>(<padrão>);
•pointcu ts e ts () : cal
l(*Xpto*.s e t*(..));
O nde :
•<nom e > é o ide ntificador de s te pointcut Re pre s e nta a ch am ada de m étodos
•<tipo> indica a q ue tipo de join point com e çados pe l a pal avra s e t de cl as s e s
nos re fe rim os (ch am ada de um a função, com e çadas pe l a pal avra Xpto, com um
ace s s o a um atributo, e tc.); núm e ro q ual q ue r de argum e ntos . Pode m os
•<padrão> é um a e xpre s s ão q ue lim itar ape nas a m étodos q ue re ce bam
re s tringe os join points a s e re m argum e ntos de um de te rm inada tipo, por
cons ide rados àq ue l e s q ue faze m m atch ing e xe m pl o, faze ndo * Xpto*.s e t*(int,String)
com e s ta e xpre s s ão. lim itaríam os ape nas aos m étodos cujo o
prim e iro argum e nto fos s e um inte iro e o
D e s e guida indicam -s e os tipos de join s e gundo um a s tring (para al ém de ve rificar
points m ais im portante s : todas as outras condiçõe s já indicadas ).

•cal l- ch am ada de um a função; •pointcu tge ts () : ge t(private String abc*);


•e xe cution - e xe cução de um a função;
•ge t- cons ul ta dos atributos de um Re pre s e nta todos os ace s s os (para
obje cto; cons ul ta) a atributos private do tipo String,
•s e t- alte ração dos atributos de um obje cto; com e çados por abc.

<11>
a program ar

Para de finirm os pointcuts tam bém te m os à nos s a dis pos ição ope radore s l
ógicos (!, || e & & ,
cujo s ignificado é o h abitual
).

pointcut gets() : get(* *) && within(Xpto);

Es te pointcutre pre s e nta um ace s s o a q ual


q ue r atributo, de s de q ue s e ja da cl
as s e Xpto.
Agora vam os ve r com o util izar o targe t e o args para re s tringir o tipo dos obje ctos a q ue o
m étodo é e nviado, as s im com o o tipo dos argum e ntos com os q uais o m étodo foi invocado.

pointcut p1(Xpto x,int y,float z) : execution(* *(..)) && target(x) && args(i,j);

D e s ta form a re s tringim os os join points aos m étodos e nviados a um obje cto do tipo Xpto e q ue
re ce be m 2 argum e ntos (o prim e iro do tipo int e o s e gundo do tipo fl oat). É claro q ue is to
pode ria te r s ido cons e guido com a e xpre s s ão * Xpto.*(int,fl oat), m as , com o ve re m os de
s e guida, e s ta opção pe rm itirá us ar o obje cto ao q ualfoi e nviado o m étodo, as s im com o os
argum e ntos re ce bidos na e s pe cificação de advice s .

Advice s
Se os pointcuts indicavam o conjunto de pontos de um a apl icação onde q ue ríam os re alizar
outras ope raçõe s , os advice s pe rm ite m -nos de finir q uais s ão e s s as ope raçõe s .
Te m os 3 (ou 5) tipos de advice s . Us am os o:
•be fore , q uando q ue re m os e xe cutar acçõe s ante s de um join point;
•afte r, q uando q ue re m os e xe cutar acçõe s de pois de um join point, e xis tindo três al te rnativas :
•o afte r(), q ue é s e m pre e xe cutado;
•o afte r() re turning, q ue ape nas é e xe cutado q uando o m étodo as s ociado ao join point
re torna;
•o afte r() th row ing, q ue ape nas é e xe cutado q uando o m étodo as s ociado ao join point
lança um a e xce pção.
•around , q uando q ue re m os e xe cutar acçõe s e m ve z de um m étodo (s e ndo q ue de ntro do
advice pode m os e xe cutar o m étodo original ).

Vam os agora anal


is ar al
guns e xe m pl
os concre tos . Para talvam os cons ide rar as s e guinte s
cl
as s e s Java:

public class Classe1 {


private int x; public class Classe2 {
private boolean a; private int y;

public Classe1(int x,boolean a) { public Classe2(int y) {


this.x = x; this.y=y;
this.a = a; }
}
public void setY(int y)
public void setX(int x) {this.x=x;} {this.y=y;}

public void setA(boolean a) {this.a=a;} public String toString() {


return ("y=" + this.y);
public String toString() { }
return ("x=" + this.x + " / a=" + this.a); }
}
}

<12>
a program ar

O prim e iro probl e m a q ue vam os re s ol


ve r cons is te e m al
te rar os m étodos toString(). Vam os al te rá-
l
os de form a a q ue pas s e m a criar um a s tring q ue conte nh a tam bém o nom e da cl as s e . Tal
pode s e r cons e guido do s e guinte m odo:

pointcut tostr(Object obj) : execution(String toString())


&& target(obj);

String around(Object o) : tostr(o) {


String s = proceed(o);
return ("<" + o.getClass().getName() + " @ " + s + ">");
}

Prim e iro de finim os o pointcut q ue , para além de re s tringir os m étodos à e xe cução do toString(),
tam bém capta o obje cto ao q ualo m étodo é e nviado através do targe t. D e s ta form a foi
pos s íve lutil
izar o obje cto no advice , com o s e pode ve r nas l inh as 5 e 6. Foi tam bém us ado
proce e d, q ue e xe cuta o m étodo original . D e pois é s ó acre s ce ntar o nom e da cl as s e e de vol
ve r
o re s ultado.

No próxim o e xe m pl o vam os ve r com o us ar o args , q ue é s e m e l


h ante ao targe t, m as e s te capta
os argum e ntos do m étodo (ou cons trutor, com o s e rá o cas o). Es te as pe cto irá im prim ir um a
m e ns age m s e m pre q ue um obje cto de um a cl as s e com e çada por Cl as s e for inicial izado
através de um cons trutor q ue re ce ba um argum e nto do tipo inte iro.

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 te e xe m pl o foi tam bém us ada a variáve lth is JoinPointStaticPart, q ue contém um a s érie de


inform açõe s s obre o join point e m q ue o as pe cto vai s e r e xe cutado. Exis te tam bém a variáve l
th is JoinPoint, q ue pode ria s e r us ada ne s te cas o para s abe r q uais os argum e ntos re ce bidos . Tals e rá
fe ito no próxim o e xe m plo.

Suponh am os agora q ue q ue ríam os re gis tar todas as al te raçõe s re al izadas e m q ual


q ue r um a
das cl as s e s . Para al
te rar o valor dos atributos é ne ce s s ário re corre r aos m étodos s e t*. Logo
vam os criar um pointcut q ue agrupe todas as e xe cuçõe s de s te s m étodos . Tam bém vam os
q ue re r re gis tar q ualo obje cto afe ctado, q uais os argum e ntos us ados no m étodo (s e ndo q ue o
s e u tipo ne m s e m pre é o m e s m o) e q ualo nom e do m étodo.

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 à variáve lth is JoinPoint para obte r os argum e ntos us ados no m étodo, as s im
com o os ide ntificadore s dos argum e ntos . O re s ultado obtido s e rá al
go com o:

D ata: SatD e c 09 17:56:30 W ET 2006


O bje cto: <Cl as s e 1 @ x=12 /a=true >
M e todo: s e tX
Argum e ntos :
x=10

Concl
us ão
Ao l ongo de s te artigo ficaram vis íve is al guns dos be ne fícios q ue pode m os obte r com a PO A.
Contudo h á al guns factos q ue é ne ce s s ário re al çar. Em prim e iro, q ue um a abordage m dos
probl e m as s e gundo e s ta m e todologia, é bas tante m ais com pl icada do q ue a abordage m O O .
É difícilde finir a e s trutura do s oftw are , ide ntificando corre ctam e nte todas as parte s q ue o
com põe m . M e s m o de pois de de finida a e s trutura, com e te m os facil m e nte e rros na de finição
dos as pe ctos (aconte ce várias ve ze s de finir as pe ctos q ue originam cicl os infinitos , pois ao
e xe cutá-l os criávam os s ituaçõe s onde outros as pe ctos pode riam s e r e xe cutados ), q ue por
ve ze s não s ão m uito vis íve is . Subl
inh a-s e ainda q ue não é obje ctivo da PO A s ubs tituir a PO O ,
tratam -s e s im de dois paradigm as com pl e m e ntare s .

Por úl tim o re fe ria-s e q ue e s te te xto é ape nas um a introdução à PO A/As pe ctJ e , com o tal
, m uitas
das capacidade s de s te novo paradigm a não foram aq ui de m ons tradas . Suge re -s e a q ue m
q uis e r aprofundar os s e us conh e cim e ntos ne s ta áre a, a cons ul ta da página w e b do As pe ctJ,
onde pode rá e ncontrar um a vas ta docum e ntação s obre e s te te m a.

Re fe rências
ve s
Rui G onçal

h ttp://w w w .e cl ips e .org/as pe ctj


h ttp://e n.w ik ipe dia.org/w ik i/As pe ct-orie nte d_program m ing
h ttp://w w w .re s e arch .ibm .com /h ype rs pace
h ttp://w w w .de vx.com /Java/Articl e /28422

<14>
a program ar

O código do cl ie nte e do s e rvidor não têm


de se r ne ce s s ariam e nte dife re nte s ,
facil m e nte s e de s e nvol ve um a apl icação
q ue tanto pode funcionar com o cl ie nte
com o para s e rvidor. A grande dife re nça
e s tá no s e u com portam e nto, ou s e ja, o
s e rvidor inicia a e xe cução e aguarda um a
ligação, o cl ie nte inicia a e xe cução e a
ligação ao s e rvidor.

Para dar um e xe m pl o prático de com o


funcionam os s ock e ts , vam os faze r um
s im pl e s par de apl icaçõe s e m q ue o
cl ie nte e nvia um a pal avra com l e tras
m inús cul as para o s e rvidor. O s e rvidor trata
de conve rte r as l e tras e m m aiús cul as
de vol ve ndo a pal avra ao cl ie nte . Vam os

Sock e ts de Be rk e l
y util izar o m odo TCP do protocol
conjunto de apl
o TCP/IP e o
icaçõe s s ão fe ch adas

em l inguage m q uando o cl ie nte digita a pal avra “e xit”.

C Ante s de m ais nada convém ve r com o


funciona o e s tabe l e cim e nto de um a
ligação TCP . A s e guinte figura é bas tante
e xplícita q uanto a is s o:
Na ante rior e dição da Re vis ta PRO G RAM AR
foi dado a conh e ce r com o funcionam os
s ock e ts e m Java. Tam bém foram de s critas
as principais dife re nças e ntre UD P e TCP .
Ne s te artigo vam os faze r um a bre ve
introdução aos Sock e ts de Be rk e l ey em
linguage m C para am bie nte s UNIX e Linux.

Bas icam e nte os Sock e ts de Be rk e le y s ão um


API, is to é, um conjunto de bibl iote cas de
funçõe s para a program ação s obre
protocol os de com unicação.

M ode l
o Cl
ie nte –Se rvidor
O m ode l o Cl ie nte – Se rvidor é com pos to
por um conjunto de dois program as e m
e xe cução q ue com unicam e ntre s i. O
s e rvidor e s tá s e m pre à e s pe ra de pe didos
e fe ctuados pe l os cl ie nte s m as de s conh e ce
a s ua l ocal ização. O cl ie nte te m de
conh e ce r obrigatoriam e nte a l ocalização
do s e rvidor (IP) para pode r l igar-s e e
com unicar com e l e.

<15>
a program ar

Agora vam os ve r pas s o a pas s o as funçõe s 5 - Es tabe l


e ce r a l
igação ao s e rvidor:
util
izadas :
// efectua a ligação ao servidor.
// Se falhar (por exemplo o servidor
// estar em baixo) o programa termina
Cl
ie nte if(connect(sock, (struct sockaddr
*)&target, ad1) == -1)
{
1 - Conjunto de bibl
iote cas a adicionar close(sock);
às tradicionais : puts("Conexao falhou!");
exit(0);
#include <sys/types.h> }
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
6 - Lê um a pal avra do te cl ado
#include <arpa/inet.h>
#include <sys/ioctl.h>
e nq uanto e s ta for dife re nte de “e xit”.
#include <unistd.h> Em s e guida e nvia-a para o s e rvidor e
re ce be -a com le tras m aiús cul
as :

do {
2 - D e finir a e s trutura de de s tino
scanf("%s", palavra);
(s e rvidor) e as variáve is : // envia para o servidor os dados
// contidos na variável “palavra”
// definição da estrutura do servidor write(sock, palavra, 50);
struct sockaddr_in target; if(strcmp(palavra, "exit") != 0){
// criar o socket, indicando a família // recebe do servidor os dados
// a que pertence (AF_INET), o tipo de // e guarda-os na variável
// protocolo (neste caso TCP - // “palavra2”
// SOCK_STREAM) e o parâmetro do read(sock, palavra2, 50);
// protocolo (0). printf("%s\n", palavra2);
int sock = socket(AF_INET,SOCK_STREAM,0); }
// variáveis }while(strcmp(palavra, "exit") != 0);
char palavra[50], palavra2[50];
// tamanho da estrutura do servidor
int ad1 = sizeof(target);
7 - Fe ch ar o s ock e t:

close(sock);
3 - Inicial
izar a e s trutura:

// inicializa a estrutura do servidor


bzero((char *)&target, ad1);
Se rvidor
4 - D e finir as proprie dade s do s e rvidor
ao q ualnos vam os l igar: 1 - Conjunto de bibl
iote cas a adicionar
às tradicionais :
// indica a família do protocolo
target.sin_family = AF_INET; #include <sys/types.h>
// especifica o endereço (IP) do #include <sys/socket.h>
// servidor #include <netinet/in.h>
target.sin_addr.s_addr = #include <arpa/inet.h>
inet_addr("127.0.0.1"); #include <unistd.h>
// porta que o programa vai usar #include <ctype.h>
target.sin_port = htons(8450);

<16>
a program ar

2 - D e finir a e s trutura do cl
ie nte , do 6 - Es pe rar por pe didos . É criado um
s e rvidor e as variáve is : novo s ock e tpara tratar ape nas de s te
pe dido e nq uanto q ue o outro s ock e t
continua à e s pe ra de pe didos :
// definição das estruturas do
// cliente e do servidor
struct sockaddr_in me, from; // coloca o socket à escuta.
// criação dos sockets.o “sock” é // Podem ser mantidos em espera 5
// declarado identicamente ao cliente // pedidos de ligação
int newSock, sock = listen(sock, 5);
socket(AF_INET,SOCK_STREAM,0); // gera um novo socket específico
// declaração das variáveis // para essa ligação
int tam = 0, i = 0; newSock = accept(sock, (struct
int ad1 = sizeof(me); sockaddr *)&from, (void *)&ad1);
char palavra[50], palavra2[50]; // fechar o socket antigo
close(sock);

3 - Inicial
izar a e s trutura:

// inicializa a estrutura do servidor 7 - Cicl o infinito q ue trata dos pe didos


bzero((char *)&me, ad1);
do clie nte :

for(;;){
4 - D e finir as proprie dade s do s e rvidor: // recebe os dados do cliente e
guarda-os na variável “palavra”
// indica a família do protocolo read(newSock, palavra, 50);
me.sin_family = AF_INET; if(strcmp(palavra, "exit") != 0){
// fica associado a todos os tam = strlen(palavra);
// endereços IP do host local for(i=0;i<tam;i++){
me.sin_addr.s_addr = htonl(INADDR_ANY); if((palavra[i]>='a') &&
// porta em que o servidor vai (palavra[i]<='z')){
// estar à escuta palavra2[i] =
me.sin_port = htons(8450); toupper(palavra[i]);
}
}
palavra2[i] = '\0';
5 - Al ocar a porta. Se e s tive r ocupada é // envia os dados que estão na
fe ch ado o s e rvidor. variável “palavra2” para o cliente
write(newSock, palavra2, 50);
// se a porta estiver ocupada o }
servidor não pode correr e é else{
terminado close(newSock);
if(bind(sock, (struct sockaddr exit(0);
*)&me, ad1) == -1) }
{ }
close(sock);
puts("Porta Ocupada!");
exit(0);
}

<17>
a program ar

Se rvidor
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <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
ie nte

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <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;
}

Para conh e ce r m e l h or com o s ão com pos tas al gum as e s truturas o l e itor pode vis itar os l
ink s :
h ttp://jan.ne tcom p.m onas h .e du.au/Cl ie ntSe rve r/s ock e t/s ock e t.h tm l e
h ttp://w w w .de i.is e p.ipp.pt/~ andre /docum e ntos /s ock e ts -be rk e l e y.h tm l
Pe dro Te ixe ira

Se não pode tam bém pe s q uis ar na Inte rne t já q ue e xis te inúm e ra inform ação no q ue diz
re s pe ito à API s ock e ts de Be rk e l
e y.

<19 >
a program ar

Es tatís ticas e m PH P
•M aani PH P/SW FCh arts
É um a fe rram e nta l ivre q ue nos pe rm ite

1ª Parte
criar gráficos e m Sh ock w ave Fl as h e m
te m po re al com dados e s táticos ou
dinâm icos . Encontram o dow nl oad e
inform ação m ais com pl e ta e m :
h ttp://w w w .m aani.us /ch arts /inde x.ph p

D e vido à e xte ns ão do s cript, ne s te artigo


ape nas ire i fal ar das funçõe s m ais
re le vante s . O s cript na s ua total idade ,
im pl e m e nta 4 gráficos ( 2 de barras , e 2
circul are s ), e 4 tabe las re s um o. No e ntanto
ape nas ire m os fal ar aq ui da cons trução de
um gráfico e de um a tabe l a re s um o. Na
concl us ão do artigo (na próxim a e dição)
s e rá re fe rido um link para o s criptcom pl e to.

Ins tal
ação
Q ue m já criou um w e bs ite ce rtam e nte
te ve a curios idade de s abe r q uantas Após te r fe ito o dow nl oad de am bas as
pe s s oas por l á pas s aram e de onde fe rram e ntas (G e oIP e M aani Ch arts ), de ve rá
s e riam e s s as pe s s oas . A curios idade de s com pactá-l as para a raiz do s e u
h um ana é natural e l e va a e s tas w e bs ite .
q ue s tõe s . Es ta é a prim e ira parte dum O s fich e iros de s critos nas próxim as páginas
tutorialq ue s e rá concl uído na próxim a de ve rão tam bém s e r guardados na raiz do
e dição. w e bs ite .
Para re s ol ve r de um a form a s im pl es e
inte iram e nte ao nos s o gos to irá s e r
SQ L
de s e nvol vido aq ui um tutorial “pas s o-a-
Com o o proje cto irá s alvaguardar os dados
pas s o” de form a a q ue no finalde s te artigo
de todos os vis itante s q ue pas s am no
te nh a um s is te m a de e s tatís ticas s im pl es e
w e bs ite , de ve rá guardar os re s pe ctivos
funcionalcom as inform açõe s m ais util izadas .
dados num a bas e de dados e m M y SQ L.
Todas e s tas inform açõe s s e rão m os tradas
com auxíl io vis ualde gráficos , para q ue os
re s ultados s e jam m ais ape l ativos aos
vis itante s .

Ante s de com e çar a program ar, convém


faze r o dow nl oad de al gum as clas s e s e m PH P
q ue irá util izar de form a a m inim izar o s e u
trabal h o. São e l
as :

•G EO IP
É um a cl as s e com ve rs ão ope ns ource e
ve rs ão l ice nciada. Nós ire m os util
izar a ve rs ão
livre para nos re tornar o código e nom e do
País de orige m do vis itante s . Pode rão re al izar
o dow nl oad e m :
h ttp://w w w .m axm ind.com /app/ge oip_country

<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 col
h a de Inform açõe s
Agora q ue já te m a bas e de dados pronta e pre parada para re ce be r dados , pas s a à fas e do
PH Pcriando o fich e iro 's tatis tics .ph p'.
Inicia as s im o fich e iro l
ogo com a função m ais im portante de todo o s is te m a. A função q ue
pe rm ite re col
h e r os dados do vis itante , e irá ins e rir na re s pe ctiva tabe l
a.

<?php

function saveStatistics ( ) {

include( "connection.php");
include( "geoip.inc" );

$geoIP_Pais = geoip_open( "GeoIP.dat" , GEOIP_STANDARD );

Util
izando a função ‘ge oip_ope n’ q ue faz parte da Cl as s e G e oIP faz com q ue s e carre gue com
a ‘bas e de dados ’ q ue irá s e rvir para ide ntificar os País e 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 PH P te m q uas e todas as ins truçõe s ne ce s s árias para re col h e r a inform ação q ue
ne ce s s ita. A variáve l‘$_SERVER’ pe rm ite s abe r o IP do vis itante através de ‘REM O TE_AD D R’. Com
‘H TTP_REFERER’ cons e guir s abe r de q ue página é originário. No e ntanto o ‘H TTP_REFERER’ é um a
ins trução m uito traiçoe ira, pois por ve ze s dá inform açõe s incorre ctas q ue te m q ue s al vaguardar.
Se não e xis tir ne nh um ‘H TTP_REFERER’ s ignifica q ue o utilizador provave lm e nte ins e riu dire ctam e nte
o URLdo w e bs ite e com o tal , ficará catalogado com o ‘URLD ire cto’. Cas o e xis ta um ‘H TTP_REFERER’
e ntão não irá pre cis ar de todo o ‘REFERER’ para o tratam e nto, irá ape nas ne ce s s itar de al go do
géne ro: w w w .portugal -a-program ar.com . Para talutil iza um a s érie de ins truçõe s do PH P q ue irá
is olar a inform ação q ue pre te nde de toda a inform ação q ue ve m a m ais no URL.

O últim o probl e m a a de re s olve r pre nde -s e com o facto de q ue s e fôr e fe ctuado um ‘REFRESH ’ na
própria página o ‘H TTP_REFERER’ de vol ve ape nas um “array ()” vazio. Irá catal ogar um ‘REFRESH ’
com o um 'h it' de ‘URLD ire cto’.

$temp_page_visited = explode ( "/" , $_SERVER[ 'PHP_SELF' ] );


$page_visited = end ( $temp_page_visited );

Num s is te m a de e s tatís ticas é im portante q ue te nh a conh e cim e nto de q uais as páginas m ais
vis itadas no s e u w e bs ite . Util
izará $_SERVER['PH P_SELF']
, contudo ao utilizar e s ta ins trução re ce be
inform ação adicionalno URLq ue não ne ce s s ita. Te rá q ue is ol ar a parte finaldo URLde form a a
q ue te nh a ape nas a página vis itada.

$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][0-
9]|5[0-5]))$", $visitor_hostname)) {
$visitor_hostname = "Indefinido";

Para q ue pos s a s abe r q ualo código e o nom e do País do vis itante através do IP vol ta a utilizar a
cl as s e G e oIP com as funçõe s 'ge oip_country _code _by _addr()' e 'ge oip_country _nam e _by _addr()'
re s pe ctivam e nte .

Com o '@ ge th os ty addr()' pode s abe r o dom ínio do vis itante . No e ntanto pode te r não cons e guir
s abe r o nom e do dom ínio por e s tar a s e r utilizado um Se rvidor Anónim o, ou ainda a s e r util izado
um s e rvidor q ue s e e s conde por várias inte rligaçõe s e m form a de s al tos (h ops ), e acaba s e m pre
por s e r re tornado um novo IP. Salvaguardando e s ta h ipóte s e , te s ta s e o q ue é re tornado é um IP
vál ido com a função ‘e re g()’, cas o s e ja um a condição ve rdade ira e ntão de fine -s e o dom ínio do
vis itante com o 'Inde finido'.

$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 ve m os conh e ce r q ue Expl orador de Inte rne t (Brow s e r) util iza o vis itante , ao criar um w e bs ite
de ve rá s e r s e m pre com patíve lcom todos os Expl oradore s e xis te nte s . É óbvio q ue com patíve l
com todos a 100% é praticam e nte im pos s íve l , portanto é ne ce s s ário s abe r s e m pre q uais s ão os
m ais im portante s e m ais util izados pe l o vis itante , de form a a de s e nvol ve r no s e u w e bs ite a
com patibil idade com os outros Expl oradore s dos vis itante s . Com o código acim a de s crito pode -
s e e ntão ve rificar q ue a ins trução $_SERVER[‘H TTP_USER_AG ENT’]de vol ve um a s tring, na q ual
pe rm ite s abe r o Expl orador de Inte rne tq ue e s tá a s e r util
izado na vis ual ização do s e u s ite .

Aq ui, ape nas é col


ocado al
guns Expl
oradore s a títul
o de e xe m pl
o, no s cript com pl
e to e xis te m
m uitos m ais .

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 form a q ue s oube q ualo Expl orador de Inte rne t através da 's tring' re tornada pe lo
'H TTP_USER_AG ENT', tam bém s e cons e gue s abe r o Sis te m a O pe rativo do util izador. É um dado
bas tante im portante , principal m e nte s e e s tive r a de s e nvol
ve r um w e bs ite com conte údo para
PC's , Sm artph one 's ou PD A's . Tam bém aq ui o código foi re s um ido, pode ndo e ncontrar m ais
Sis te m as O pe rativos no Scriptcom pl e to.

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 todos os dados e s s e nciais do vis itante já re col


h idos fica a fal
tar a s ua ins e rção na Bas e
de D ados , te rm inando as s im a função q ue re col h e dos e l e m e ntos e s s e nciais ao
funcionam e nto do s cript.

Cl
as s e
Continuando o fich e iro 's tatis tics .ph p' ch e gou a al
tura de criar e ntão a 'Cl as s e ' re s pons áve l
pe l
a ge ração dos gráficos e re l atórios através dos dados e xis te nte s na Bas e de D ados .

A próxim a função da 'Cl as s e Statis tics ' é de m e ra pe rs onal ização do gráfico para o s e u
as pe cto vis ual
, com o talnão irá s e com e ntada. M ais inform ação s obre a pe rs onal ização dos
gráficos de ve rá s e r obtida e m : h ttp://w w w .m aani.us /ch arts /inde x.ph p?
m e nu=G al
le ry .

<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 ta função pre para-s e o as pe cto vis ualpara o gráfico de colunas , m as e xis te tam bém
um a função para pe rs onal
ização do gráfico circul ar no Scriptcom pl
e to.

<24>
a program ar
Com e s ta função pre para-s e o as pe cto vis ualpara o gráfico de colunas , m as e xis te tam bém
um a função para pe rs onal
ização do gráfico circul ar no Scriptcom pl
e to.

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 ta função irá ge rar o G ráfico para totais de vis itas por dia, e xtraindo os dados da bas e de
dados com contage m de todos os IPguardados e com os totais agrupados por dia.

for ($i=0;$i<(($endDate-$beginDate)+1);$i++) {
$days[$i]=date("d-m",strtotime("-".(($endDate-$beginDate)-$i)."
day",strtotime(changeDate($endDate))));
}

Com o as datas introduzidas para vis ual ização dos gráficos e re l


atórios é variáve l, cria-s e um
'array ' dos dias e xis te nte s e ntre as duas datas com os rótul
os no form ato de 'dia-m ês ' (e x: 17-01).

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 inte rvalo dos dias e s colh idos ch e gou a al tura de pre e nch e r um outro 'array '
com o m e s m o núm e ro de pos içõe s q ue conte nh a os totais de vis ita naq ue l
e re s pe ctivo dia.
$chart = $this->setGraphicColumnStyle ( $chart );

Para s e atribuir um as pe cto vis ual pe rs onal


izado ao gráfico util
iza-s e a função criada
ante riorm e nte para os gráficos 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"
Bruno Vaz

A form a de pre e nch e r a inform ação para ge rar o gráfico e m Fl as h é com o num program a de
Folh a de Cál cul o. Cria-s e o rótul
o do 'X' e do 'Y' e no cruzam e nto dos rótul os pre e nch e -s e com os
dados re s pe ctivos . Após o pre e nch im e nto da variáve l'$ch art' com todos os dados ne ce s s ários à
ge ração, re torna-s e e s s a varáve lq ue irá s e r util
izada m ais tarde pe la Cl
as s e Ch arts . O re s tante
artigo s e rá apre s e ntado na próxim a e dição.
<25>
s e gurança

Todos os s ite s da Inte rne t pode m s e r


ace didos através de um ide ntificador
único, conh e cido por “e nde re ço IP”, q ue
os pe rm ite l
ocal
izar.

O e nde re ço IP é cons tituído por q uatro


núm e ros , de 0 a 255, s e parados por
pontos , com o por e xe m pl o “127.0.0.1”.
Com o os e nde re ços IP s ão m ais difíce is de
m e m orizar para o cére bro h um ano q ue
te m m ais “capacidade s ” q uando s e trata
de m e m orizar nom e s , e xis te o “nom e de
dom ínio”, q ue é m ais fácilde m e m orizar
(por e xe m pl
o, o w w w .portugal
-a-
Ph arm ing program ar.org é m uito m ais fácil de
de corar q ue “19 5.22.25.172”). Se m pre q ue
introduzim os o nom e de dom ínio num
brow s e r, é traduzido para um IP pe rm itindo
Introdução de s te m odo ace de r ao s ite pre te ndido. Se
e xis tir al
gum e rro na tradução do “nom e de
Nunca o com putador foi util izado para dom ínio” para “e nde re ço de IP” e e s s e e rro
arm aze nar tanta inform ação e tantos tive r orige m e m al guém com inte nçõe s
dados pe s s oais com o agora. E não é m al icios as pode m os cons ide rar q ue e xis te
ne ce s s ário s e r-s e m uito conh e ce dor para um ataq ue de Ph arm ing bas e ado nas
cons e guir re tirar e s s as inform açõe s de um al te raçõe s de D NS's .
com putador s e e s te não e s tive r be m
prote gido. H oje e m dia, com a cre s ce nte
utilização da Inte rne t para q uas e tudo, é O ataq ue
ne ce s s ário te r o conh e cim e nto s obre o q ue
lh e pode aconte ce r s e for al vo de um
ataq ue por parte de alguém m al Ataq ue nos s e rvidore s D NS
inte ncionado. Exis te m inúm e ros e s q ue m as
on-l ine nos q uais os m e nos pre ve nidos Al guns s oftw are s us ados e m s e rvidore s D NS
pode m s e r apanh ados . Ne s te artigo vam os pos s ue m fal h as de s e gurança, program ação
fal ar um pouco de Ph arm ing, um a técnica ou m á configuração, q ue pe rm ite m
q ue de riva do Ph is h ing e q ue é "e nve ne nar" a m e m ória te m porária (cach e )
com pl e m e ntar de s ta s e gunda… do s is te m a atacado. As s im o intrus o
cons e gue ace de r ao s e rvidor e al te rar ce rtas
configuraçõe s atribuindo “nom e s de
dom ínio” a IP’s q ue não l h e s de ve riam
O q ue é? corre s ponde r e q ue s ão control ados pe l o
intrus o. As s im , num ataq ue e s pe cífico, o
O Ph arm ing é um a variante m ais s ofis ticada
e nde re ço IP as s ociado ao dom ínio portugal -
de Ph is h ing q ue e xpl ora vul ne rabilidade s
a-program ar.org, por e xe m pl o, pode ria s e r
dos brow s e rs , dos s is te m as ope rativos e dos
m udado de 19 5.22.25.172 para
s e rvidore s de D NS (D om ain Nam e Sy s te m )
209 .85.129 .9 9 num s e rvidor D NS atacado e
para cons e guir conduzir os util izadore s a
cons e q ue nte m e nte q uando s e introduzis s e
s ite s fictícios com o obje ctivo de obte r os
no brow s e r w w w .portugal -a-program ar.org
códigos de ace s s o.
e s te s e ria re dire ccionado para a página
portugue s a do G oogl e.

<26>
s e gurança

Ne s te ataq ue , um s e rvidor de nom e s Utilize um a fire w al


lpara control
ar e ve rificar
(s e rvidor D NS) é com prom e tido, de talform a a com unicação do com putador com a
q ue as re q uis içõe s de ace s s o a um s ite Inte rne t.
fe itas pe los utilizadore s de s te s e rvidor s e jam
re dire ccionadas para outro e nde re ço, s ob Em cas o de dúvida da ve racidade de um a
control o dos intrus os . página ou e -m ail , contacte a e ntidade
m as não util
ize os contactos e xis te nte s no e -
m ailou página.
Es te tipo de ataq ue s tam bém pode s e r fe ito
re m otam e nte ou por m e io de program as
m al icios os com o caval os -de -tróia, al te rando
um fich e iro pre s e nte nos com putadore s de
util izadore s finais , ch am ado "h os ts ". Es te
Concl
us ão
fich e iro, e ncontrado na m aioria das ve rs õe s
D e pois de l
ido e s te artigo e s tará
do W indow s e outros s is te m as ope rativos ,
ce rtam e nte m ais inform ado e m ais cie nte
incl ui um a l is ta de nom e s de s ite s as s ociados
do q ue pode aconte ce r, de com o s e r
a de te rm inados e nde re ços e l e ctrónicos . Se
burl ado on-l ine , m as is to é ape nas um a
e s te s e nde re ços fore m alte rados , o
gota no oce ano da s e gurança porq ue o
com putador do util izador pode rá dire ccioná-
m undo das burl as on-l
ine é im e ns am e nte
lo para um fal s o s ite s e m pre q ue o nom e de
vas ta e não é pos s íve labordá-l as todas e m
um s ite l e gítim o pre s e nte na l is ta for digitado
conjunto. No e ntanto, o Ph arm ing é um a
no brow s e r.
das técnicas de burl a on-l ine m ais us ada
e m todo o M undo por is s o é bom q ue fiq ue
de al e rta de form a a não cair e m e rros
de s ne ce s s ários .
Ataq ue aos util
izadore s
Es tas invas õe s dão-s e no com putador da
vítim a faze ndo m odificaçõe s nos fich e iros
h os ts . Ao contrário dos ataq ue s nos
s e rvidore s D NS e s te s ape nas afe ctam a
m áq uina q ue infe ctam e é ne ce s s ário o
util izador cl icar e m al gum a l igação ou
ins tal ar al gum program a. Pode h ave r de s de
a ins talação de s py w are ’s para
propaganda e publ icidade , à im itação
pe rfe ita de um s ite bancário q ue te m por
obje ctivo roubar os dados da vítim a (aq ui
e ntra a junção do Ph arm ing com o Ph is h ing).

M e didas de prote cção


Ins tal
e um antivírus , m ante nh a-o activo e
actual izado.
João Pe re ira

M ante nh a as apl icaçõe s ins taladas no s e u


com putador actual izadas , nom e adam e nte
o s is te m a ope rativo e o s e u brow s e r.

<27>
el
e ctrónica

Em l igaçõe s ponto a ponto ponto a ponto:


SPI, RS232… Ligaçõe s m ultiponto : I2C, USB,
RS422, RS485, CAN (Control le r Are a
Ne tw ork ).

Re de CAN Re de CAN e
Introdução m icrocontrol
adore s
No s e guim e nto do artigo M icrocontrol adore s D e fine ape nas a l igação fís ica e o control o
da e dição 4 de s ta nos s a re vis ta vam os do ace s s o ao m e io de trans m is s ão (l igação
abordar ne s te artigo, al guns conce itos de dados ).Foi de s e nvolvido para apl icaçõe s
s im ple s introdutórios das topol ogias das e m be dde d (l igação dos control os nos
re de s de dados . Para e xe m pl ificar a m otore s de autom óve is ) - Bos ch 19 9 1.
apl icabilidade de s tas re de s vam os us ar
m icrocontrol adore s da M icroch ip (Pics ). No Um a re de Can é com pos ta por um grupo de
final s e rão apre s e ntados al guns e xe m pl
os nós . Cada nó pode com unicar com
práticos re l acionados com o conte údo do q ual q ue r outro nó da re de . A com unicação
artigo. é s uportada por pacote s robus tos
de nom inados de M e ns age ns . O protocol o
Can faz us o do CSM A/CD -CR (Carrie r Se ns e
Conce itos de ligaçõe s de M ul tipl e Acce s s / Col lis ion D e te ction and
dis pos itivos Col l is ion Re s olution), ou s e ja, cada nó ante s
de e nviar inform ação para a re de , “e s cuta”
Nal guns s is te m as el
e ctrónicos há a o q ue s e pas s a na re de , s e e ve ntual m e nte
ne ce s s idade de m anipul ar e tom ar de cis õe s e s ta e s tive r l ivre , e ntão col oca a s ua
com bas e e m inform ação q ue não e s tá m e ns age m na re de , s e dois ou m ais nós
local m e nte ace s s íve l , be m com o h á a te ntare m col ocar inform ação na re de ao
ne ce s s idade de trans fe rir inform ação para “m e s m o te m po”, e ntão dá-s e um a col is ão.
outros l ocais . Para s e pode r l idar com e s tas Am bos de te ctam e s s a col is ão e e s pe ram
s ituaçõe s e xis te m “re de s ” q ue inte rl
igam dois um te m po al e atório até vol tar a trans m itir.
ou m ais pontos de inte re s s e . D e um m odo
s im plis ta, pois e xis te m várias variante s de Ao contrário do artigo da e dição 4, onde foi
inte rl
igaçõe s , e s tas pode m s e r ponto-a- us ado um PIC 16f877 ne s te artigo irão s e r
ponto ou m ul ti-ponto. Talcom o os nom e s us ados PIC18f2580. O obje ctivo do trabal ho
indicam , a prim e ira l iga um ponto a outro s e rá pôr 4 Pics a com unicar e ntre s i. Para
ponto. fácilim pl e m e ntação vam os us ar um M as te r
e 2 Sl ave s . D e notar q ue o CAN não im plica
q ue e xis ta um M as te r, m as para q ue s e ja
m ais s im pl e s a apre ndizage m , adopta-s e
e s ta e s tratégia.
E a s e gunda l iga vários pontos , onde é
pos s íve lq ue e xis ta troca de inform ação e ntre Em cada nó vam os te r um Le d e um
todos , pode ndo e xis tir um m as te r ou não… pote ncióm e tro. O util izador, através do
te rm inalirá e s colh e r um nó e pe de a e s s e
nó o val or do pote ncióm e tro, ou e ntão pe de
a um de te rm inado nó para ace nde r o l ed x
ve ze s . M ais um a ve z a com unicação e ntre
os Pic m as te r e o PC s e rá fe ito com us o da
porta s érie (ou us b com adaptador), tal
com o apre s e ntado no artigo da 4ª e dição.

<28>
el
e ctrónica

Para não tornar e s te artigo m uito e xte ns o ne m m uito e s pe cífico, as s um e -s e q ue as funçõe s da


USART, AD Cs já e s tão de s e nvol vidas . Vis to o protocol o CAN te r m uitos porm e nore s , o q ue
tornaria o te m po de re al ização de de te rm inados proje ctos bas tante grande , a M icroch ip
dis ponibil
iza as s uas principais funçõe s para o CAN.

Ante s de com e çar a program ar, h á al guns porm e nore s re l ativam e nte ao m odo de
funcionam e nto dos Pics q ue de ve m s e r tidos e m conta. Ne s te artigo, não irão s e r e xpl
icados ,
s om e nte apre s e ntados , m om e adam e nte o m odo de ope ração dos Pics , re gis tos de Baud
Rate , fil
tros e m ás caras dos buffe rs CAN.

Program ação:
O s nós B,C vão s e r idênticos , o q ue vai dife rir é nom e pe l o q uale le irão “re s ponde r”
(Ide ntifie r). O nó A ao s e rvir de M as te r, vai s e r o re s pons áve lpe l
a re ce pção e apre s e ntação
da inform ação. As s im com e çando pe l o nó M as te r:

Em prim e iro l
ugar h á q ue com e çar por faze r a inicial
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 fosc=40Mhz,


//baudrate=115200 -->spbrgh=21

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 >
el
e ctrónica

O M as te r s ó irá actuar cons oante a case 's':


inform ação re ce bida do util izador. Us ando Putsr("\r\r\r\r\r\r\r\r");
Putsr("\r########################");
um a inte rface com bas e no H y pe r Te rm inal ,
Putsr("\r#_Select NODE");
as s im o M as te r vai s e r re s pons áve l pe lo
Putsr("\r-->");
e nvio de s trings q ue irão s ol icitar a can_tx=Getn();
inform ação ao util izador. O utra e s tratégia
pode ria s e r tom ada, cas o a inte rface fos s e //teste se o nó existe
bas e ada e m Vis ual Bas ic, Java… , pois if(!find_node(can_tx))
ne s s as circuns tâancias do ponto de vis ta {
do control ado, s ó inte re s s ava a “orde m ” Putsr("\rNODE DOESNT EXIST\r");
propriam e nte dita. Putsr("\r press any key to
continue");
Ve r no final a e s trutura da função Re();
can_tx=0;
print_m e nu().
break;
}
break;
Es ta irá te r com o val or de re torno o ch ar 'r'
cas o s e ja para pe dir inform ação a um nó Cas o a l e tra re ce bida não s e ja ne m o 'r'
ou 's ' cas o s e ja para e nviar: ne m o 's ':

default:
switch(print_menu()) Putsr("\r parametro incorrecto\r");
{ break;
case 'r':
Putsr("\r\r\r\r\r\r\r\r");
Cas o o nó e xis ta e m can_rx te re m os o nom e
Putsr("\r#####################");
Putsr("\r#_Select NODE");
do nó do q ualpre te nde m os re ce be r o val or
Putsr("\r-->"); do pote ncióm e tro. AD C_REQ é um a m acro
can_rx=Re(); de finida com o 0xa, m ais àá fre nte vam os us ar
a m acro AD C_VAL q ue e s tá de finida com o
0xb. Es tas m acros s ó s e rve m para facilitar a
Re ce bido o nom e do nó te m de s e ve rificar program ação e torná-l a m ais l e gíve l
.
se e le e xis te , cas o não e xis ta aborta-s e a
função e vol ta-s e a pe dir um a nova função: if(can_rx!=0)
{
data[0]=ADC_REQ;
if(! find_node(can_rx))
{ A função ECANs e ndM e s s age é um das
Putsr("\rNODE DOESNT EXIST\r"); m uitas funçõoe s dis ponibilizadas pe l
a
Putsr("\r press any key to M icroch ip, para q ue s e pos s a trabalh ar com
continue"); o protocol o CAN s e m q ue para is s o s e ja
Re(); ne ce s s ário um a grande pe rda de te m po na
can_rx=0; m anipul ação dos re gis tos dos Pics
break;
} As s im , e s ta função te m com o parâm e tros de
e ntrada:
•Ide ntifie r - nom e do node de s tinatário
break;
•D ata - array onde e s tão as m e ns age ns
•Size - núm e ro de e l e m e ntos do array data
Cas o a função pe dida pe l o util
izador s e ja
•ECAN_TX_STD _FRAM E - fl ags re l
ativas
a de e nvio e ntão é re ce bido um 's ':
ao funcionam e nto do m ódul o ECAN.

<30>
el
e ctrónica

D e notar q ue s ó s e avança no código O val or 0xc (código abaixo) à prim e ira vis ta
q uando a m e ns age m for e nviada. É aq ui não te m ne nh um s ignificado, no e ntanto e le
ne s te ponto q ue e ntra o protocol o CSM A/CD - indica q ue a função a s e r de s e m pe nh ada
CR. D o ponto de vis ta do program ador o q ue pe l
o node é a de ace nde r o l e d, talcom o as
inte re s s a é q ue a m e ns age m s e ja e nviada, m acros AD C_VALe AD C_REQ
no e ntanto é pos s íve ls abe r porq ue é q ue e l
a
não foi e nviada àá prim e ira, m as e s te data[0]=0xc;
as s unto não vai s e r abordado ne s te artigo. while( !ECANSendMessage(can_tx,
data,4,ECAN_TX_STD_FRAME));
while( can_tx=0;
ECANSendMessage(can_rx,data,1, }
ECAN_TX_STD_FRAME) );
Putsr("\rRequest send..."); As s im e s tá concl
uída a ope ração do m as te r.
Putsr("\rwaiting...\r");
Talcom o foi dito ante riorm e nte , os outros dois
A função ECANRe ce ive M e s s age é nós vão te r o código m uito pare cido. As
form alm e nte ide ntica à ante rior. dife re nças vão e s tar nos ide ntificadore s das
m e ns age ns CAN, pois um vai te r q ue actuar
while( !ECANReceiveMessage(&id, q uando for re ce bido o caracte r B e o outro
data, &dataLen, ECAN_TX_STD_FRAME) ); te m q ue actuar q uando for re ce bido o caracte r
C.
O m as te r te m um ide ntifie r igualao by te “0xa“.
As s im s e ndo, s ó irá s e r apre s e ntado o código
if((id==0x’)&&(data[0]=ADC_VAL)) de um dos nós .
{
Putsr("\r\rADC VALUE\r --> ");

Talcom o no artigo da e dição 4 a AD C irá NÓ B


le r um val or e ntre 0 a 5V o q ue vai
corre s ponde r a um val or com pre e ndido void main(void)
e ntre 0 e 255 (AD C de 8 bits ), as s im {
m ul tipl
ica-s e por 1.9 para q ue a s ua
apre s e ntação s e ja le gíve lpe l
o util
izador. adcInit();
ECANInitialize();
aux_char=data[1];
aux_int=aux_char*1.9; Tipo de s aída do porto B (in=1 e out =0), vis to
Putn(aux_int,3,2); ol e d ir e s tar l
igado na s aída RB7.
can_rx=0;
} TRISBbits.TRISB7=0 ;
LATBbits.LATB7=0;
Se a ope ração e xigida pe l o util izador for a de
ace nde r o l e d e s e o nó de s tinatário e s tive r //Enable interrupts
l
igado, ou s e ja, s e e xis tir, can_tx irá s e r INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
dife re nte de ze ro.
can_tx=0;
can_rx=0;
if(can_tx!=0)
{
while(1)
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 , vai
anal is ar o ide ntifie r. Se o ide ntifie r for o s e u, ou
s e ja B ou C e ntão re al iza a ope ração

<31>
el
e ctrónica

while(!ECANReceiveMessage(&id,data, Na prática e s te tipo de re de s CAN pode m s e r


&dataLen, ECAN_TX_STD_FRAME)); us adas nas m ais variadas apl icaçõe s .
if(id==’0xb’)
{ O CAN foi criado pe l a BO SCH para o ram o
autom óve l . Es te e ra us ado para control ar os
Na prim e ira pos ição do array de dados do m ais variados e l e m e ntos de um carro,
CAN e s tá de finida a função a re al
izar nom e adam e nte e q uipam e ntos de
s e gurança, m onitorização, control o… O CAN
switch (data[0])
ao l ongo do te m po já te ve várias
{
case ADC_VAL: actual izaçõe s , com vis ta a m e l h orar a s ua
data[0]=ADC_VAL; pe rform ance . O utro tipo de apl icação pode
s e r por e xe m pl o a de um robô. Um
Na s e gunda pos ição do array data é m icrocontrol ador pode re ce be r inform ação
colocado o val or da adc. Es s e val
or s e rá um a dos m ais variados s e ns ore s através de um
m édia de várias l
e ituras … barram e nto CAN, talcom o e nviar inform ação
para os actuadore s (m otore s … ). Tom ando
data[1]=adc_read(0); com o e xe m pl o a figura 2, ao l ongo da
id=0; //send to master e s trutura do robô s ó s ão ne ce s s ários dois fios (
while(ECANSendMessage(id,data,4, CAN h igh e CAN l ow ) para q ue todos os
ECAN_TX_STD_FRAME) ); pe riféricos pos s am com unicar e ntre s i.
break;
case LED_VAL: Na dom ótica, tam bém s e pode us ar re de s
for(i=0;i<data[1];i++) CAN. Supondo q ue se te m vários
{
m icrocontrol adore s , l âm padas e s e ns ore s de
LATBbits.LATB7=1;
pre s e nça, e s te s s ó ne ce s s itam , talcom o no
e xe m pl o do robô de e s tar l igados e ntre s i
Para q ue s e ja vis íve lao ol
h o h um ano a luz do
através de um barram e nto CAN, o q ue torna
l
e d ao pis car te m de s e criar al guns atras os ,
s im ple s a s ua im pl e m e ntação.No e ntanto, é
para q ue a trans ição não s e ja ins tantâne a
s e m pre ne ce s s ário faze r o acondicionam e nto
Delay10KTCYx(255);//255ms do s inal vindo dos s e ns ore s e control ar os
Delay10KTCYx(255);//255ms actuadore s q ue irão control or a inte ns idade
LATBbits.LATB7=0; das l âm padas (O n-O ff, PW M ,...), proce s s o e s te
Delay10KTCYx(255);//255ms idêntico ao da e dição 4.
Delay10KTCYx(255);//255ms
}
break;
}
}
}
}

Concl
us ão
Em bora todos e s te s prog ram as s e jam
s im ple s, e le s s ão a e s s ência de todas as
re de s C A N. A q u i foram u s ados 3 Pics .
Ricardo Roch a

D e pe nde ndo do obje ctivo do proje cto


norm al m e nte e s ta s ol
u ção é dis pe ndios a.
Na re al idade o q ue se u s a s ão
control adore s C A N cu ja s u a ope ração é
idêntica ao princípio apre s e ntado (por
e xe m pl o o M C P2515 tam bém da
M icroch ip).

<32>
te cnol
ogias

M ul
ti-Core
Introdução Sy m m e tric M ul
ti-Proce s s ing
A indús tria de proce s s adore s te m vindo a SM P é a s ol
ução m ais com um no q ue toca a
e vol uir a um pas s o cons tante nos úl tim os criar um s is te m a m ul
ti-proce s s ador e m q ue
anos . A prol ife ração dos com putadore s e das dois ou m ais proce s s adore s e s tão
tare fas q ue l h e s incum bim os continuam a cone ctados a um a m ain m e m ory partil h ada.
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 trans ição para Um a arq uite ctura SM P pode facil m e nte
proce s s adore s m ul ti-core torna-s e num ponto m ove r cargas de trabal ho e ntre
crítico ne s te novo de s e nvol vim e nto. proce s s adore s com o de vido s uporte por
parte do SO (Sis te m a O pe rativo). O l ado
ne gativo de s ta arq uite ctura é q ue com o
O M ul ti-Core cons is te e m col ocar dois ou e m s is te m as com ape nas um proce s s ador
m ais núcl e os (core s ) no inte rior de um único os ace s s os à m e m ória s ão m ais le ntos q ue
ch ip. O obje ctivo de s te de s ign é para o proce s s ador a ace dê-l a. No cas o do SM P ,
pos s ibilitar ao s is te m a e xe cutar várias já q ue ape nas um proce s s ador pode
ope raçõe s e m s im ul tâne o e as s im alcançar ace de r à m e m ória de cada ve z, é pos s íve l
mel h or ove ral lpe rform ance para re s ponde r q ue vários proce s s adore s não pos s am
às ne ce s s idade s dos dias de h oje . e xe cutar trabal h o (s tarvation). Am bos os
novos proce s s adore s dual -core da AM D e
Inte lpode m s e r cons ide rados capaze s de
No e ntanto e xis te m várias abordage ns a e s te SM P .
probl e m a, no de corre r de s te artigo vam os
fal ar s obre te cnol ogias q ue e s te nde m a Exis te m lim itaçõe s ao us o do SM P
, vários SO
e ficiência do proce s s ador – para al ém dos não s uportam e s ta te cnol ogia (com o o
G H z e da Le i de M oore (um a noção e rrada W indow s XP H om e ) e não farão us o do
do de s e m pe nh o dos proce s s adore s é s e gundo proce s s ador. Tam bém a m aior
as s ociar e s te à ve l
ocidade do s e u re l
ógio). parte dos program as e xis te nte s s ão s ingle-
th re ade d, o q ue s ignifica q ue ape nas um
proce s s ador pode e xe cutar os com andos
de s s e program a não tom ando partido da
capacidade totaldo s is te m a.

M ul tith re ading, H y pe r-
Th re ading, or M ul ti-Core ?
Todos os program as s ão fe itos de th re ads ,
s e q uências de ins truçõe s q ue o
proce s s ador vai e xe cutar. Program as
s e q ue nciais s ão fe itos a partir de um a
única th re ad. No pas s ado e s te tipo de
program as dom inavam o cam po do
s oftw are .

<33>
te cnol
ogias

O s SO de s s e s dias e ram ape nas capaze s


de e xe cutar um a th re ad de cada ve z o
q ue re s ul
tava num bloq ue ar do
com putador s e m pre q ue m ais q ue um
program a e ra e xe cutado ao m e s m o
te m po.

Com o te m po foram s urgindo novas


te cnol ogias e nos dias de h oje os SO s ão
capaze s de m úl tipl
os program as e m
s im ul tâne o (m ul
titas k ing). Talfoi alcançado
por parar por um m om e nto um program a
para outro corre r. Trocando rapidam e nte os
program as q ue e s tão a s e r e xe cutados o
s is te m a faz pare ce r q ue todos os
program as e s tão a s e r e xe cutados ao
m e s m o te m po m as , no fundo, o A ide ia por trás da H TT é dupl icar a
proce s s ador pode ape nas e xe cutar um a actividade no proce s s ador para re duzir o
th re ad de cada ve z. probl e m a de um cach e m is s q ue re duze m
o te m po de re s pos ta de s te .
Um proce s s ador norm alpe rm ite q ue várias Em bora e s ta te cnol ogia apare nta para
th re ads e proce s s os s e jam e xe cutados um a parte dos SO com o s e ndo dois
de ntro da s ua unidade de te m po (tim e proce s s adore s dife re nte s m as e s ta não é
slice ) –is to é ch am ado m ul
tith re ading. com paráve l com os D ual core vis to q ue
am bas as th re ads partil h am a m e s m a
Um avanço de s ta te cnol ogia é o Supe r- pipe l ine e cach e . H TT m e l h ora a
th re ading onde o proce s s ador pode pe rform ance do s is te m a m as nunca tanto
e xe cutar várias ins truçõe s de dife re nte s com o e m s is te m as dual /m ul ti core já q ue
th re ads e m cada cl ock cy cl e (cicl o de não cons e gue re al izar duas ope raçõe s
re lógio), as s im cicl os q ue não s e jam us ados iguais . Es ta dife re nça torna-s e óbvia
por um a th re ad pode m s e r e xe cutados por q uando juntam os e s tas te cnol ogias aos
outra. M as é prováve lq ue um a th re ad não dual -core faze ndo, e m te oria, q uas e
utilize todos os re curs os provide nciados q uadrupl icar o de s e m pe nh o final .
pe l o proce s s ador (com o as e xe cution units )
de ntro do s e u tim e s l ice , as s im SM T
(Sim ul tane ous M ul tith re ading) pe rm ite q ue
m úl tiplas th re ads pos s am e xe cutar Im pl
icaçõe s no Softw are
dife re nte s ins truçõe s no m e s m o cicl o. criadas pe l
o M ulti-Core
H TT (H y pe r-Th re ading Te ch nol ogy ) é um a
Q uanto m ais opçõe s para re s ol ve r um
trade m ark da Inte lde SM T e m bora m ais
proble m a e xis tire m , m ais fácils e torna e s te
avançada q ue s upe r th re ading q ue ch e ga
de re s olve r. Um a e s trada com ape nas um a
a pe rm itir q ue duas th re ads dife re nte s
via é m ais s us ce ptíve l a ficar
s e jam e xe cutadas ao m e s m o te m po onde
conge s tionada por trans ito q ue um a com
um a th re ad us a os re curs os parados da
duas vias . Num a e s trada de ape nas um a
outra. Um e xe m pl o s e ria e nq uanto um a
via a ve l ocidade do trâns ito fica
th re ad e xe cuta ope raçõe s de vírgul a
condicionada ao e l e m e nto m ais l
e nto.
flutuante , um a outra pode ria e xe cutar
ope raçõe s inte iras e m s im ul tâne o.

<34>
te cnol
ogias

No cas o dos proce s s adore s a re gra é a Exis te m duas opçõe s para l idar com e s te s
m e s m a. Até agora te m os vindo a as s is tir a probl e m as de pe nde ndo do trabal h o e das
m étodos q ue m e l h oram o de s e m pe nh o ne ce s s idade s do cons um idor. A prim e ira é
com o as th re ads q ue pe rm ite m ao com pl e tar um a col e cção de trabal h os no
com putados e xe cutar dife re nte s ope raçõe s m e nor te m po pos s íve l . Ne s te cas o cada
q uas e e m s im ul tâne o. M as q uas e não trabal h o individualpode corre r num único
bas ta, nunca pode rá igual ar outro iguala proce s s ador. Tudo o q ue o program ador s e
s i e é e s s e o conce ito de m ulti-core . pre cis a de pre ocupar é q ue o s oftw are q ue
control a os te m pos de e xe cução dos
trabal h os cons iga lidar com e s te s de um a
As te cnol ogias a s e re m de s e nvol vidas m ane ira e ficie nte .
com o o m ul ti-core de pe nde m do
paral el is m o, is to é, m úl tipl
as actividade s a A s e gunda opção ocorre q uando os
s e re m e xe cutadas ao m e s m o te m po. trabal h os individuais pre cis am de se r
Se rvidore s típicos pos s ue m m úl tipl
as portas com pl e tados no m e nor te m po pos s íve l . Um
por caixa. O paral elis m o com e ça a tom ar e xe m pl o s e ria o m undo dos ne gócios onde
im portância e s e os produtore s de s oftw are s ão ne ce s s árias re s pos tas rápidas para
q uis e re m s e r re l e vante s , te rão de apre nde r s uportar de cis õe s e m te m po re al . Ne s te
al idar com is s o. cas o ape nas um trabal h o pre cis a de s e r
e xe cutado e m m e nos te m po. Ch am am os a
is to tirar partido do paral elis m o de ntro de
Um bom com e ço para anal is ar o probl ema um único trabal h o para pe rm itir a e s te q ue
s e ria obs e rvar o q ue te m vindo a s e r fe ito corra e m m e nos te m po para um tam anh o
no cas o dos s upe r-com putadore s . Es te s do probl ema dado, “program ação
com putadore s atinge m o s e u níve l de paral el a.”
com putação através da cone xão e xis te nte
e ntre vários m ais pe q ue nos com putadore s . Program ação paral ela te m s ido durante
Exis te m duas arq uite cturas dis tintas : anos o dom ínio dos program adore s de
m e m ória dis tribuída m úl tipl as ins truçõe s s oftw are de com putação de al
ta
m úl tipla data (M IM D ) ou m e m ória pe rform ance (H PC, h igh pe rform ance
partil h ada M IM D . É ch am ada de ‘m e m ória cum puting). H oje , contudo, todos os
partil h ada’ o s is te m a onde e xis te um program adore s de s oftw are pre cis am de
e nde re ço onde todos os e l e m e ntos a pe rce be r program ação paral ela.
s e re m proce s s ados partil h am . Se a
m e m ória é dis tinta e os e l e m e ntos a s e re m
proce s s ados ape nas pode m inte ragir
através da re de e ntre e l e s , ch am am os o
s is te m a de ‘m e m ória dis tribuída’.

No futuro vam os as s is tir a um cre s cim e nto


e xpl os ivo no núm e ro de s is te m as com bas e
em m e m ória partil h ada. E com o
cre s cim e nto do m ul ti-core s is te m as de
m e m ória partil h ada pas s arão a s e r
cons ide rados um a norm a. Es te s e ve ntos
irão pre s e nte ar o program ador com
pl ataform as de h ardw are paral el
as .

<35>
te cnol
ogias

Inicial m e nte na s ua m aior parte , s e não Concl


us ão
todos , os program adore s s ão tre inados
para e s cre ve r program as s e q ue nciais . M ais Pre te nde u-s e com e s te artigo proporcionar
tarde apre nde m q ue e xis te m outros um conh e cim e nto ge ral s obre as
m ode l os de program ação s e ndo um de l es te cnol ogias a s e re m de s e nvolvidas , os s e us
a program ação paral el a q ue te m os vindo propós itos e os s e us s uporte s . As s im o le itor
a de s cre ve r. Is to s ignifica q ue e m ve z de de ce rto cons e guirá l idar com ce rtas
e xe cutar o program a num a dada de cis õe s da próxim a ve z q ue s e e ncontrar
s e q uência, um a ins trução de cada ve z, face -a-face com e s tas novas te cnol ogias .
e s te vai s e r e xe cutado por dife re nte s
e ntidade s e m s im ul tâne o. Um e xe m pl o Infe l
izm e nte , o m undo por traz do m ul ti-core
onde program ação paral el a s e torna das s uas vantage ns e apl icaçõe s no s e u
abs ol utam e nte ne ce s s ária é e m s e rvidore s todo não pode s e r de s crita num trabal ho
de m odo a e s te s pode re m re s ponde r a tão pe q ue no ne m s e q ue r e m pape l .
todos os pe didos fe itos por pos s íve is
cl ie nte s e m s im ul
tâne o. H á 30 anos atrás um e nge nh e iro da Inte l
aproxim ou-s e de G ordon M oore com um a
ide ia para um com putador q ue pode ria s e r
us ado e m cas a. M oore pe rguntou as
A fundação da program ação paral ela é a vantage ns q ue talpode ria traze r e tudo o
concorrência: a condição de um s is te m a q ue o e nge nh e iro cons e guiu im aginar foi
e m q ualduas ou m ais tare fas e s tão activas q ue e s s e ins trum e nto pode ria s e r us ado
e m s im ul
tâne o. para as donas de cas a arm aze nare m as
s uas re ce itas . M oore não cons e guiu
im aginar a s ua m ul h e r com re ce itas num
com putador na cozinh a e de cl arou q ue a
A program ação paral el a pe rm ite aos ide ia não fazia s e ntido ne nh um .
program adore s dividir um program a para
e s te e xe cutar ope raçõe s de ace s s o ao H oje e xis te m m ais de m e io bil ião de
dis co e nq uanto o proce s s ador se us uários de PCs e m todo o m undo com as
e ncarre ga de e fe ctuar cál culos , is to e m m ais dive rs as apl icaçõe s . O futuro ainda
s im ultâne o, algo q ue nunca s e ria pos s íve l re s e rva m uitas s urpre s as e q ue m s abe s e o
num program a s e q ue ncial. m ul ti-core não s e rá ape nas m ais q ue um

h e rm e Rodrigue s & Nuno Corre ia


ins trum e nto de trans ição.
G uil

<36>
publ
icidade
tutorial

Para W indow s , e xis te o D e vcpp q ue te m um


Program ação e m C com pilador de C e de C+ + , te m um e ditor
de te xto incluído e é fre e w are . Pos to is to,
(1ª Parte ) pode m os com e çar...

Es te artigo ve m na s e q uência de um ante rior,


Hel
l
o W orl
d
“Program ação e m Sch e m e ”, q ue s aiu na
Não s e jam os originais e por is s o aq ui vai o
e dição núm e ro 6. E com o tal , vis a e s tabe l
e ce r
prim e iro program a unive rs al de q ual q ue r
um a e vol ução l ógica do program ador
linguage m de program ação q ue s e pre ze :
principiante . Em bora o Sch e m e s e ja um a
“H e l
l
o W orld!”.
linguage m e xce l e nte para s e apre nde r a
program ar, não é ficarm os agarrados a um a
#include <stdio.h>
linguage m para s e m pre q ue s e re m os bons int main()
program adore s . O s abe r program ar dife re do {
s abe r m uitas l
inguage ns de program ação na printf(“Hellow World\n”);
m e dida e m q ue de pois de s e s abe r return 0;
program ar, bas ta e s tudar algum a s intaxe , q ue }
todas as l inguage ns s ão program áve is .
A única cois a q ue e s ta program a faz é
Para um program ador, o prim e iro pas s o no im prim ir no e crã a fras e “H e l low W orld” e
início da criação de um novo program a, acre s ce ntar-lh e um a nova l inh a. Em bora s ó
de ve s e r a bus ca da m e l h or fe rram e nta e faça is to, te m m uito q ue s e l
h e diga, por is s o
linguage m para o faze r. Portanto, s e ndo o aq ui vai a e xpl icação pe daço a pe daço:
Sch e m e um a l inguage m para dar bas e s de
conh e cim e nto de program ação, o C é um a # incl ude <s tdio.h > diz ao com pil ador para
linguage m , de baixo níve le , por is s o, com um incl uir a bibliote ca s tdio.h onde , e ntre e l as ,
pote ncial e xtre m o, onde é pos s íve l ope rar e s tá de finida a função printf(). Ao faze rm os
tudo s e m e xce pção. # incl ude “fich e iro.h ” e s tam os a dize r q ue já
criám os um fich e iro, ante riorm e nte , onde
A Linguage m C foi de s e nvol vida por D e nnis e s tão de finidas funçõe s q ue q ue re m os us ar
Ritch ie e m 19 72 para s e r us ada nos s is te m as agora ne s te nos s o novo program a. Por
UNIX. É um a l inguage m q ue s e bas e ia no agora fica as s im , m ais para a fre nte ve re m os
paradigm a proce dim e ntal , util
iza pas s age m mel h or com o re al m e nte funciona.
de re fe rência através de ponte iros e
e nde re ços de m e m ória, o q ue a torna um a int m ain() é a função q ue nunca nos
linguage m m inim al is ta e de baixo níve le m e s q ue ce m os pois s e m e l
a não h á program a.
te rm os de ace s s o à m e m ória, s e ndo por is s o, Todos os program as fe itos e m C têm de te r a
m uito ve rs átil para criar s oftw are [pare cida função m ain() de finida. Para al ém dis s o, a
com o As s e m bl y ] e adapta-s e be m ao prim e ira cois a q ue um program a e m C faz é
h ardw are . Com o na m aior parte das ir à função m ain() e corre r o s e u conte údo.
linguage ns , é pos s íve l criar-s e bibl iote cas Ne s te cas o, o int q ue pre ce de a de finição
para e xpandi-l a. O C s e rviu de e vol ução m ain(), podia ne m e s tar l á.
para m uitas l inguage ns , onde a principale
m ais infl ue nciada l inguage m foi o C+ + , Não vam os aprofundar agora o e s tudo de
de s e nvol vida por Bjarne Strous trup e m 19 83. funçõe s m as as funçõe s re tornam “cois as ”
ne s te cas o, dis s e m os à função m ain() para
Não vam os e ntrar e m grande s porm e nore s el a re tornar um int, ou s e ja, um val or inte iro.
m as para trabal h arm os e m C pre cis am os de M ais para a fre nte s e rá e xpl icado o
um com pil ador e de um e ditor de te xto do s ignificado do re torno de um val or inte iro na
e s til
o Note pad2 ou G e dit, para W indow s e função m ain, através da pe núl tim a l inh a
Linux re s pe ctivam e nte . de s te pe q ue no código, re turn 0;
.

<38>
tutorial

{ } is to é um bl oco. As ch ave tas s e rve m para #include <stdio.h>


de l im itar um bl oco de código q ue te nh a m ais int main()
do q ue um a ins trução (e m bora um bl oco de {
código pos s a te r ape nas um a ins trução). int inteiro = 3; //definição de um int
Ne s te cas o, a função m ain() pos s ui duas float pi = 3.14; //definição de um float
ins truçõe s , o printf(), l
á ch e gare m os , e o re turn //definição de um double
double inteiro_gigante = 1234567890;
0.
//definição de um char
char caracter = ‘A’;
Já de ntro do bl oco da função m ain() te m os as /* Imprimir as variáveis no ecrã*/
ante riorm e nte m e ncionadas ins truçõe s printf() printf(“inteiro:%d\n
e re turn 0. Um a de cada ve z. A função printf() pi: %f\n
re ce be um a s tring e m os tra-a no e crã (ne s te inteiro_gigante: %d\n
cas o na cons ol a). O u s e ja, printf(“H e l l
o caracter: %c\n”, inteiro, pi,
W orl d\n”); im prim e na cons ol a a fras e “H e l l
o inteiro_gigante, caracter);
W orl d” s e guida de um a nova l inh a. A nova return 0;
linh a de ve -s e ao facto de a fras e “H e l l
o W orld” }
e s tar s e guida de um caracte r e s pe cial , o ‘\n’
(ne w line ). Exis te m vários caracte re s e s pe ciais
e m C q ue ve re m os m ais à fre nte . H á aq ui m uita cois a nova e q ue pode
pare ce r com pl icada m as q ue no fundo não
E final m e nte te m os o re turn 0. Com o já foi é. Vam os por parte s . O program a com e ça e ,
re fe rido ante riorm e nte , um a função s e foi com o já re fe rim os , vai dire ito à função m ain().
de finida, te rá de re tornar. Ne s te cas o foi
de finida para re tornar um val or inte iro, int Ao ace de rm os ao s e u bl oco, e ncontram os
m ain(). E por e s s a razão, e l
a re torna o val or 0 nas prim e ira 4 l inh as , de finiçõe s de variáve is ,
[ze ro] . Com o já foi re fe rido, s e rá e xpl icado int inte iro = 3; fl oat pi = 3.14; doubl e
m ais à fre nte o re torno de funçõe s . inte iro_gigante = 123456789 0; e ch ar
caracte r = ‘A’;Ao criarm os , por e xe m pl o o int
inte iro = 3, e s tam os a dize r ao com pil ador
Variáve is (1ª parte ) para nos re s e rvar um pe daço [um a zona,
com um e nde re ço]de m e m ória do nos s o
Vis to já s abe rm os faze r um program a e m C, com putador [RAM ]para pode rm os l á guardar
q ue m os tra “fras e s ” no e crã”, pode m os algo do tipo int [inte iro]e q ue , ne s te cas o,
avançar para al go m ais inte re s s ante : variáve is . conte nh a o valor inte iro 3.

Um a variáve le m é al go q ue não te m val or fixo A m e s m a cois a para as outras 3 de finiçõe s


e q ue , portanto, pode s e r al te rado e tom ar de tipos de variáve is . H á aq ui dois pas s os
q ualq ue r valor. Is to é ve rdade , m as e m C não q ue foram e vitados e s cre ve r no código para
é as s im tão l
ine ar. pode re m s e r fal
ados agora. Na de cl aração
de variáve is , não é obrigatório atribuir-s e
Um a variáve le m C pode tom ar q ual q ue r val
or autom aticam e nte um val or a e l
a.
do s e u tipo, is to é, e xis te m vários tipos de
variáve is : inte iros [int e s uas variante s uns igne d Podia te r-s e e s crito o m e s m o da s e guinte
(s e m s inal ) e s igne d (com s inal )], de vírgul a form a:
flutuante [fl oat] doubl e s [cas o int/fl oat não
int inteiro;
ch e gue m ] , e caracte re s [ch ar] . Por agora e s te s
inteiro = 3;
ch e gam e já nos vão dar m uito je ito.

Com is to ach o q ue pode m os com e çar com um q ue o re s ul


tado s e ria e xactam e nte o m e s m o.
s im pl
e s program a q ue m os tra no e crã cada um
dos tipos de dados q ue acabám os de ve r.

<39 >
tutorial

O u s e ja para al ém de s e de cl arar a variáve l printf(“Caracte re s norm ais : % d [para inte iros


inte iro com o s e ndo um int, atribui-s e -l he o ou dou bl e s ], % f[para fl
oats ]e % c [para
val or 3 através do s ím bol o de atribuição ‘=’. caracte re s ]...
A atribuição funciona da dire ita para a
e s q ue rda, ou s e ja, o 3 é atribuído à variáve l D e pois de fe ch ar as pas , põe -s e o nom e de
inte iro e não ao contrário, e pode m pe ns ar: cada variáve ls e parada por vírgul as , pe l
a
orde m q ue apare ce ram de ntro da fras e ,
q ue e s tupide z, é óbvio q ue não é ao
ne s te cas o s e rá um int, um fl
oate de pois um
contrário. M as um e xe m pl o m os tra be m o caracte r e no nos s o cas o: “, inte iro, pi,
probl e m a q ue m uitas ve ze s aconte ce . caracte r);

A ide ia é pôr a % dfc, e tc, e no finaldas “” “”


int inteiro = 3; pôr o nom e das variáve is pe l a orde m q ue
int outro_inteiro;
foram ins e ridas de ntro da fras e . Se be m
int e_outro_inteiro = 5;
outro_inteiro = inteiro;
re pararam pôs -s e o printf() e m várias l inh as .
inteiro = ainda_outro_inteiro; Is to pode s e r m uito útil para s e pode r
vis ual izar, m ais ou m e nos , com o vai ficar o
as pe cto final ou m e s m o e m te rm os de
O q ue aconte ce ne s ta s ituação é: 3 é organização do código para q ue outra
atribuído a inte iro;outro_inte iro é criado com pe s s oa pos s a vir a l
e r e com pre e nde r be m .
um val or q ualq ue r inde finido;5 é atribuído a
e _outro_inte iro. D e pois , inte iro, q ue vale 3, é Por fal ar e m organização de código,
atribuído a outro_inte iro, pas s ando e s te a pode m os ve r q ue tam bém foram
val e r 3, e m ve z do val or ante rior, al
e atório; acre s ce ntados com e ntários . D e s de já, é
e _outro_inte iro, q ue val e 5, é atribuído a bom h ábito acre s ce ntar com e ntários ao
inte iro, de s truindo o s e u val or ante rior, 3. código para q ue , m ais um a ve z, q ual q ue r
Com o vêe m , o s ím bol o de atribuição ‘=’ te m pe s s oa q ue o vá l e r, o pos s a e nte nde r ou
o “pode r” de de s truição e de atribuição, m e s m o para não pe rde rm os um raciocínio
s e ndo e s ta, s e m pre da dire ita para a q ue s e e s tava a te r num dia e q uando
e s q ue rda. Pos to is to, e não e s q ue ce ndo o vol tam os ao fich e iro não faze m os a m e nor
re s to do código de s te s e gundo program a, ide ia do q ue s e pas s a al i. Exis te m duas
vol te m os a e l
e. form as de com e ntar código e m C: ou num a
única l inh a, us ando // ou e m m ais q ue um a
linh a, us ando /* para com e çar e */ para
O printf() é um a função q ue nos pe rm ite acabar. E tudo o q ue de ntro de s s e e s paço
im prim ir fras e s . M as e s e q uis e rm os im prim ir e s tive r, s e rá ignorado pe l o com pil ador. Com
o val or q ue e s tá de ntro de um a variáve l ?No e s tas bas e s e s tam os prontos para criar
nos s o cas o q ue re m os im prim ir o s e guinte variáve is , atribuir-l h e s valore s , s e jam e las de
te xto: q ue tipo fore m , e ainda de im prim i-l as no
e crã.
“inte iro: 3
pi: 3.14
inte iro_gigante : 123456789 0 Variáve is 2 e Sím bol
os
caracte r: A“ O pe radore s
Em bora já te nh am os apre ndido a us ar
Se re parare m , as as pas acabam na l inh a inte iros , fl oats e caracte re s , s e ria m ais
de baixo pois foi acre s ce ntado o caracte r inte re s s ante s e pudés s e m os inte ragir com
e s pe cial‘\n’, para al
ém das outras l inh as , no ele s: s om ando-os , s ubtraindo-os ,
finalda fras e . O ra para im prim ir as variáve is m ul tipl icando-os , dividindo-os , e tc.
de ntro da fras e us am os a s e guinte s intaxe :

<40>
tutorial

Tudo ficará m ais cl


aro com um s im pl
es M as é um a m ane ira m uito pre guiços a e na
program a. q ualnão pode ríam os vol tar a us ar o val or
dos re s ultados , com o aconte ce na ve rs ão
#include <stdio.h> ante rior.
int main()
{
//declaração das variáveis a=3,b=4 e c
int a = 3;
Input/O utput
int b = 4; //podia ter sido
//declarado da seguinte maneira: Com o já re fe rim os no ínicio, us am os o
int soma; //int a = 3, b = 4, soma; # incl ude <s tdio.h > para pode rm os util izar
//que teria o mesmo efeito as funcional idade s de input, te cl
ado, rato e
int sub,mult,div; outros , e output, m onitor, fich e iro ou
pe riférico. Até agora s ó us ám os o output,
soma = a + b; // soma a com b com a função printf(). Vam os agora pode r
//e atribui o resultado a soma alargar, e m uito, a m ane ira de us ar o C,
sub = a - b; // subtrai b a a e pode ndo inte ragir com o program a.
//atribui o resultado a sub
mult = a * b; // multiplica a por b
//e atribui o resultado a mult
#include <stdio.h>
div = a / b; // divide a por b e
int main()
//atribui o resultado a div
{
printf(“soma=%d, sub=%d, mult=%d,
//declaração de variáveis
div=%d\n”, soma, sub, mult, div);
int a,b,soma;
return 0;
printf(“Insira um valor para a: ”);
}
// obter valor de a
scanf(“%d”, &a);
printf(“Insira um valor para b: ”);
Tão s im pl e s q uanto is to. Criám os as // obter valor de b
variáve is a e b e atribuím os -l h e s os val
ore s scanf(“%d”, &b);
3 e 4 re s pe ctivam e nte . D e pois criám os as 4 soma = a + b; // soma a com b e
variáve is para guardarm os os val ore s atribui o resultado a soma
re s pe ctivos às ope raçõe s e fe ctuadas a a e // imprimir o resultado no ecrã
b, s om a, s ub, m ul t e div. Em s e guida printf(“soma=%d\n”, soma);
atribuím os a cada um a de s tas ope raçõe s , return 0;
o val or da re s pe ctiva ope ração e ntre a e }
b. No final , im prim im os , com o já vim os , as
variáve is de ntro da fras e . O utra m ane ira de
te r fe ito is to s e ria a s e guinte : O s canf() pode pare ce r difícil à partida
m as no fundo é m uito s im pl
e s.
int main()
{ No e ntanto, um a ve z m ais , ve jam os do
//declaração das variáveis a=3, b=4 início o código de s te program a. No início
//e soma de clarám os 3 variáve is , a, b e s om a, com
int a = 3; o obje ctivo de atribuirm os um val or a a e a
int b = 4; b e de pois de adicionados atribuído a
int soma; s om a. Pas s e m os , e ntão, ao s canf(). Ne s ta
//podia ter sido declarado da
função incl uím os o tipo de dados q ue
//seguinte maneira:
vam os ins e rir e no fim , fora das as pas , o
//int a = 3, b = 4, soma;
//que teria o mesmo efeito e nde re ço de l a e no cas o de s e r m ais do
printf(“soma=%d, sub=%d, mult=%d, q ue um a, pom o-l as por orde m a s e guir às
div=%d\n”, a+b, a-b, a*b, a/b); as pas , as s im com o faze m os no printf().
return 0;
}

<41>
tutorial

Ao e s cre ve rm os & a e & b e s tam os a dize r ao O if() funciona da s e guinte m ane ira:
com pil ador q ue ao re ce be r dois inte iros
[“% d”] , q ue re m os q ue s e jam al ocados no if (condição)
e nde re ço de m e m ória & a e & b {
re s pe ctivam e nte . Pe ns e m os nis to com o s e ndo expressão 1;
cas as . Te m os a cas a a com o e nde re ço & a e }
a cas a b com o e nde re ço & b. O u s e ja, o else
{
program a e s pe ra o val or para o inte iro a
expressão 2;
s e guido de ENTER e de pois , e s pe ra o val or de }
b s e guido de m ais um ENTER. Se pe rce be rm os
be m com o o s canf funciona, fica aq ui um Com o já re fe rim os ante riorm e nte , um bl oco
program a q ue re ce be a data de nas cim e nto {}, s ó pre cis a de e xis tir, s e e xis tir m ais do
e de pois a confirm a, m os trando no e crã as q ue um a e xpre s s ão. Em C, al go é
opçõe s e s col h idas pe lo utilizador: ve rdade iro s e for dife re nte de 0 [ze ro] , ou
s e ja, 1 é ve rdade iro, 642 é ve rdade iro, -2,3
#include <stdio.h>
é ve rdade iro e 0 [ze ro]é s e m pre fal s o.
int main()
Pos to is to, vam os a um s im pl e s program a
{
//declaração de variáveis para pôr e m prática o nos s o if():
int ano;
int dia; #include <stdio.h>
int mes; int main()
{
printf("Insira a sua data de int x = 10;
Nascimento [mes em numero]\n\nAno:"); int user;
// obter valor de ano printf(“Insira um numero maior que
scanf("%d", &ano); %d: “, x);
printf("Dia: "); scanf(“%d”, &user);
// obter valor de dia if (user > x) // se condição for
scanf("%d", &dia); // verdadeira, executa o seu corpo
printf("Mes: "); {
// obter valor de mes printf(“Inseriu o numero %d que é
scanf("%d", &mes); maior que %d\n”, user, x);
// imprimir os dados do utilizador }
// no ecrã else // caso contrário
printf("Data:\n%d\\\%d\\\%d\n", // executa este corpo
ano, dia, mes); {
return 0; printf(“O numero %d que inseriu
} nao é maior que %d\n”, user, x);
}
return 0;
}

Expre s s õe s Condicionais e Com o pode m os ve r, é m uito fácilpe rce be r


O pe radore s Lógicos a s intaxe do if(). Se o núm e ro ins e rido for
m aior do q ue x, q ue val e 10, o corpo do ifé
Ne s ta s e cção vam os apre nde r l ógica. A e xe cutado, cas o contrário, o corpo do e l se
lógica é m uito im portante para de cidir é e xe cutado. Não é obrigatório q ue o if
s ituaçõe s . E para as de cidir e xis te m as te nh a e l s e . Es ta l
ógica é m uito s im pl e s m as
e xpre s s õe s condicionais . Exe m pl
o dis s o s ão pre cios a. Por outro l ado, e xis te m ope radore s
o if() e o s w itch (). Por agora ve jam os e s tas lógicos q ue nos ajudam a pre cis ar um a
duas . condição. São e l e s o AND o O R e o NO T,
q ue e m C s e re pre s e ntam por, & & , || e !
re s pe ctivam e nte .

<42>
tutorial

E s e r-nos -ão m uito úte is no s e guinte Um a ve z m ais , pode pare ce r m uito


program a [um a ve rs ão 2 do ante rior]
. com pl icado m as é ve rdade iram e nte s im pl es
e vai-nos dar im e ns o je ito. Pas s ando à s ua
#include <stdio.h> e xplicação: o s w itch re ce be a variáve l a
int main() anal is ar. D e pois , já de ntro do corpo, te m os
{ todos os cas os q ue q ue re m os e por orde m ,
int MIN = 5, MAX = 10; cada um s e guido de bre ak , de m odo a q ue
int user; um a ve z e xe cutado o prim e iro “cas e ” q ue de r
printf(“Insira um numero maior que
ve rdade iro, o s w itch pare por aí e não
%d e menor que %d: “, MIN, MAX);
e xe cute todas os outros “cas e ”, e é final izado
scanf(“%d”, &user);
if ((user > MIN) && (user < MAX)) por um a condição de faul t, cas o ne nh um a
// executa o seu corpo do if das ante riore s s e ja ve rdade ira. Um program a
{ para e xpl icar o s w itch . Porq ue não um m e nu
printf(“Inseriu o numero %d que de um l e itor de m ús ica?
é maior que %d e menor que %d\n”,
user, MIN, MAX); #include <stdio.h>
} int main()
else {
// caso contrário executa este corpo int menuOption;
{ printf("Escolha uma opcao do
printf(“O numero %d que inseriu menu:\n\n");
nao é maior que %d e menor que %d printf("1-Play\n");
\n”, user, MIN, MAX); printf("2-Pause\n");
} printf("3-Stop\n");
return 0; printf("4-Next\n");
} printf("5-Previous\n\n");
printf("Opcao: ");
scanf("%d", &menuOption);
Com o pode m os cons tatar, ne s te cas o, o switch (menuOption)
corpo do ifs ó é e xe cutado s e o val or ins e rido {
case 1: printf("Escolheu a opcao 1-
pe l o utilizador s atis fize r, obrigatoriam e nte , as
Play\n"); break;
duas condiçõe s , s e r m aior do q ue M IN, q ue case 2: printf("Escolheu a opcao 2-
val e 5, e ao m e s m o te m po, s e r m e nor do Pause\n"); break;
q ue M AX, q ue val e 10. É fácilpe rce be r e s te s case 3: printf("Escolheu a opcao 3-
conce itos l
ógicos nas condiçõe s , o Stop\n"); break;
im portante é praticar para ganh ar “traq ue jo” case 4: printf("Escolheu a opcao 4-
na m atéria. Pos to is to pas s e m os ao s w itch (). Next\n"); break;
Es ta função é m uito im portante q uando case 5: printf("Escolheu a opcao 5-
q ue re m os condicionar um a variáve la um a Previous\n"); break;
e s colh a por opçõe s . A s ua s intaxe é a default:
s e guinte : printf("Opcao invalida\n");
}
switch (variável) return 0;
{ }
case ‘caso_1’: { expressão_1 }
break; O u s e ja, de pois de m os trarm os o m e nu,
utilizam os o s canf() à variáve l m e nuO ption
M igue lW ah non

case ‘caso_2’: { expressão_2 }


break; para de te rm inar a opção e s col h ida e
default conform e e s ta, cada “cas e ” dirá a re s pe ctiva
{ opção e s col h ida ou “O pção inval ida” cas o
expressão ne nh um dos “cas e ”s s e ja ve rdade iro. Na
} próxim a e dição pros s e guire m os com e s ta
}
introdução ao C.

<43>
gnu/l
inux

Am bie nte s gráficos G NU/Linux


e m s is te m as de fraco de s e m pe nh o
A q ue m faz por não pe rde r pitada de cada Fl
uxbox
novo pas s o no re ino das Novas Te cnol ogias ,
a q ue m é capaz de e s tar m e s e s e m e s e s a A pal avra de orde m ne s te pe q ue no am bie nte
juntar o pé de m e ia para com prar aq ue l a de trabal h o m inim al is ta é m e s m o a
pl aca gráfica ou proce s s ador topo de gam a, s im plicidade e m te rm os e s téticos e funcionais .
pode pare ce r re l ativam e nte e s tranh o q ue D e s de l ogo, h á a re al çar q ue o Fl uxbox não é
ainda h aja q ue m trabal h e na prim e ira ve rs ão m ais q ue um W indow s M anage r, com o tal ,
do Pe ntium . M as , m ais (s upos tam e nte ) raro não é de e s pe rar um l e q ue variado de
e xis tire m s e rá, de ntro de s s a m e s m a m inoria, apl icaçõe s com um a raiz com um a s uportar a
h ave r q ue m não q ue ira pe rde r o praze r de utilização de produtividade (e xe m plo:
utilizar G NU/Linux, e q ue com o talprocure apl icaçõe s K do K D E, q ue é um D e s k top
s abe r as m e l h ore s opçõe s te ndo e m conta a Environm e nt). O Fl uxbox s ó s e e ncarre ga de
s ua s ituação. m odificar o s is te m a gráfico Xorg de m ane ira a
incl uir, e ntre outras cois as , um a pe q ue na
G NU/Linux é, afinal de contas , um a das barra de tare fas , a pos s ibil idade de de corar o
mel h ore s s ol
uçõe s no “m e rcado” para e s ta fundo do am bie nte com um w al l
pappe r e um
gam a de util izadore s , com o tal , ne s te artigo m e nu de apl icaçõe s accionáve lpe l o cl iq ue
de cidim os dar um as l uze s s obre o principal dire ito do rato, al ém da pos s ibil idade de
factor de gas to de de s e m pe nh o num a pe rs onal ização por via de te m as . Logo, todas
dis tribuição: o am bie nte gráfico. as apl icaçõe s a util izar te rão de s e r ins tal adas
pe l o próprio util izador, m as não s e pre ocupe ,
É-nos m uitas ve ze s , e m vários fóruns e m q ue Fl uxBox é com patíve lcom as apl icaçõe s de
participam os , pe rguntado q ual a m e l h or G NO M E e K D E.
dis tribuição para l ow pc's . A re s pos ta é s im pl e s:
não de pe nde da dis tribuição, de pe nde do
am bie nte gráfico q ue s e util iza (ge ral m e nte !),
e s col h e ndo-s e m uitas ve ze s a dis tribuição e m
função dis s o. É ne s s a altura q ue ve m à bail aa
q ue s tão: Se ndo as s im , q u al o m e l h or
am bie nte gráfico?

Não é a e s ta pe rgunta q ue pre te nde m os


re s ponde r, m as q ue re m os e xpor-vos as
principais vantage ns e caracte rís ticas das
duas m ais adoptadas e s col h as para l
ow pc's :
XFCE e Fl uxbox.

<44>
gnu/l
inux
Es te pe q ue no am bie nte m inim al is ta não é e s te pe q ue no s is te m a ch e ga, o q ue é um
propriam e nte al go novo, é bas e ado noutro ch am ariz para util izadore s com m ais inte re s s e
W M : o Bl ack Box. Se ndo m uito s e m e l h ante a e m apre nde r, ou m ais conh e cim e ntos .
e s te , principal m e nte vis ual m e nte , te m -s e
progre s s ivam e nte de s tacado e ganh o a
popul aridade q ue o torna num a e s col ha a É rápido, ao m e nos ?
cons ide rar para pc's de baixo de s e m pe nh o.
Em re l ação ao Bl ack Box apre s e nta m ais Ne s te cam po não h á a m e nor dúvida,
al gum as funcional idade s im portante s , com o Fl uxBox é o W M m ais s im pl e s do re ino
um a barra de tare fas configuráve l , a G NU/Linux, q ue incorpora igual m e nte um
pos s ibil
idade de util izar atalh os de te cl ado, e m aior núm e ro de funcional idade s . A s ua
pode r agrupar todas as jane l as e m ape nas s ource não te m m ais de 1M B, de m orando
um a com s e paradore s . Ve rs õe s m ais ape nas al guns m inutos a com pil ar. M als e
re ce nte s apre s e ntam inovaçõe s no de s ign e ntra pode r-s e -á de s de l ogo cons tatar a
com o jane l as com cantos arre dondados e rapide z com q ue s e cons e gue util izar e s te
trans parências . pe q ue no s is te m a, ge ral m e nte ocupando,
s e m m ais ne nh um a apl icação e xte rior
abe rta, te ndo ape nas o s is te m a bas e por
Sim pl
icidade ? trás e s e m s w ap utilizada, aproxim adam e nte
39 M B de m e m ória. Is to pe rm itirá corrê-l o até
Não s e rá pre cis o m uito te m po para q ue nos pc's m ais antigos s e ndo ne ce s s ária, no
fiq ue a conh e ce r os cantos à cas a de s te e ntanto, a cons ciência de q ue q ual q ue r
W M , com util ização inte ns iva pode rá até apl icação, por m ais s im pl e s q ue s e ja,
e s tranh ar e não s e h abituar a m ais ne nh um el e vará l ogo a m e m ória para val ore s m ais
s is te m a q ue não dê ao cl iq ue dire ito do rato al tos e q uiçá abus ivos , com o al iás é l ógico.
um pape l ful cral na acção. No e ntanto,
tudo is to te m um cus to, ou ne nh um , Se s e q uis e r re duzir ainda m ais a m e m ória
de pe nde ndo do util izador q ue s e ja. Al ém ocupada, pode r-s e -á optar por um a s is te m a
da s ua s im pl icidade , Fl uxBox é tam bém bas e m ais l e ve do q ue o q ue nos é
conh e cido por cons e guir apre s e ntar um proporcionado por um a norm aldis tribuição
s is te m a com um de s ign actuale com um a com a opção de ins tal ar Fl
uxbox (com o
boa dos e de e y e candy, m as não é re fe rido D e bian, G e ntoo, SuSe , e tc), caindo a
com o ch e gar l á. A ve rdade é q ue e s te e s col
h a no bas tante fam os o D am n Sm al l
pe q ue no s is te m a é total m e nte configuráve l Linux, um a dis tribuição de 50M B de
m as , para o faze r, te rá de s e h abituar, tanto tam anh o q ue incl ui FluxBox.
à util ização da cons ol a, com o a inve s tir
al gum te m po e m apre nde r a adicionar
novos te m as , e ditar o m e nu e de finir Concl
us ão
apl icaçõe s de com e ço autom ático no
s tartup do s is te m a, tudo configuráve le m Se gos ta de apre nde r, e q ue r o m e l h or q ue
fich e iros de te xto s im pl e s . Além dis s o, e e xis te não com prom e te ndo a pe rform ance ,
ape s ar dos m uitos te m as e xis te nte s na Fl uxBox é a e s col h a a tom ar. O s e u de s ign
Inte rne t, ne m s e m pre ficam os conte nte s s im pl e s e funcional idade já conq uis taram
com o obtido, e e s tare m os a um pas s o de m uitos , de q ual q ue r form a, não h á com o
andar a vas cul h ar nos fich e iros dos te m as , e xpe rim e ntar e tirar a prova dos nove . Se
e a e ditá-l os a nos s o be l
o praze r. não q uis e r ins tal ar propos itadam e nte e s te
am bie nte gráfico, pode rá s im pl e s m e nte
Se s e re fe re o abom ináve lq ue is to pos s a s e r faze r o dow nl oad do Live CD da dis tribuição
para um util izador q ue ape nas q ue r al go l e ve D am n Sm al lLinux e com provar o q ue l e va
e pronto a us ar, h á q ue re fe rir tam bém o m uitos , m e s m o pos s uindo pc's de e l e vada
e s pantos o de s ta pe rs onal
ização e xtre m a a q ue pe rform ance , a tê-l o com o e s col
h a nº 1.

<45>
gnu/l
inux

Xfce ção a e s te , s acrificar algum as


funcional
idade s (tais com o ace de r por s s h ).
Pode m os caracte rizar Xfce num a única
fras e : D e s k top Environm e nt l e ve s e m A úl tim a ve rs ão cons e gue s e r um bom
de s pre zo da funcional idade . Te m na s ubs tituto de G NO M E ou K D E. É-nos
rapide z, e m re l
ação aos dois D E's apre s e ntado um D e s k top s im pl e s , com duas
dom inante s , o s e u principal trunfo. Se gue barras h orizontais com o e m G NO M E, q ue o
um a fil os ofia m odul ar, ou s e ja, torna bas tante prático.
ve m com um s is te m a bas e Pos s ui um paine ls im pl e s m as
s e m m uitas de pe ndências a bas tante útil pe rm itindo o
q ue se pode facilm e nte fácil ace s s o a várias
acre s ce ntar funçõe s à m e dida configuraçõe s do s is te m a.
das ne ce s s idade s , através da O cupa ce rca de 55M b de
ins talação de pacote s . As s im , m e m ória com a SW AP
cons e gue ocupar m e nos total m e nte l ivre , te ndo por
re curs os pois não ins tal a por trás o s is te m a bas e a corre r.
de faul t funçõe s m uitas ve ze s Ve m com trans parências e
de s ne ce s s árias ao util izador. e fe itos s om bra nativos
(ne ce s s ita de ace l e ração 3d
O nom e Xfce provinh a e m butida no de s k top),
originalm e nte de “XForm s apre s e ntando um a
Com m on Environm e nt”, m as e xce l e nte fluide z.
com o foi re e s crito duas ve ze s
já não us a XForm s . O nom e
continuou o m e s m o, já não
s e ndo “XFce ” m as “Xfce ”, não s ignificando a Nota final
s igla abs ol
utam e nte nada, talcom o o l ogo,
q ue é ape nas um a piada. Se q uis e r ape nas um D E l e ve ou m e s m o um
s ubs tituto para G NO M E ou K D E, te m no Xfce
O de s e nvol vim e nto com e çou por vol ta de um a boa apos ta. Al ém de s e r fácil de
19 9 7 s e ndo um cl one para Linux do Com m on util
izar, principal m e nte para q ue m ve m do
D e s k top Environm e nt (CD E) um D E proprie tário G NO M E, te m um as pe cto l im po e de
para UNIX. A s e gunda ve rs ão foi l ançada já pe rs onal ização fácil . D e notar q ue para
com o Xfce 's w indow m anage r (Xfw m ) ainda com putadore s q uas e “pré-h is tóricos ”
h oje pre s e nte . Foi na te rce ira ve rs ão q ue provave l m e nte fl
uxbox é m ais indicado...
de ixou Xform s e pas s ou a bas e ar-s e e m
G TK , principal m e nte por caus a de o
prim e iro s e r proprie tário, o q ue l im itava
o progre s s o do proje cto. Com a ve rs ão
4.2.0 foi fe ito um grande s al to com o
s o Ram os & M igue lPais

update para as bibl iote cas G TK + 2 e


na 4.4 (actual ) pas s ou a us ar o Th unar
com o fil e m anage r e m ve z do Xffm .

Sim pl
e s e Funcional
Us a a bibl iote ca G TK (talcom o G NO M E)
e ve m por de faul t com o Th unar com o
file m anage r. Es te úl tim o criado foi para
s e r “l
e ve ” q uando com parado com ,
Ce l

por e xe m pl o, o nautil us ( fil


e m anage r
de faul tdo G NO M E), ape s ar de , e m re l
a-
<46>
e ve ntos

No pas s ado dia 27 de Jane iro, Foram de s m is tificados m itos q ue se


de corre u o TECNO NO V 2007, um pe rpe tuam s obre e s te tipo de s oftw are e
e ncontro nacional de dicado à e nunciadas al gum as das principais
Te cnologia e Inovação. vantage ns .

Es te e ve nto ve io dar continuidade a outros


já de corridos s obre a m e s m a áre a de Se guidam e nte , de corre u a apre s e ntação
acção, com o BarCam pPortugale a SH iFT, da te rce ira ve rs ão da l ice nça G NU G PL, por
s e ndo e s te úl tim o m ais virado para um Rui M igue l Se abra, Vice -Pre s ide nte da
públ ico inte rnacional . O TECNO NO V, pe l o ANSO L (As s ociação Nacional para o
contrário, tinh a a inte nção de m os trar um Softw are Livre ). Foram clarificadas as
pouco do q ue s e faz no nos s o país , aos principais dife re nças de s ta nova ve rs ão e m
portugue s e s , e principal m e nte fom e ntar a re l
ação à ante rior e apre s e ntadas al gum as
partil h a de ide ias e m otivar a inovação. vantage ns da s ua adopção. Para te rm inar
a prim e ira parte do e ve nto, M arcos
O e ncontro de corre u e m Coim bra, no M arado, anal is ta da Sonae Com IT, re al izou
café/auditório da FNAC, l ocalizada no Fórum um a das apre s e ntaçõe s q ue ge rou m aior
Coim bra, e s paço q ue , por ve ze s , não foi inte re s s e e dis cus s ão de todo e s te e ve nto,
s uficie nte para o públ ico q ue ia pas s ando e à vol ta do te m a "A Indús tria D is cográfica e
re s olvia e s pre itar. Lá de ntro iam de corre ndo o D RM (D igital Righ ts /Re s trictions
apre s e ntaçõe s , m aioritariam e nte dirigidas a M anagm e nt)". Após a de s crição de s ta
um públ ico não-profis s ional, com e xce pção te cnol ogia, foram apre s e ntadas dive rs as
de al guns te m as , com o a te rce ira ve rs ão da concl us õe s ne gativas a tirar da s ua
lice nça G PL, q ue e ra dire ccionada para a utilização, jus tificando as s im as acçõe s q ue
áre a de de s e nvol vim e nto de s oftw are . Ao o orador ince ntivava, de form a a com bate r
todo, foram s e te apre s e ntaçõe s , re al izadas a apl icação de tais re s triçõe s na indús tria
por oradore s na s ua grande m aioria dis cográfica.
profis s ionais da áre a, m as com h is toriais
dis tintos . D urante todo o e ve nto e s tive ram
tam bém dis poníve is gratuitam e nte cds da Após um curto coffe e bre ak , M ário Lope s ,
dis tribuição G NU/Linux Ubuntu, para dive rs as e s tudante na FEUP , ve io apre s e ntar o IM AG E
pl ataform as . (Indus trial M anage m e nt G am e ), proje cto
com pos to por um a e q uipa de e s tudante s
A prim e ira apre s e ntação, de títul o "Linux: do curs o de Enge nh aria Inform ática. Es te
Um cam inh o para a produtividade ", ficou a cons is te num jogo w e b-bas e d de
cargo de O ctávio Fil ipe G onçal ve s , s im ul ação de ge s tão e de s e nvol vim e nto
fundador da e m pre s a M agicBrain. Foi um a indus trial . Te ndo por bas e aq uil o q ue
apre s e ntação de dicada à divul gação do re al m e nte s e util
iza no s e ctor, e s te jogo
"m undo" do Softw are Livre e de um a das torna-s e as s im num a boa pl ataform a para
s uas principais "bande iras ": as dis tribuiçõe s te s te s de tácticas e pl anos e m pre s ariais .
de s is te m as ope rativos G NU/Linux.

<47>
e ve ntos

Aprove itou-s e para abordar principal m e nte Para te rm inar, a úl tim a apre s e ntação ficou
as de cis õe s fe itas pe l a e q uipa para o a cargo de Pe dro Sous a, program ador w e b
de s e nvolvim e nto de s te proje cto, s e ndo para a Acce nture , q ue já h avia
dado um m aior foco à pl ataform a w e b apre s e ntado o s e u proje cto na 5ª e dição
e s colh ida, Ruby on Rails. da Re vis ta PRO G RAM AR, o w e Spe ndM one y.
Es ta foi um a continuação do te m a
"Inovação", de s ta ve z apre s e ntando al guns
O fundador da W e Bre ak Stuff, e m pre s a bons e xe m pl os , dando e s pe ciale nfas e à
portugue s a de dicada ao de s e nvol vim e nto, W ii, a nova cons ola da Ninte ndo.
de s ign e e s tratégia para produtos w e b,
Fre de rico O live ira, ve io fal ar s obre o te m a Em s um a, foi, s e m dúvida ne nh um a, um a
"Inovação e m Portugal ". Foram fe itas óptim a iniciativa, pois para al ém de s urgir
dive rs as críticas à fal
ta de m ais um e s paço de divul gação do q ue s e
e m pre e nde doris m o da m aioria dos faz e m Portugal ne s ta áre a, s urgiu
portugue s e s e à fal ta de oportunidade s principal m e nte m ais um e s paço de
q ue s ão dadas a novas ide ias , s e ns ibil
ização, m otivação e incubação de
com parando com outros pontos do gl obo. ide ias , prontas a s e r partil h adas e
de s e nvol vidas . Es te é um dos cam inh os
para atingir a re corre nte m e nte fal ada
Se guiu-s e um a Introdução à l inguage m de "Inovação". Fe l izm e nte é já pos s íve l
program ação Pe rl , e m bora m ais virada obs e rvar um re s ul
tado prático de s te
para o as pe cto s ocial , ou s e ja, para as e ve nto: um l
ocal de divul gação e
com unidade s e s uporte ge rado à s ua vol ta: s e ns ibil
ização s obre as práticas de al gum as
CPAN, m ail ing lis ts e m l íngua portugue s a, e m pre s as , ao ins e rire m D RM s nos s e us
Pe rlM onge rs , e ntre outros ... Apre s e ntação produtos (h ttp://w w w .drm -pt.info).
e s ta q ue foi re al izada por Ne l s on Fe rraz,
profis s ionalda Se gul a Te ch nologie s . Para m ais inform açõe s s obre e s te e ve nto,
vis ite m o s ite oficialh ttp://te cnonov.ne t

Sérgio Santos

<48>
anál
is e s

UM L, M e todologias
e Fe rram e ntas CASE

Al
be rto S il
va
Carlos Vide ira
Editora: Ce ntroAtl
antico.pt
e cção: Te cnol
Col ogias
Páginas : 357
2ª Edição, 1ª Edição: M arço de 2005
ISBN: 9 89 -615-009 -5

UM L, M e todol ogias e Fe rram e ntas áre a de te cnol ogias de inform ação s e


CASE, vol um e 1, apre s e nta-s e fam iliarize com conce itos e conh e cim e ntos
com o um l ivro de re fe rência para bás icos da áre a.
al unos de l ice nciaturas e de curs os
de pós -graduação, na áre a de A s e gunda parte ce ntra-s e na l inguage m de
conce pção de s is te m as de m ode l ação UM L (Unifie d M ode l ing
s oftw are , com e s pe cial foco e m Language ), s e ndo a s e gunda ve rs ão do
m étodos , m ode l ação e fe rram e ntas UM La grande razão de s e r de s ta re e dição.
CASE (Com pute r Aide d Softw are Na s e gunda parte e fe ctua-s e um a
Engine e ring). e num e ração das várias m ode l açõe s
s uportadas pe l o UM L, e fe ctuando um a
Introduzido o l ivro, o prim e iro im pacto ao de s crição, introduzindo os diagram as
corre r das páginas não im pre s s iona. O corre s ponde nte s e faze ndo re fe rência, de
as pe cto gráfico pare ce indicar q ue o l ivro form a s upe rficial, às l im itaçõe s das ve rs õe s
foi de s e nvol vido num corriq ue iro e ditor de ante riore s do UM L, m as não abordando
te xto, ficando m uito aq uém da q ual idade pos s íve is proble m as e s ol uçõe s na actual
gráfica q ue as e ditoras de re nom e m undial ve rs ão. Um ponto inte re s s ante é a incl us ão
h abituaram os profis s ionais e os al unos do de e xe rcícios no finalde cada s e cção de
e ns ino s upe rior. Es te prim e iro im pacto form a a te s tar a s olide z dos conh e cim e ntos
cons ol ida-s e ao l ongo do l ivro, onde s e adq uiridos . Era e xpe ctáve l q ue após a
juntam os im e ns os gráficos e diagram as introdução dos conce itos UM Ls e il us tras s e a
cuja q ual idade gráfica fica abaixo das s ua util ização cons ol idada e a s ua l igação
e xpe ctativas , ao ponto de tornar difícila a fe rram e ntas CASE, dado q ue o l ivro te m a
le itura e m al guns cas os . pre te ns ão da apl icação do UM L no
proce s s o de de s e nvol vim e nto, no e ntanto
Ce ntrando a ate nção no conte údo e não talnão aconte ce .
Fe rnando M artins

na form a, o l ivro divide -s e e m duas parte s .


A prim e ira e fe ctua o e nq uadram e nto Ao contrário das as piraçõe s as s um idas no
introduzindo um a vis ão ge ral s obre os início do l ivro, o m e s m o pare ce indicado
s is te m as de inform ação, arq uite cturas , para l e itore s q ue tom e m contacto pe l a
pl ane am e nto, proce s s os e m étodos de prim e ira ve z com UM L, m as fica aq uém das
de s e nvol vim e nto de s oftw are . Não s e ndo ne ce s s idade s de al unos do e ns ino s upe rior
e s te o obje ctivo do l ivro e m q ue s tão, e s ta q ue pre te ndam cons truir um a carre ira na
prim e ira parte pe rm ite q ue um l e itor fora da áre a das te cnol ogias de inform ação.

<49 >
inte rne t

D ire ctório de apl


icaçõe s w e b 2.0

Um dire ctório e xte ns o e pe s q u is áve l de fe rram e ntas w e b 2.0, m antido pe l a


Te ch C ru nch . A q u i é pos s íve le ncontrar as m ais variadas apl icaçõe s , de u m a
form a bas tante intu itiva.

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


D igg BigSpy
D os l aboratórios do popul ar portalde notícias D igg foi
criada um a nova e m uito ape l ativa form a de obs e rvar a
actividade de todos os util izadore s . As s im , é pos s íve l
vis ualizar e m te m po re al, todas as notícias votadas pe l os
m e m bros , e nq uanto as notícias com m ais im portância (ou
s im pl
e s m e nte m ais votadas ) s ão re alçadas .

h ttp://l
abs .digg.com /bigs py /

Vide o-aul
as de PH P

Blog m antido por um a program adora,


com um tutorialde PH P . Cada aul a
corre s ponde a um víde o fl as h , s obre
um as s unto particul
ar de s ta popul ar
l
inguage m de program ação.

h ttp://program m ing.l
e arningne rd.com /ph p-bl
og

Joos t
Nova apl icação pe e r-to-pe e r para o s tre am ing de canais
de TV. Um a nova form a de aprove itar o m e l h or dos dois
m undos : TV e inte rne t, através de um a apl icação fácilde
us ar e onde pode m os ve rdade iram e nte e s col h e r o q ue
q ue re m os ve r.

h ttp://w w w .joos t.com

<50>
bl
ue s cre e n

Probl
e m as de te cl
ado

Le ve o s e u W indow s /M ac Sol
ução de s e s pe rada
cons igo

As crianças e s tão cada ve z m ais inte l


ige nte s ...

<51>
com unidade

Es tam os no úl tim o m ês do prim e iro trim e s tre


do ano e s into-m e optim is ta e m re l ação ao
rum o q ue as cois as e s tão a tom ar na
com unidade . Ve jo o núm e ro de util izadore s
activos a aum e ntar no fórum , as s im com o o
núm e ro de util izadore s no s e u total , ve jo Q ue re s participar na re vis ta
várias e q uipas de de s e nvol vim e nto a s e re m PRO G RAM AR?Q ue re s inte grar e s te
form adas a partir do fórum , vários proje ctos proje cto, e s cre ve r artigos e ajudar
a s urgir, várias de ze nas de pe s s oas a a tornar e s ta re vis ta num m arco
q ue re r contribuír activam e nte para o da program ação nacional ?
cre s cim e nto da com unidade , e nfim , ve jo
vontade de trabal h ar. Por ve ze s torna-s e Vai a
difícil para o s taff apoiar todas as
iniciativas , todos os proje ctos e dar
iniciação a todas as ide ias q ue s urge m . No w w w .re vis ta-program ar.info
e ntanto, com al gum e s forço e vontade as
cois as acabam por s e faze r com re l ativa
rapide z e s uce s s o. para m ais inform ação com o
participar
ou e ntão contacta-nos por
O w ik i (h ttp://w ik i.portugal-a-program ar.org)
é m ais um a das pl ataform as de apoio à re vis taprogram ar
form ação de s s e s proje ctos , de apoio à @ portugal
-a-program ar.org
e s crita de artigos 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á Pre cis am os do apoio de todos
dado tam bém no s e ntido de continuar a para tornar e s te proje cto ainda
prom ove r a cons trução de conte údos e m aior...
apre ndizage m de q ue m s e dis ponibil izar
para tal . contam os com a tua ajuda

Enfim , concl uo o "A Com unidade " de s ta


e dição de s orris o e s tam pado na cara pe l o
facto do Portugal -a-Program ar continuar a
faze r s uce s s o por e s te país fora, m uito
de vido ao trabal h o e col aboração de
todos os m ode radore s do fórum ,
adm inis tradore s dos pól os e aos util izadore s
q ue têm de m ons trado vontade e
capacidade de trabal h o. Es pe ro q ue o
s e gundo trim e s tre do ano traga m ais
pros pe ridade e q ue os re s ul tados do
trabal h o da com unidade agrade m a todos
Rui M aia

os program adore s nacionais .

<52>