Você está na página 1de 52

e ditorial

ndice
3 notcias
4 te m a de capa
10 a program ar
26 s e gurana
28 e l
e ctrnica
33 te cnol
ogias
38 tutorial
44 gnu/l
inux
47 e ve ntos
49 anl
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 trao


Rui M aia
D avid Pintas s il
go
S rg io S antos

coorde nador adjunto


M ig ue lPais

e ditor

Joe lRam os

re daco

D anie lCorre ia
Rui G onal
ve s
Pe dro Te ixe ira
Bruno Vaz
Joo Pe re ira
R icardo Roch a
G uil
h e rm e Rodrig ue s
Nuno Corre ia
M ig ue lW ah non
Ce l
s o Ram os
Fe rnando M artins

col
aboradore s
Jos O l
ive ira

contacto

re vis taprog ram ar


@ portug al
-a-prog ram ar.org

w e bs ite

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

Criar, Agir e Apre s e ntar


Nos vrios e ve ntos por onde te nh o pas s ado, um te m a te m s ido
re corre nte : a inovao e m Portugalou, com o al
guns indicaram , a
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
icae s w e b, um a re a q ue actual
m e nte e s t e m franco
de s e nvol
vim e nto. Todos os dias s urge m novas e originais
apl
icae s , m as ainda raro e ncontrar um a e q uipa portugue s a
e nvol
vida. Foram apre s e ntadas vrias e xpl
icae s para e s ta
gre ve de criao: a l
ocal
izao (cada ve z m e nos im portante ), a
m e ntal
idade , a fal
ta de inve s tim e nto e , principal
m e nte , a fal
ta de
corage m . Cada ve z m ais s e pe ns a duas ve ze s ante s de s e atirar
de cabe a nal
gum proje cto arris cado. No e ntanto, o m e l
h or
cam inh o apre s e ntado para o s uce s s o foi m e s m o "te ntar"(m uitas
ve ze s ), de dicar-s e a um proje cto e faze r tudo para q ue vingue .
Fica aq ui o ince ntivo a todos os portugue s e s q ue e s tive re m a l
e r,
s e m e s m o com toda a de dicao no obtive re m re s ul
tados (o
q ue pode r aconte ce r m uitas ve ze s ), apre ndam com a
e xpe rincia e avance m para novas ide ias . M as te nte m ...
A partir de s ta e dio ire m os te ntar acom panh ar m ais e ve ntos q ue
aconte am por Portugal
, no s e ntido de divul
gar o q ue s e vai
faze ndo pe l
o nos s o pas e prom ove r a dis cus s o nos m e s m os . Por
is s o, pe dim os q ue nos notifiq ue m de futuros e ve ntos , para
pode rm os divul
gar na re vis ta, de ntro do pe rodo pos s ve l
. Tam bm
pode ro e nviar-nos re s um os e fotos de e ve ntos j de corridos para
s urgire m na nova s e co Eve ntos , inaugurada com o e ve nto
Te cnonov 2007, no q uale s tive pre s e nte .

<2>

Srgio Santos

coorde nador

notcias

UE am e aa M icros oft
A e m pre s a de Bil
lG ate s te m de cobrar m e nos
pe l
a ce dncia de cdigos -fonte s a outras
com panh ias de s oftw are . O avis o foi fe ito no
dia 1 de M aro pe l
a Com is s o Europe ia. A CE
de u q uatro s e m anas M icros oft para re duzir os
cus tos de ace s s o a cdigo-fonte por produtoras
de
s oftw are
q ue
q ue re m
as s e gurar a
com patibil
idade e inte raco com apl
icae s
da M icros oft.
D e acordo com o e xe cutivo com unitrio, os
pre os praticados pe l
a M icros oft ape nas e s to
a al
cance
das m aiore s com panh ias . A
M icros oft re s ponde u adve rtncia da CE,
al
e gando q ue os pre os de ace s s o aos
cdigos 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 Concorrncia Europe ia, acus a a
M icros oft de viol
ar o artigo 82 do Tratado
Europe u da Concorrncia, com prticas de
abus o de pos io dom inante . Se no s atis fize r
as e xigncias da CE, a M icros oft arris ca-s e a
gas tar num a m ul
ta o corre s ponde nte s
re ce itas de cinco m e s e s no m undo inte iro

Adobe l
ana ve rs o do
Ph otos h op onl
ine
Se gundo inform ae s de Bruce Ch ize n,
pre s ide nte da e m pre s a, nos prxim os s e is
m e s e s s e r l
anada um a ve rs o onl
ine do
Ph otos h op, o m ais conh e cido e util
izado
program a de e dio de im age m do
m undo.

O Ph otos h op juntar-s e - portanto, ao Adobe


Re m ix, o j e xis te nte s oftw are onl
ine para
e dio de vde o. Com e s tas m e didas , a
Adobe e s tar a com pe tir dire ctam e nte com
e m pre s as com o o G oogl
e , q ue j ofe re ce m
s e rvios s e m e l
h ante s .

Se m inrios IST-Tagus 2007


O s Se m inrios 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 rincias e troca de ide ias re l
acionadas com a re a
te cnol
gica, be m com o a s ua infl
uncia no m undo e m pre s arial
. Se ndo organizado por
al
unos do Ins tituto Supe rior Tcnico (pl
o do Tagus park ), e s te e ve nto te m tido um a cre s ce nte
participao de profis s ionais , s e ndo j um conce ituado pal
co para a apre s e ntao de
proje ctos inovadore s e de forte im pacto no m e rcado.
A 4 e dio dos Se m inrios IST-Tagus re al
izar-s e nos dias 19 e 20 de M aro, 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 dio de s te ano s e r a e xibio
de Trabal
h os de Finalde Curs o por parte de
al
unos do IST.
O e ve nto ir contar com um l
e q ue s ignificativo de oradore s de pre s tgio, e ntre os q uais s e
de s tacam Jos M agal
h e s (Se cre trio de Es tado da Adm inis trao Inte rna), Carl
os Batis ta (TSy s te m s ), Jorge Lope s (BRISA), Antnio M arce l
o (TECM IC Eas y tran Vodafone ), e ntre outros .
Para m ais inform ae 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

Introduo ao W M L(W AP)


A te cnol
ogia W AP foi criada pe l
o Frum W AP
,
fundado e m 19 9 7 por m arcas com o a Nok ia
ou a M otorol
a, com o obje ctivo de criar um
protocol
o de troca de inform ao e m
dis pos itivos m ve is (w ire l
e s s ) com o os
te l
e m ve is . O W AP cons is te num a l
inguage m
de
troca
de
inform ao
prpria
de nom inada W M L. O W M L com patve lcom
os s tandards de TCP/IP
, H TM L e XM L e incl
ui
tam bm
um a l
inguage m
de
s cripting
se m e l
h ante ao Javas cript, m as m ais l
e ve de
form a a s e r de rpida e xe cuo por parte
dos dis pos itivos m ve is , j q ue e s te s no
pos s ue m grande pode r de proce s s am e nto,
de nom inada W M LScript.
A s igl
a W AP s ignifica W ire l
e s s Appl
ication
Protocol
, ou s e ja, Protocol
o para Apl
icae s
W ire l
e s s e de finida com o um a apl
icao
XM L1.0.
O s brow s e rs q ue cons e gue m inte rpre tar e s ta
l
inguage m s o e s pe cficos , ou s e ja, no
pode us ar o s e u brow s e r h abitual(a no s e r
q ue pos s ua al
gum pl
ugin para o e fe ito) para
ve r pginas W AP
. O s tipos de brow s e r
com patve is com o W AP s o de nom inados
M icro Brow s e rs , pe l
as s uas caracte rs ticas
bvias
no pode m
te r grande s
ne ce s s idade s ao nve l do h ardw are , m ais
e s pe cificam e nte ao nve lda m e m ria e CPU,
e por is s o s o ide ais para s e r us ados nos
dis pos itivos m ve is .

<4>

O W M L, com o foi e xpl


icado ante riorm e nte ,
um a
l
inguage m
q ue
a
bas tante s
program adore s pare ce r fam il
iar por s e r um
m is to de H TM L e XM L, m as m ais rgida e m
te rm os de inte rpre tao.
As pginas e m W M L no s o de m uito
dife re nte program ao das pginas e m H TM L,
por is s o o program ador com e xpe rincia e m
H TM L pode
facil
m e nte
iniciar-s e
ne s ta
l
inguage m . Es tas pginas tm a e xte ns o
.w m le s o s e ns ve is a m ais cul
as por te re m
por bas e o XM L, ou s e ja, s e e s cre ve r <abc>
no vai te r o m e s m o re s ul
tado do q ue s e
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
m ins cul
as e de ve m s e r s e m pre fe ch adas .
No W AP e xis te m te rm os e s pe cficos para as
pginas 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 .
Im agine q ue te m um a torre de cartas ,
de nom inado por D e ck , e cada e l
e m e nto
de s s a torre , obviam e nte , um a carta
de nom inada por Card no cdigo. O ra as s im
s e ndo, um a pgina W M L cons ide rado um
de ck e de ntro da pgina W M L pode m e xis tir
m l
tipl
as cards . Q uando um util
izador ace de
pgina W M L s o de s carre gadas todas as
cards do de ck , s e ndo q ue a nave gao
e ntre e l
as e s tar a cargo do dis pos itivo q ue
as re q ue re u, q ue ne s s a al
tura no e s tar e m
contacto com o s e rvidor.

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
ao al
guns tpicos m e nos
e xpl
orados e por is s o pre fe rve 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="Ttulo da Carta 1">
Isto uma card. <br />
Vrias tags HTML funcionam aqui e sero abordadas mais frente nesta
introduo ao WML.
</card>
<card id="carta2" title="Segunda Carta">
<p>
Segunda carta do deck
</p>
</card>
</wml>

Re s ul
tado:
Expl
icao do Cdigo:
<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
vrios atributos , os apre s e ntados s o:
id Ide ntificao da carta, de ve s e r um nom e
nico no de ck .
titl
e Ttul
o da card, nos te rm inais W APcos tum a
s e r apre s e ntado no topo do e cr.
<p> - Pargrafo, idntico ao H TM L.
<b r /> - Q ue bra de l
inh a, s e m e l
h ante ao H TM L.

Vrias 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> - Pargrafo
<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 > - Bol
d
<i> - Itl
ico
<u> - Subl
inh ado (Unde rl
ine )

<5>

te m a de capa
Um e l
e m e nto m uito util
izado e m H TM Le q ue tam bm 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 rao 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 tria dife re nte . Por


s e re m dis pos itivos com poucas capacidade s e m te rm os
de
h ardw are
tm
de
s e r util
izadas pe q ue nas ,
norm al
m e nte m onocrom ticas . Es tas im age ns tm um a e xte ns o e s pe cfica, o .w bm p.
No s e r abordada aq ui a cons truo 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 no ficare m m uito te m po a nave gar na W APao contrrio da Inte rne t.
Ne s ta s e co vam os de ixar o l
e itor e xpl
orar por s i prprio cdigo 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 no re produz o fie l
ds e t

Em W M L, para a nave gao e ntre as dive rs as


pginas e afins , te m os os s e guinte s e l
e m e ntos :

Pre vious

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

Pre vious :

da m e l
h or form a.

D irige para a pgina vis itada ante riorm e nte .


<anchor>
Pgina Anterior
<prev/>
</anchor>

<anchor>
Anterior
<prev/>
</anchor>

Re fre s h

Re fre s h :

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

<anchor>
Actualizar
<go href="pagina.wml"/>
<refresh>
<setvar name="a" value="10"/>
</refresh>
</anchor>

C om andos W M L
Go

D irig e para a pg ina indicada no h re f.


<anchor>
Ir para abc
<go href="abc.wml"/>
</anchor>

Actual
iza a pgina ao cl
icar, e
actual
iza as varive is dadas .

No O pe ration (noop)
Pre vine um a aco de s e r re al
izada.
<anchor>
Ir para abc
<go href="abc.wml"/>
<noop/>
</anchor>

<8>

tam bm

te m a de capa
Tim e rs
Util
izam -s e norm al
m e nte para
re dire ccionar para um a pgina
e s pe cfica, de pois de x s e gundos .
<card ontimer="test.wml">
<timer value="30"/>
<p>Vai ser redireccionado em 3
segundos.</p>

Varive is e m W M L
D e finir um a varive l
:
<setvar name="a" value="500"/>

Com is to criada um a varive la com o


val
or 500.
Para de finir um a varive la partir de um
inputfaze m os :
<card id="carta1">
<select name="escolha">
<option value="pap">Portugal-aProgramar</option>
<option value="revista">Revista
PROGRAMAR</option>
</select>
</card>

E s e guidam e nte us am os o s e guinte cdigo


para us ar a varive lobtida:
<card id="carta1">
Seleccionaste: $(escolha)
</card>

D anie lCorre ia

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-l
os nos s e us
prprios 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.
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 pgina
de e xe m pl
os (h ttp://w 3s ch ool
s .com /w ap/
wml
_e xam pl
e s .as p).
D aq ui tudo, bons s ite s !

<9 >

a program ar

Program ao
O rie ntada aos
As pe ctos com
As pe ctJ
Introduo
D urante os l
tim os anos as s is tim os a um a
grande
divul
gao
da
program ao
orie ntada aos obje ctos (PO O ). Es ta ve io
re s ponde r a
re q uis itos
e s s e nciais
no
de s e nvol
vim e nto de s oftw are , nom e adam e nte
no q ue diz re s pe ito s facil
idade s de
m anute no e re util
izao do cdigo. M as
ape s ar de todas e s tas e vol
ue s , ne m tudo
aq uil
o q ue a PO O s e propunh a cons e guir foi
al
canado. ne s te conte xto q ue s urge a
program ao orie ntada aos as pe ctos (PO A).
Es te novo paradigm a de program ao s urgiu
e m 19 9 6 por G re ge r K iczal
os e pe l
a s ua
e q uipa no Xe rox PARC, q ue tam bm foram
re s pons ve is
pe l
o
de s e nvol
vim e nto
do
As pe ctJ, a l
inguage m PO A m ais us ada.
Q uando
vam os
de s e nvol
ve r
um a
apl
icao, conve nie nte
dividir o
probl
e m a q ue nos foi propos to e m parte s .
A s e parao do probl
e m a de acordo
com os dados e as funcional
idade s a e l
es
as s ociadas facil
ita o e s tudo dos re q uis itos
da apl
icao. Is to o q ue s e de s igna por
s e parao de inte re s s e s . O paradigm a
OO
e s tabe l
e ce
um a s e parao de
inte re s s e s te ndo e m conta os tipos de
dados , re pre s e ntados pe l
os obje ctos , e as
fune s q ue util
izam cada tipo de dados ,
ou s e ja, os m todos a q ue um obje cto
re s ponde .

<10>

M as , com o j foi re fe rido ante riorm e nte ,


ape s ar da orie ntao aos obje ctos te r
trazido m e l
h orias na form a de program ar,
no cons e guiu re s ol
ve r al
guns probl
e m as .
Exe m pl
os cl
s s icos s o o re gis tos das
ope rae s e m fich e iros de l
og q ue
e ncontram os e m m uitos s oftw are s , ou
program ao concorre nte /dis tribuda. O
cdigo as s ociado a e s te
tipo de
funcional
idade s e ncontra-s e norm al
m e nte
e s pal
h ado por todos os m dul
os , o q ue
dificul
ta a m anute no e a e vol
uo do
cdigo. Em PO A dize m os q ue is to s o
inte re s s e s e ntre cortante s , pois cortam
trans ve rs al
m e nte todos os m dul
os . A PO A
ve m re s ol
ve r e s te probl
e m a introduzindo
um novo nve lde s e parao de inte re s s e s ,
os as pe ctos .
Bas icam e nte e s te s inte re s s e s trans ve rs ais
apl
icao s o e ncaps ul
ados ne s tas novas
unidade s
m odul
are s
e
pos te riorm e nte
fundidas com as cl
as s e s num nico s is te m a.
Is to no s aum e nta a facil
idade de
m anute no de s tas funcional
idade s da
apl
icao, vis to q ue tudo s e e ncontra num
nico l
ocal
, com o aum e nta as pos s ibil
idade s
de re util
izao das cl
as s e s noutros conte xtos ,
pois e s tas e ncontram -s e l
im pas de s tas
funcional
idade s q ue norm al
m e nte variam
m uito de cas o para cas o.

a program ar

O As pe ctJ
O As pe ctJ (h ttp://w w w .e cl
ips e .org/as pe ctj) foi
a prim e ira l
inguage m O A de s e nvol
vida e ,
provave l
m e nte ,
a
m ais
us ada.
Es ta
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
o As pe ctJ ne ce s s rio conh e ce r trs
conce itos fundam e ntais pre s e nte s na PO A :
advice s - s o fragm e ntos de cdigo
com as ace s re fe re nte s aos inte re s s e s
e ntre cortante s ;
join points - s o l
ocais de um program a
onde os advice s s e ro e xe cutados , q ue
pode m s e r a ch am ada/e xe cuo de um
m todo, o ace s s o a m e m bros de um a
cl
as s e , a criao de um obje cto, o
l
anam e nto de e xce pe s , e tc.;
pointcuts - s o um conjunto de join
points , de finidos s e gundo um de te rm inado
critrio, q ue ide ntificam os l
ocais onde um
de te rm inado advice s e r e xe cutado.

Pointcuts
G e ne ricam e nte , a de finio de
pointcutobe de ce s e guinte s intaxe :

um

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
obje cto de um de te rm inado tipo;
args - e nvio de m e ns age ns e m q ue os
argum e ntos s o de um de te rm inado tipo.
A e xpre s s o pode s e r um a pal
avra (nom e
de um a cl
as s e , nom e de um m todo, e tc.),
m as tam bm te m os caracte re s e s pe ciais :
*- re pre s e nta um a s e q uncia de
caracte re s q ual
q ue r, de s de q ue no
conte nh a pontos ;
.. - re pre s e nta um a s e q uncia de
caracte re s q ual
q ue r, m e s m o conte ndo
pontos ;
+ - re pre s e nta as s ubcl
as s e s de um a
dada cl
as s e .
Ve jam os agora al
guns e xe m pl
os :
pointcu ttos tr() : e xe cu tion(String toString());
Re pre s e nta todas as e xe cue s do
m todo toString. Pode m os re s tringir ape nas
e xe cuo do m todo a obje ctos da
cl
as s e Xpto s ubs tituindo String toString() por
String Xpto.toString(), ou a obje ctos da
cl
as s e Xpto e todas as s uas s ubcl
as s e s
faze ndo String Xpto+ .toString();

pointcut <nome>() : <tipo>(<padro>);

O nde :
<nom e > o ide ntificador de s te pointcut
<tipo> indica a q ue tipo de join point
nos re fe rim os (ch am ada de um a funo,
ace s s o a um atributo, e tc.);
<padro> um a e xpre s s o q ue
re s tringe os join points a s e re m
cons ide rados q ue l
e s q ue faze m m atch ing
com e s ta e xpre s s o.
D e s e guida indicam -s e
points m ais im portante s :

os tipos de

join

cal
l- ch am ada de um a funo;
e xe cution - e xe cuo de um a funo;
ge t- cons ul
ta dos atributos de um
obje cto;
s e t- al
te rao dos atributos de um obje cto;

<11>

pointcu ts e ts () : cal
l
(*Xpto*.s e t*(..));
Re pre s e nta a ch am ada de
m todos
com e ados pe l
a pal
avra s e t de cl
as s e s
com e adas pe l
a pal
avra Xpto, com um
nm e ro q ual
q ue r de argum e ntos . Pode m os
l
im itar ape nas a m todos q ue re ce bam
argum e ntos de um de te rm inada tipo, por
e xe m pl
o, faze ndo * Xpto*.s e t*(int,String)
l
im itaram os ape nas aos m todos cujo o
prim e iro argum e nto fos s e um inte iro e o
s e gundo um a s tring (para al
m de ve rificar
todas as outras condie s j indicadas ).
pointcu tge ts () : ge t(private String abc*);
Re pre s e nta todos
os
ace s s os
(para
cons ul
ta) a atributos private do tipo String,
com e ados por abc.

a program ar
Para de finirm os pointcuts tam bm te m os nos s a dis pos io 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). cl
aro 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 opo 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 cificao de advice s .

Advice s
Se os pointcuts indicavam o conjunto de pontos de um a apl
icao onde q ue ram os re al
izar
outras ope rae s , os advice s pe rm ite m -nos de finir q uais s o e s s as ope rae 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 ace s ante s de um join point;
afte r, q uando q ue re m os e xe cutar ace s de pois de um join point, e xis tindo trs 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
l
ana um a e xce po.
around , q uando q ue re m os e xe cutar ace 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;
private boolean a;

public class Classe2 {


private int y;

public Classe1(int x,boolean a) {


this.x = x;
this.a = a;
}

public Classe2(int y) {
this.y=y;
}

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

public void setY(int y)


{this.y=y;}

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


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

<12>

public String toString() {


return ("y=" + this.y);
}
}

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 rl
os de form a a q ue pas s e m a criar um a s tring q ue conte nh a tam bm 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 cuo do toString(),
tam bm capta o obje cto ao q ualo m todo e nviado atravs 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 bm 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 ul
tado.
No prxim 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
atravs 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 bm us ada a varive lth is JoinPointStaticPart, q ue contm um a s rie de
inform ae s s obre o join point e m q ue o as pe cto vai s e r e xe cutado. Exis te tam bm a varive 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 prxim o e xe m pl
o.
Suponh am os agora q ue q ue ram os re gis tar todas as al
te rae s re al
izadas e m q ual
q ue r um a
das cl
as s e s . Para al
te rar o val
or 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 cue s de s te s m todos . Tam bm 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 varive 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 ul
tado 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 fcios 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 todol
ogia, bas tante m ais com pl
icada do q ue a abordage m O O .
difcilde finir a e s trutura do s oftw are , ide ntificando corre ctam e nte todas as parte s q ue o
com pe 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 finio
dos as pe ctos (aconte ce vrias ve ze s de finir as pe ctos q ue originam cicl
os infinitos , pois ao
e xe cut-l
os crivam os s ituae s onde outros as pe ctos pode riam s e r e xe cutados ), q ue por
ve ze s no s o m uito vis ve is . Subl
inh a-s e ainda q ue no 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 .

Re fe rncias
h
h
h
h

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

<14>

Rui G onal
ve s

Por l
tim o re fe ria-s e q ue e s te te xto ape nas um a introduo PO A/As pe ctJ e , com o tal
, m uitas
das capacidade s de s te novo paradigm a no 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 pgina w e b do As pe ctJ,
onde pode r e ncontrar um a vas ta docum e ntao s obre e s te te m a.

a program ar
O cdigo do cl
ie nte e do s e rvidor no tm
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
icao
q ue tanto pode funcionar com o cl
ie nte
com o para s e rvidor. A grande dife re na
e s t no s e u com portam e nto, ou s e ja, o
s e rvidor inicia a e xe cuo e aguarda um a
l
igao, o cl
ie nte inicia a e xe cuo e a
l
igao ao s e rvidor.

Sock e ts de Be rk e l
y
em l
inguage m
C
Na ante rior e dio 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 bm foram de s critas
as principais dife re nas e ntre UD P e TCP
.
Ne s te artigo vam os faze r um a bre ve
introduo aos Sock e ts de Be rk e l
ey em
l
inguage m C para am bie nte s UNIX e Linux.
Bas icam e nte os Sock e ts de Be rk e l
e y s o um
API, is to , um conjunto de bibl
iote cas de
fune s para a program ao s obre
protocol
os de com unicao.

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 cuo 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
izao. O cl
ie nte te m de
conh e ce r obrigatoriam e nte a l
ocal
izao
do s e rvidor (IP) para pode r l
igar-s e e
com unicar com e l
e.

<15>

Para dar um e xe m pl
o prtico de com o
funcionam os s ock e ts , vam os faze r um
s im pl
e s par de apl
icae s e m q ue o
cl
ie nte e nvia um a pal
avra com l
e tras
m ins cul
as para o s e rvidor. O s e rvidor trata
de conve rte r as l
e tras e m m ais cul
as
de vol
ve ndo a pal
avra ao cl
ie nte . Vam os
util
izar o m odo TCP do protocol
o TCP/IP e o
conjunto de apl
icae s s o fe ch adas
q uando o cl
ie nte digita a pal
avra e xit.
Ante s de m ais nada convm ve r com o
funciona o e s tabe l
e cim e nto de
um a
l
igao TCP
. A s e guinte figura bas tante
e xpl
cita q uanto a is s o:

a program ar
Agora vam os ve r pas s o a pas s o as fune s
util
izadas :

Cl
ie nte
1 - Conjunto de bibl
iote cas a adicionar
s tradicionais :
#include
#include
#include
#include
#include
#include
#include

<sys/types.h>
<sys/socket.h>
<netdb.h>
<netinet/in.h>
<arpa/inet.h>
<sys/ioctl.h>
<unistd.h>

2 - D e finir a e s trutura
(s e rvidor) e as varive is :

5 - Es tabe l
e ce r a l
igao ao s e rvidor:
// efectua a ligao ao servidor.
// Se falhar (por exemplo o servidor
// estar em baixo) o programa termina
if(connect(sock, (struct sockaddr
*)&target, ad1) == -1)
{
close(sock);
puts("Conexao falhou!");
exit(0);
}

6 - L um a pal
avra do te cl
ado
e nq uanto e s ta for dife re nte de e xit.
Em s e guida e nvia-a para o s e rvidor e
re ce be -a com l
e tras m ais cul
as :
de

de s tino

// definio da estrutura do servidor


struct sockaddr_in target;
// criar o socket, indicando a famlia
// a que pertence (AF_INET), o tipo de
// protocolo (neste caso TCP // SOCK_STREAM) e o parmetro do
// protocolo (0).
int sock = socket(AF_INET,SOCK_STREAM,0);
// variveis
char palavra[50], palavra2[50];
// tamanho da estrutura do servidor
int ad1 = sizeof(target);

do {
scanf("%s", palavra);
// envia para o servidor os dados
// contidos na varivel palavra
write(sock, palavra, 50);
if(strcmp(palavra, "exit") != 0){
// recebe do servidor os dados
// e guarda-os na varivel
// palavra2
read(sock, palavra2, 50);
printf("%s\n", palavra2);
}
}while(strcmp(palavra, "exit") != 0);

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);

4 - D e finir as proprie dade s do s e rvidor


ao q ualnos vam os l
igar:
// indica a famlia do protocolo
target.sin_family = AF_INET;
// especifica o endereo (IP) do
// servidor
target.sin_addr.s_addr =
inet_addr("127.0.0.1");
// porta que o programa vai usar
target.sin_port = htons(8450);

Se rvidor
1 - Conjunto de bibl
iote cas a adicionar
s tradicionais :
#include
#include
#include
#include
#include
#include

<16>

<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<arpa/inet.h>
<unistd.h>
<ctype.h>

a program ar

2 - D e finir a e s trutura do cl
ie nte , do
s e rvidor e as varive is :
// definio das estruturas do
// cliente e do servidor
struct sockaddr_in me, from;
// criao dos sockets.o sock
// declarado identicamente ao cliente
int newSock, sock =
socket(AF_INET,SOCK_STREAM,0);
// declarao das variveis
int tam = 0, i = 0;
int ad1 = sizeof(me);
char palavra[50], palavra2[50];

6 - Es pe rar por pe didos . criado um


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 :
// coloca o socket escuta.
// Podem ser mantidos em espera 5
// pedidos de ligao
listen(sock, 5);
// gera um novo socket especfico
// para essa ligao
newSock = accept(sock, (struct
sockaddr *)&from, (void *)&ad1);
// fechar o socket antigo
close(sock);

3 - Inicial
izar a e s trutura:
// inicializa a estrutura do servidor
bzero((char *)&me, ad1);

7 - Cicl
o infinito q ue trata dos pe didos
do cl
ie nte :

4 - D e finir as proprie dade s do s e rvidor:

for(;;){
// recebe os dados do cliente e
guarda-os na varivel palavra
read(newSock, palavra, 50);
if(strcmp(palavra, "exit") != 0){
tam = strlen(palavra);
for(i=0;i<tam;i++){
if((palavra[i]>='a') &&
(palavra[i]<='z')){
palavra2[i] =
toupper(palavra[i]);
}
}
palavra2[i] = '\0';
// envia os dados que esto na
varivel palavra2 para o cliente
write(newSock, palavra2, 50);
}
else{
close(newSock);
exit(0);
}
}

// indica a famlia do protocolo


me.sin_family = AF_INET;
// fica associado a todos os
// endereos IP do host local
me.sin_addr.s_addr = htonl(INADDR_ANY);
// porta em que o servidor vai
// estar escuta
me.sin_port = htons(8450);

5 - Al
ocar a porta. Se e s tive r ocupada
fe ch ado o s e rvidor.
// se a porta estiver ocupada o
servidor no pode correr e
terminado
if(bind(sock, (struct sockaddr
*)&me, ad1) == -1)
{
close(sock);
puts("Porta Ocupada!");
exit(0);
}

<17>

a program ar

Se rvidor
#include
#include
#include
#include
#include
#include
#include
#include
#include

<stdio.h>
<string.h>
<stdlib.h>
<sys/types.h>
<sys/socket.h>
<netinet/in.h>
<arpa/inet.h>
<unistd.h>
<ctype.h>

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

<18>

a program ar

Cl
ie nte
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

<stdio.h>
<string.h>
<stdlib.h>
<sys/types.h>
<sys/socket.h>
<netdb.h>
<netinet/in.h>
<arpa/inet.h>
<sys/ioctl.h>
<unistd.h>

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

Se no pode tam bm pe s q uis ar na Inte rne t j q ue e xis te inm e ra inform ao no q ue diz


re s pe ito API s ock e ts de Be rk e l
e y.

<19 >

Pe dro Te ixe ira

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
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

a program ar

Es tats ticas e m PH P
1 Parte

M aani PH P/SW FCh arts


um a fe rram e nta l
ivre q ue nos pe rm ite
criar grficos e m Sh ock w ave Fl
as h e m
te m po re al com dados e s tticos ou
dinm icos . Encontram
o dow nl
oad e
inform ao 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 fune s m ais
re l
e vante s . O s cript na s ua total
idade ,
im pl
e m e nta 4 grficos ( 2 de barras , e 2
circul
are s ), e 4 tabe l
as re s um o. No e ntanto
ape nas ire m os fal
ar aq ui da cons truo de
um grfico e de um a tabe l
a re s um o. Na
concl
us o do artigo (na prxim a e dio)
s e r re fe rido um l
ink para o s criptcom pl
e to.

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
pe s s oas por l
pas s aram e de onde
s e riam e s s as pe s s oas . A curios idade
h um ana natural e l
e va a e s tas
q ue s te s . Es ta a prim e ira parte dum
tutorialq ue s e r concl
udo na prxim a
e dio.
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
de s e nvol
vido aq ui um tutorial pas s o-apas s o de form a a q ue no finalde s te artigo
te nh a um s is te m a de e s tats ticas s im pl
es e
funcionalcom as inform ae s m ais util
izadas .
Todas e s tas inform ae s s e ro m os tradas
com auxl
io vis ualde grficos , para q ue os
re s ul
tados
s e jam
m ais
ape l
ativos
aos
vis itante s .
Ante s de com e ar a program ar, convm
faze r o dow nl
oad de al
gum as cl
as 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. So 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. Ns ire m os util
izar a ve rs o
l
ivre para nos re tornar o cdigo e nom e do
Pas de orige m do vis itante s . Pode ro re al
izar
o dow nl
oad e m :
h ttp://w w w .m axm ind.com /app/ge oip_country

<20>

Ins tal
ao
Aps te r fe ito o dow nl
oad de am bas as
fe rram e ntas (G e oIP e M aani Ch arts ), de ve r
de s com pact-l
as para a raiz do s e u
w e bs ite .
O s fich e iros de s critos nas prxim as pginas
de ve ro tam bm s e r guardados na raiz do
w e bs ite .

SQ L
Com o o proje cto ir s al
vaguardar os dados
de todos os vis itante s q ue pas s am no
w e bs ite , de ve r guardar os re s pe ctivos
dados num a bas e de dados e m M y SQ L.

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 ae 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 funo m ais im portante de todo o s is te m a. A funo 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 funo 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 Pas 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 prprio PH P te m q uas e todas as ins true s ne ce s s rias para re col
h e r a inform ao q ue
ne ce s s ita. A varive l$_SERVER pe rm ite s abe r o IP do vis itante atravs de REM O TE_AD D R. Com
H TTP_REFERER cons e guir s abe r de q ue pgina originrio. No e ntanto o H TTP_REFERER um a
ins truo m uito traioe ira, pois por ve ze s d inform ae s incorre ctas q ue te m q ue s al
vaguardar.
Se no e xis tir ne nh um H TTP_REFERER s ignifica q ue o util
izador provave l
m e nte ins e riu dire ctam e nte
o URLdo w e bs ite e com o tal
, ficar catal
ogado com o URLD ire cto. Cas o e xis ta um H TTP_REFERER
e nto no 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
gne ro: w w w .portugal
-a-program ar.com . Para talutil
iza um a s rie de ins true s do PH P q ue ir
is ol
ar a inform ao q ue pre te nde de toda a inform ao q ue ve m a m ais no URL.
O l
tim o probl
e m a a de re s ol
ve r pre nde -s e com o facto de q ue s e fr e fe ctuado um REFRESH na
prpria pgina 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 tats ticas im portante q ue te nh a conh e cim e nto de q uais as pginas m ais
vis itadas no s e u w e bs ite . Util
izar $_SERVER['PH P_SELF']
, contudo ao util
izar e s ta ins truo re ce be
inform ao adicionalno URLq ue no 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 pgina 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][09]|5[0-5]))$", $visitor_hostname)) {
$visitor_hostname = "Indefinido";

Para q ue pos s a s abe r q ualo cdigo e o nom e do Pas do vis itante atravs do IP vol
ta a util
izar a
cl
as s e G e oIP com as fune 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 no cons e guir
s abe r o nom e do dom nio por e s tar a s e r util
izado um Se rvidor Annim o, ou ainda a s e r util
izado
um s e rvidor q ue s e e s conde por vrias inte rl
igae 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. Sal
vaguardando e s ta h ipte s e , te s ta s e o q ue re tornado um IP
vl
ido com a funo e re g(), cas o s e ja um a condio ve rdade ira e nto 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 patve lcom todos os Expl
oradore s e xis te nte s . bvio q ue com patve 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 cdigo acim a de s crito pode s e e nto ve rificar q ue a ins truo $_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
izao do s e u s ite .
Aq ui, ape nas col
ocado al
guns Expl
oradore s a ttul
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 atravs da 's tring' re tornada pe l
o
'H TTP_USER_AG ENT', tam bm 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 bm aq ui o cdigo 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 ro na Bas e
de D ados , te rm inando as s im a funo 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 nto a 'Cl
as s e ' re s pons ve l
pe l
a ge rao dos grficos e re l
atrios atravs dos dados e xis te nte s na Bas e de D ados .
A prxim a funo da 'Cl
as s e Statis tics ' de m e ra pe rs onal
izao do grfico para o s e u
as pe cto vis ual
, com o talno ir s e com e ntada. M ais inform ao s obre a pe rs onal
izao dos
grficos 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
l
e 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 funo pre para-s e o as pe cto vis ualpara o grfico de col


unas , m as e xis te tam bm
um a funo para pe rs onal
izao do grfico circul
ar no Scriptcom pl
e to.

<24>

a program ar
Com e s ta funo pre para-s e o as pe cto vis ualpara o grfico de col
unas , m as e xis te tam bm
um a funo para pe rs onal
izao do grfico 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 funo ir ge rar o G rfico 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


izao dos grficos e re l
atrios varive l
, cria-s e um
'array ' dos dias e xis te nte s e ntre as duas datas com os rtul
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 rval


o dos dias e s col
h idos ch e gou a al
tura de pre e nch e r um outro 'array '
com o m e s m o nm e ro de pos ie 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 grfico util
iza-s e
ante riorm e nte para os grficos de col
unas .

a funo criada

A form a de pre e nch e r a inform ao para ge rar o grfico e m Fl


as h com o num program a de
Fol
h a de Cl
cul
o. Cria-s e o rtul
o do 'X' e do 'Y' e no cruzam e nto dos rtul
os pre e nch e -s e com os
dados re s pe ctivos . Aps o pre e nch im e nto da varive l'$ch art' com todos os dados ne ce s s rios
ge rao, re torna-s e e s s a varve lq ue ir s e r util
izada m ais tarde pe l
a Cl
as s e Ch arts . O re s tante
artigo s e r apre s e ntado na prxim a e dio.

<25>

Bruno Vaz

$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"

s e gurana

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


ace didos atravs de um ide ntificador
nico, conh e cido por e nde re o IP, q ue
os pe rm ite l
ocal
izar.

Ph arm ing
Introduo
Nunca o com putador foi util
izado para
arm aze nar tanta inform ao e tantos
dados pe s s oais com o agora. E no
ne ce s s rio s e r-s e m uito conh e ce dor para
cons e guir re tirar e s s as inform ae s de um
com putador s e e s te no e s tive r be m
prote gido. H oje e m dia, com a cre s ce nte
util
izao da Inte rne t para q uas e tudo,
ne ce s s rio te r o conh e cim e nto s obre o q ue
l
h e pode aconte ce r s e for al
vo de um
ataq ue
por parte
de
al
gum
m al
inte ncionado. Exis te m inm e ros e s q ue m as
on-l
ine nos q uais os m e nos pre ve nidos
pode m s e r apanh ados . Ne s te artigo vam os
fal
ar um pouco de Ph arm ing, um a tcnica
q ue
de riva do Ph is h ing e
q ue

com pl
e m e ntar de s ta s e gunda

O q ue ?
O Ph arm ing um a variante m ais s ofis ticada
de Ph is h ing q ue e xpl
ora vul
ne rabil
idade s
dos brow s e rs , dos s is te m as ope rativos e dos
s e rvidore s de D NS (D om ain Nam e Sy s te m )
para cons e guir conduzir os util
izadore s a
s ite s fictcios com o obje ctivo de obte r os
cdigos de ace s s o.

<26>

O e nde re o IP cons titudo por q uatro


nm 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 difce is de
m e m orizar para o cre 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 fcilde m e m orizar
(por
e xe m pl
o,
o
w w w .portugal
-aprogram ar.org m uito m ais fcil 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
de s te m odo ace de r ao s ite pre te ndido. Se
e xis tir al
gum e rro na traduo do nom e de
dom nio para e nde re o de IP e e s s e e rro
tive r orige m e m al
gum com inte ne s
m al
icios as pode m os cons ide rar q ue e xis te
um ataq ue de Ph arm ing bas e ado nas
al
te rae s de D NS's .

O ataq ue
Ataq ue nos s e rvidore s D NS
Al
guns s oftw are s us ados e m s e rvidore s D NS
pos s ue m fal
h as de s e gurana, program ao
ou m configurao, q ue
pe rm ite m
"e nve ne nar" a m e m ria te m porria (cach e )
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
configurae s
atribuindo
nom e s
de
dom nio a IPs q ue no l
h e s de ve riam
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 cfico, o
e nde re o IP as s ociado ao dom nio portugal
a-program ar.org, por e xe m pl
o, pode ria s e r
m udado
de
19 5.22.25.172
para
209 .85.129 .9 9 num s e rvidor D NS atacado e
cons e q ue nte m e nte q uando s e introduzis s e
no brow s e r w w w .portugal
-a-program ar.org
e s te s e ria re dire ccionado para a pgina
portugue s a do G oogl
e.

s e gurana
Ne s te ataq ue , um s e rvidor de nom e s
(s e rvidor D NS) com prom e tido, de talform a
q ue as re q uis ie s de ace s s o a um s ite
fe itas pe l
os util
izadore s de s te s e rvidor s e jam
re dire ccionadas para outro e nde re o, s ob
control
o dos intrus os .
Es te tipo de ataq ue s tam bm 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 -tria, 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
fich e iro, e ncontrado na m aioria das ve rs e s
do W indow s e outros s is te m as ope rativos ,
incl
ui um a l
is ta de nom e s de s ite s as s ociados
a de te rm inados e nde re os e l
e ctrnicos . Se
e s te s
e nde re os
fore m
al
te rados , o
com putador do util
izador pode r dire ccionl
o para um fal
s o s ite s e m pre q ue o nom e de
um s ite l
e gtim o pre s e nte na l
is ta for digitado
no brow s e r.

Ataq ue aos util


izadore s

Util
ize um a fire w al
lpara control
ar e ve rificar
a com unicao do com putador com a
Inte rne t.
Em cas o de dvida da ve racidade de um a
pgina ou e -m ail
, contacte a e ntidade
m as no util
ize os contactos e xis te nte s no e m ailou pgina.

Concl
us o
D e pois
de
l
ido e s te
artigo e s tar
ce rtam e nte m ais inform ado e m ais cie nte
do q ue pode aconte ce r, de com o s e r
burl
ado on-l
ine , m as is to ape nas um a
gota no oce ano da s e gurana porq ue o
m undo das burl
as on-l
ine im e ns am e nte
vas ta e no pos s ve labord-l
as todas e m
conjunto. No e ntanto, o Ph arm ing um a
das tcnicas 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 no cair e m e rros
de s ne ce s s rios .

Es tas invas e s do-s e no com putador da


vtim a faze ndo m odificae s nos fich e iros
h os ts . Ao contrrio 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
igao ou
ins tal
ar al
gum program a. Pode h ave r de s de
a
ins tal
ao
de
s py w are s
para
propaganda e publ
icidade , im itao
pe rfe ita de um s ite bancrio q ue te m por
obje ctivo roubar os dados da vtim a (aq ui
e ntra a juno do Ph arm ing com o Ph is h ing).

Ins tal
e um antivrus , m ante nh a-o activo e
actual
izado.
M ante nh a as apl
icae s ins tal
adas 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>

Joo Pe re ira

M e didas de prote co

el
e ctrnica
Em l
igae s ponto a ponto ponto a ponto:
SPI, RS232 Ligae s m ul
tiponto : I2C, USB,
RS422, RS485, CAN (Control
l
e r Are a
Ne tw ork ).

Re de CAN

Re de CAN e
m icrocontrol
adore s

Introduo
No s e guim e nto do artigo M icrocontrol
adore s
da e dio 4 de s ta nos s a re vis ta vam os
abordar ne s te artigo, al
guns conce itos
s im pl
e s introdutrios das topol
ogias das
re de s de dados . Para e xe m pl
ificar a
apl
icabil
idade de s tas re de s
vam os us ar
m icrocontrol
adore s da M icroch ip (Pics ). No
final s e ro apre s e ntados al
guns e xe m pl
os
prticos re l
acionados com o conte do do
artigo.

Conce itos de l
igae s de
dis pos itivos
Nal
guns
s is te m as
el
e ctrnicos
h
a
ne ce s s idade de m anipul
ar e tom ar de cis e s
com bas e e m inform ao q ue no e s t
l
ocal
m e nte ace s s ve l
, be m com o h a
ne ce s s idade de trans fe rir inform ao para
outros l
ocais . Para s e pode r l
idar com e s tas
s ituae s e xis te m re de s q ue inte rl
igam dois
ou m ais pontos de inte re s s e . D e um m odo
s im pl
is ta, pois e xis te m vrias variante s de
inte rl
igae s , e s tas pode m s e r ponto-aponto ou m ul
ti-ponto. Talcom o os nom e s
indicam , a prim e ira l
iga um ponto a outro
ponto.

E a s e gunda l
iga vrios pontos , onde
pos s ve lq ue e xis ta troca de inform ao e ntre
todos , pode ndo e xis tir um m as te r ou no

<28>

D e fine ape nas a l


igao fs ica e o control
o
do ace s s o ao m e io de trans m is s o (l
igao
de dados ).Foi de s e nvol
vido para apl
icae s
e m be dde d (l
igao dos control
os nos
m otore s de autom ve is ) - Bos ch 19 9 1.
Um a re de Can com pos ta por um grupo de
ns . Cada n pode com unicar com
q ual
q ue r outro n da re de . A com unicao

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
M ul
tipl
e Acce s s / Col
l
is ion D e te ction and
Col
l
is ion Re s ol
ution), ou s e ja, cada n ante s
de e nviar inform ao para a re de , e s cuta
o q ue s e pas s a na re de , s e e ve ntual
m e nte
e s ta e s tive r l
ivre , e nto col
oca a s ua
m e ns age m na re de , s e dois ou m ais ns
te ntare m col
ocar inform ao na re de ao
m e s m o te m po, e nto d-s e um a col
is o.
Am bos de te ctam e s s a col
is o e e s pe ram
um te m po al
e atrio at vol
tar a trans m itir.
Ao contrrio do artigo da e dio 4, onde foi
us ado um PIC 16f877 ne s te artigo iro s e r
us ados PIC18f2580. O obje ctivo do trabal
ho
s e r pr 4 Pics a com unicar e ntre s i. Para
fcilim pl
e m e ntao vam os us ar um M as te r
e 2 Sl
ave s . D e notar q ue o CAN no im pl
ica
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 tratgia.
Em cada n vam os te r um Le d e um
pote ncim e tro. O util
izador, atravs do
te rm inalir e s col
h e r um n e pe de a e s s e
n o val
or do pote ncim e tro, ou e nto 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 unicao 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 dio.

el
e ctrnica

Para no tornar e s te artigo m uito e xte ns o ne m m uito e s pe cfico, as s um e -s e q ue as fune s da


USART, AD Cs j e s to 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
izao de de te rm inados proje ctos bas tante grande , a M icroch ip
dis ponibil
iza as s uas principais fune 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, no iro 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 rao dos Pics , re gis tos de Baud
Rate , fil
tros e m s caras dos buffe rs CAN.

Program ao:
O s ns B,C vo s e r idnticos , o q ue vai dife rir nom e pe l
o q uale l
e iro 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 po e apre s e ntao
da inform ao. 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
izao dos vrios 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
//Inicializao da USART
//SYNC = 0, BRGH = 1, BRG16 = 0
//baudrate=115200 -->spbrgh=21

fosc=40Mhz,

OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF & USART_ASYNCH_MODE


&USART_EIGHT_BIT & USART_CONT_RX & USART_BRGH_HIGH, 21);
//Inicializao do modulo ECAN
ECANInitialize();
INTCONbits.GIE = 1; //Enable interrupts

<29 >

el
e ctrnica
O M as te r s ir actuar cons oante a
inform ao re ce bida do util
izador. Us ando
um a inte rface com bas e no H y pe r Te rm inal
,
as s im o M as te r vai s e r re s pons ve l pe l
o
e nvio de s trings q ue iro s ol
icitar a
inform ao ao util
izador. O utra e s tratgia
pode ria s e r tom ada, cas o a inte rface fos s e
bas e ada e m Vis ual Bas ic, Java , pois
ne s s as circuns tancias do ponto de vis ta
do control
ado, s inte re s s ava a orde m
propriam e nte dita.
Ve r no final a
print_m e nu().

e s trutura

da

funo

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 ao a um n
ou 's ' cas o s e ja para e nviar:

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

Re ce bido o nom e do n te m de s e ve rificar


se e l
e e xis te , cas o no e xis ta aborta-s e a
funo e vol
ta-s e a pe dir um a nova funo:

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

case 's':
Putsr("\r\r\r\r\r\r\r\r");
Putsr("\r########################");
Putsr("\r#_Select NODE");
Putsr("\r-->");
can_tx=Getn();
//teste se o n existe
if(!find_node(can_tx))
{
Putsr("\rNODE DOESNT EXIST\r");
Putsr("\r press any key to
continue");
Re();
can_tx=0;
break;
}
break;

Cas o a l
e tra re ce bida no s e ja ne m o 'r'
ne m o 's ':
default:
Putsr("\r parametro incorrecto\r");
break;

Cas o o n e xis ta e m can_rx te re m os o nom e


do n do q ualpre te nde m os re ce be r o val
or
do pote ncim e tro. AD C_REQ um a m acro
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 facil
itar a
program ao e torn-l
a m ais l
e gve l
.
if(can_rx!=0)
{
data[0]=ADC_REQ;

A funo ECANs e ndM e s s age um das


m uitas
funoe s
dis ponibil
izadas
pe l
a
M icroch ip, para q ue s e pos s a trabal
h ar com
o protocol
o CAN s e m q ue para is s o s e ja
ne ce s s rio um a grande pe rda de te m po na
m anipul
ao dos re gis tos dos Pics

break;

Cas o a funo pe dida pe l


o util
izador s e ja
a de e nvio e nto re ce bido um 's ':

<30>

As s im , e s ta funo te m com o parm e tros de


e ntrada:
Ide ntifie r - nom e do node de s tinatrio
D ata - array onde e s to as m e ns age ns
Size - nm e ro de e l
e m e ntos do array data
ECAN_TX_STD _FRAM E - fl
ags re l
ativas
ao funcionam e nto do m dul
o ECAN.

el
e ctrnica
D e notar q ue s s e avana no cdigo
q uando a m e ns age m for e nviada. aq ui
ne s te ponto q ue e ntra o protocol
o CSM A/CD CR. D o ponto de vis ta do program ador o q ue
inte re s s a q ue a m e ns age m s e ja e nviada,
no e ntanto pos s ve ls abe r porq ue q ue e l
a
no foi e nviada prim e ira, m as e s te
as s unto no vai s e r abordado ne s te artigo.
while(
ECANSendMessage(can_rx,data,1,
ECAN_TX_STD_FRAME) );
Putsr("\rRequest send...");
Putsr("\rwaiting...\r");

A
funo
ECANRe ce ive M e s s age
form al
m e nte ide ntica ante rior.

O val
or 0xc (cdigo abaixo) prim e ira vis ta
no te m ne nh um s ignificado, no e ntanto e l
e
indica q ue a funo a s e r de s e m pe nh ada
pe l
o node a de ace nde r o l
e d, talcom o as
m acros AD C_VALe AD C_REQ
data[0]=0xc;
while( !ECANSendMessage(can_tx,
data,4,ECAN_TX_STD_FRAME));
can_tx=0;
}

As s im e s t concl
uda a ope rao do m as te r.

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

O m as te r te m um ide ntifie r igualao by te 0xa.

Talcom o foi dito ante riorm e nte , os outros dois


ns vo te r o cdigo m uito pare cido. As
dife re nas vo e s tar nos ide ntificadore s das
m e ns age ns CAN, pois um vai te r q ue actuar
q uando for re ce bido o caracte r B e o outro
te m q ue actuar q uando for re ce bido o caracte r
C.
As s im s e ndo, s ir s e r apre s e ntado o cdigo
de um dos ns .

if((id==0x)&&(data[0]=ADC_VAL))
{
Putsr("\r\rADC VALUE\r --> ");

Talcom o no artigo da e dio 4 a AD C ir


l
e 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
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 ntao s e ja l
e gve lpe l
o util
izador.
aux_char=data[1];
aux_int=aux_char*1.9;
Putn(aux_int,3,2);
can_rx=0;
}

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

Tipo de s ada do porto B (in=1 e out =0), vis to


ol
e d ir e s tar l
igado na s ada RB7.
TRISBbits.TRISB7=0 ;
LATBbits.LATB7=0;

Se a ope rao e xigida pe l


o util
izador for a de
ace nde r o l
e d e s e o n de s tinatrio e s tive r
l
igado, ou s e ja, s e e xis tir, can_tx ir s e r
dife re nte de ze ro.
if(can_tx!=0)
{
Putsr("\r########################");
Putsr("\r#_Number of repetitions ");
Putsr("\r-->");
data[1]=Getn();

//Enable interrupts
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
can_tx=0;
can_rx=0;
while(1)
{

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 nto re al
iza a ope rao

<31>

el
e ctrnica
while(!ECANReceiveMessage(&id,data,
&dataLen, ECAN_TX_STD_FRAME));
if(id==0xb)
{

Na prim e ira pos io do array de dados do


CAN e s t de finida a funo a re al
izar
switch (data[0])
{
case ADC_VAL:
data[0]=ADC_VAL;

Na s e gunda pos io do array data


col
ocado o val
or da adc. Es s e val
or s e r um a
m dia de vrias l
e ituras
data[1]=adc_read(0);
id=0; //send to master
while(ECANSendMessage(id,data,4,
ECAN_TX_STD_FRAME) );
break;
case LED_VAL:
for(i=0;i<data[1];i++)
{
LATBbits.LATB7=1;

Para q ue s e ja vis ve lao ol


h o h um ano a l
uz do
l
e d ao pis car te m de s e criar al
guns atras os ,
para q ue a trans io no s e ja ins tantne a
Delay10KTCYx(255);//255ms
Delay10KTCYx(255);//255ms
LATBbits.LATB7=0;
Delay10KTCYx(255);//255ms
Delay10KTCYx(255);//255ms

Na prtica e s te tipo de re de s CAN pode m s e r


us adas nas m ais variadas apl
icae s .
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
m ais variados e l
e m e ntos de um carro,
nom e adam e nte
e q uipam e ntos
de
s e gurana, m onitorizao, control
o O CAN
ao l
ongo do te m po j te ve
vrias
actual
izae s , com vis ta a m e l
h orar a s ua
pe rform ance . O utro tipo de apl
icao pode
s e r por e xe m pl
o a de um rob. Um
m icrocontrol
ador pode re ce be r inform ao
dos m ais variados s e ns ore s atravs de um
barram e nto CAN, talcom o e nviar inform ao
para os actuadore s (m otore s ). Tom ando
com o e xe m pl
o a figura 2, ao l
ongo da
e s trutura do rob s s o ne ce s s rios dois fios (
CAN h igh e CAN l
ow ) para q ue todos os
pe rifricos pos s am com unicar e ntre s i.
Na dom tica, tam bm s e pode us ar re de s
CAN.
Supondo
q ue
se
te m
vrios
m icrocontrol
adore s , l
m padas e s e ns ore s de
pre s e na, 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
atravs de um barram e nto CAN, o q ue torna
s im pl
e s a s ua im pl
e m e ntao.No e ntanto,
s e m pre ne ce s s rio faze r o acondicionam e nto
do s inal vindo dos s e ns ore s e control
ar os
actuadore s q ue iro control
or a inte ns idade
das l
m padas (O n-O ff, PW M ,...), proce s s o e s te
idntico ao da e dio 4.

}
break;
}
}
}
}

Em bora todos e s te s prog ram as s e jam


s im pl
e s, e l
e 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 .
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 rao
idntica ao princpio apre s e ntado (por
e xe m pl
o
o
M C P2515
tam bm
da
M icroch ip).

<32>

Ricardo Roch a

Concl
us o

te cnol
ogias

M ul
ti-Core
Introduo

Sy m m e tric M ul
ti-Proce s s ing

A inds tria de proce s s adore s te m vindo a


e vol
uir a um pas s o cons tante nos l
tim os
anos . A prol
ife rao dos com putadore s e das
tare fas q ue l
h e s incum bim os continuam a
pre s s ionar a ne ce s s idade de proce s s adore s
m ais pode ros os . As s im a trans io para
proce s s adore s m ul
ti-core torna-s e num ponto
crtico ne s te novo de s e nvol
vim e nto.

SM P a s ol
uo m ais com um no q ue toca a
criar um s is te m a m ul
ti-proce s s ador e m q ue
dois
ou
m ais
proce s s adore s
e s to
cone ctados a um a m ain m e m ory partil
h ada.

O M ul
ti-Core cons is te e m col
ocar dois ou
m ais ncl
e os (core s ) no inte rior de um nico
ch ip. O obje ctivo de s te de s ign para
pos s ibil
itar ao s is te m a e xe cutar vrias
ope rae s e m s im ul
tne o e as s im al
canar
mel
h or ove ral
lpe rform ance para re s ponde r
s ne ce s s idade s dos dias de h oje .
No e ntanto e xis te m vrias abordage ns a e s te
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
e ficincia do proce s s ador para al
m dos
G H z e da Le i de M oore (um a noo e rrada
do de s e m pe nh o dos proce s s adore s
as s ociar e s te ve l
ocidade do s e u re l
gio).

Um a arq uite ctura SM P pode facil


m e nte
m ove r
cargas
de
trabal
ho
e ntre
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
e m s is te m as com ape nas um proce s s ador
os ace s s os m e m ria s o m ais l
e ntos q ue
o proce s s ador a ace d-l
a. No cas o do SM P
,
j q ue ape nas um proce s s ador pode
ace de r m e m ria de cada ve z, pos s ve l
q ue vrios proce s s adore s no pos s am
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
SM P
.
Exis te m l
im itae s ao us o do SM P
, vrios SO
no s uportam e s ta te cnol
ogia (com o o
W indow s XP H om e ) e no faro us o do
s e gundo proce s s ador. Tam bm a m aior
parte dos program as e xis te nte s s o s ingl
eth 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 no tom ando partido da
capacidade totaldo s is te m a.

M ul
tith re ading, H y pe rTh re ading, or M ul
ti-Core ?
Todos os program as s o fe itos de th re ads ,
s e q uncias
de
ins true 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
bl
oq 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
tne o (m ul
titas k ing). Talfoi al
canado
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 to 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 to a s e r e xe cutados ao
m e s m o te m po m as , no fundo, o
proce s s ador pode ape nas e xe cutar um a
th re ad de cada ve z.
Um proce s s ador norm alpe rm ite q ue vrias
th re ads e proce s s os s e jam e xe cutados
de ntro da s ua unidade de te m po (tim e
sl
ice ) is to ch am ado m ul
tith re ading.
Um avano de s ta te cnol
ogia o Supe rth re ading onde
o proce s s ador pode
e xe cutar vrias ins true s de dife re nte s
th re ads e m cada cl
ock cy cl
e (cicl
o de
re l
gio), as s im cicl
os q ue no s e jam us ados
por um a th re ad pode m s e r e xe cutados por
outra. M as provve lq ue um a th re ad no
util
ize todos os re curs os provide nciados
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
tipl
as
th re ads
pos s am
e xe cutar
dife re nte s ins true s no m e s m o cicl
o.
H TT (H y pe r-Th re ading Te ch nol
ogy ) um a
trade m ark da Inte lde SM T e m bora m ais
avanada q ue s upe r th re ading q ue ch e ga
a pe rm itir q ue duas th re ads dife re nte s
s e jam e xe cutadas ao m e s m o te m po onde
um a th re ad us a os re curs os parados da
outra. Um e xe m pl
o s e ria e nq uanto um a
th re ad e xe cuta ope rae s de vrgul
a
fl
utuante , um a outra pode ria e xe cutar
ope rae s inte iras e m s im ul
tne o.

<34>

A ide ia por trs da H TT dupl


icar a
actividade no proce s s ador para re duzir o
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 .
Em bora e s ta te cnol
ogia apare nta para
um a parte dos SO com o s e ndo dois
proce s s adore s dife re nte s m as e s ta no
com parve 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
pipe l
ine
e
cach e . H TT m e l
h ora a
pe rform ance do s is te m a m as nunca tanto
com o e m s is te m as dual
/m ul
ti core j q ue
no cons e gue re al
izar duas ope rae s
iguais . Es ta dife re na torna-s e
bvia
q uando juntam os e s tas te cnol
ogias aos
dual
-core
faze ndo, e m
te oria, q uas e
q uadrupl
icar o de s e m pe nh o final
.

Im pl
icae s no Softw are
criadas pe l
o M ul
ti-Core
Q uanto m ais ope s para re s ol
ve r um
probl
e m a e xis tire m , m ais fcils e torna e s te
de re s ol
ve r. Um a e s trada com ape nas um a
via

m ais
s us ce ptve l a
ficar
conge s tionada por trans ito q ue um a com
duas vias . Num a e s trada de ape nas um a
via a ve l
ocidade
do trns ito fica
condicionada ao e l
e m e nto m ais l
e nto.

te cnol
ogias

No cas o dos proce s s adore s a re gra a


m e s m a. At agora te m os vindo a as s is tir a
m todos q ue m e l
h oram o de s e m pe nh o
com o as th re ads q ue
pe rm ite m
ao
com putados e xe cutar dife re nte s ope rae s
q uas e e m s im ul
tne o. M as q uas e no
bas ta, nunca pode r igual
ar outro iguala
s i e e s s e o conce ito de m ul
ti-core .
As te cnol
ogias a s e re m de s e nvol
vidas
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
s e re m e xe cutadas ao m e s m o te m po.
Se rvidore s tpicos pos s ue m m l
tipl
as portas
por caixa. O paral
el
is m o com e a a tom ar
im portncia e s e os produtore s de s oftw are
q uis e re m s e r re l
e vante s , te ro de apre nde r
al
idar com is s o.
Um bom com e o para anal
is ar o probl
ema
s e ria obs e rvar o q ue te m vindo a s e r fe ito
no cas o dos s upe r-com putadore s . Es te s
com putadore s atinge m o s e u nve l de
com putao atravs da cone xo e xis te nte
e ntre vrios m ais pe q ue nos com putadore s .
Exis te m
duas
arq uite cturas
dis tintas :
m e m ria dis tribuda m l
tipl
as ins true s
m l
tipl
a
data
(M IM D ) ou
m e m ria
partil
h ada M IM D . ch am ada de m e m ria
partil
h ada o s is te m a onde e xis te um
e nde re o onde todos os e l
e m e ntos a
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
atravs 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 tribuda.
No futuro vam os as s is tir a um cre s cim e nto
e xpl
os ivo no nm 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 aro a s e r
cons ide rados um a norm a. Es te s e ve ntos
iro pre s e nte ar o program ador com
pl
ataform as de h ardw are paral
el
as .

<35>

Exis te m duas ope s para l


idar com e s te s
probl
e m as de pe nde ndo do trabal
h o e das
ne ce s s idade s do cons um idor. A prim e ira
com pl
e tar um a col
e co de trabal
h os no
m e nor te m po pos s ve l
. Ne s te cas o cada
trabal
h o individualpode corre r num nico
proce s s ador. Tudo o q ue o program ador s e
pre cis a de pre ocupar q ue o s oftw are q ue
control
a os te m pos de e xe cuo dos
trabal
h os cons iga l
idar com e s te s de um a
m ane ira e ficie nte .
A s e gunda opo ocorre q uando os
trabal
h os individuais pre cis am de
se r
com pl
e tados no m e nor te m po pos s ve l
. Um
e xe m pl
o s e ria o m undo dos ne gcios onde
s o ne ce s s rias re s pos tas rpidas para
s uportar de cis e s e m te m po re al
. Ne s te
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
el
is m o de ntro de
um nico trabal
h o para pe rm itir a e s te q ue
corra e m m e nos te m po para um tam anh o
do
probl
ema
dado,
program ao
paral
el
a.
Program ao paral
el
a te m s ido durante
anos o dom nio dos program adore s de
s oftw are
de
com putao
de
al
ta
pe rform ance
(H PC, h igh
pe rform ance
cum puting). H oje , contudo, todos os
program adore s de s oftw are pre cis am de
pe rce be r program ao paral
el
a.

te cnol
ogias

A fundao da program ao paral


el
a a
concorrncia: a condio de um s is te m a
e m q ualduas ou m ais tare fas e s to activas
e m s im ul
tne o.

A program ao paral
el
a pe rm ite aos
program adore s dividir um program a para
e s te e xe cutar ope rae s de ace s s o ao
dis co
e nq uanto
o
proce s s ador
se
e ncarre ga de e fe ctuar cl
cul
os , is to e m
s im ul
tne o, al
go q ue nunca s e ria pos s ve l
num program a s e q ue ncial
.

<36>

Concl
us o
Pre te nde u-s e com e s te artigo proporcionar
um
conh e cim e nto
ge ral s obre
as
te cnol
ogias a s e re m de s e nvol
vidas , os s e us
props itos e os s e us s uporte s . As s im o l
e itor
de ce rto cons e guir l
idar com ce rtas
de cis e s da prxim a ve z q ue s e e ncontrar
face -a-face com e s tas novas te cnol
ogias .
Infe l
izm e nte , o m undo por traz do m ul
ti-core
das s uas vantage ns e apl
icae s no s e u
todo no pode s e r de s crita num trabal
ho
to pe q ue no ne m s e q ue r e m pape l
.
H 30 anos atrs 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
vantage ns q ue talpode ria traze r e tudo o
q ue o e nge nh e iro cons e guiu im aginar foi
q ue e s s e ins trum e nto pode ria s e r us ado
para as donas de cas a arm aze nare m as
s uas re ce itas . M oore
no 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
ide ia no fazia s e ntido ne nh um .
H oje e xis te m m ais de m e io bil
io de
us urios de PCs e m todo o m undo com as
m ais dive rs as apl
icae s . O futuro ainda
re s e rva m uitas s urpre s as e q ue m s abe s e o
m ul
ti-core no s e r ape nas m ais q ue um
ins trum e nto de trans io.

G uil
h e rm e Rodrigue s & Nuno Corre ia

Inicial
m e nte na s ua m aior parte , s e no
todos , os program adore s s o tre inados
para e s cre ve r program as s e q ue nciais . M ais
tarde
apre nde m
q ue
e xis te m
outros
m ode l
os de program ao s e ndo um de l
es
a program ao paral
el
a q ue te m os vindo
a de s cre ve r. Is to s ignifica q ue e m ve z de
e xe cutar o
program a
num a
dada
s e q uncia, um a ins truo de cada ve z,
e s te vai s e r e xe cutado por dife re nte s
e ntidade s e m s im ul
tne o. Um e xe m pl
o
onde program ao paral
el
a s e torna
abs ol
utam e nte ne ce s s ria e m s e rvidore s
de m odo a e s te s pode re m re s ponde r a
todos os pe didos fe itos por pos s ve is
cl
ie nte s e m s im ul
tne o.

publ
icidade

tutorial

Program ao e m C
(1 Parte )
Es te artigo ve m na s e q uncia de um ante rior,
Program ao e m Sch e m e , q ue s aiu na
e dio nm e ro 6. E com o tal
, vis a e s tabe l
e ce r
um a e vol
uo l
gica do program ador
principiante . Em bora o Sch e m e s e ja um a
l
inguage m e xce l
e nte para s e apre nde r a
program ar, no ficarm os agarrados a um a
l
inguage m para s e m pre q ue s e re m os bons
program adore s . O s abe r program ar dife re do
s abe r m uitas l
inguage ns de program ao na
m e dida e m q ue de pois de s e s abe r
program ar, bas ta e s tudar al
gum a s intaxe , q ue
todas as l
inguage ns s o program ve is .
Para um program ador, o prim e iro pas s o no
incio da criao de um novo program a,
de ve s e r a bus ca da m e l
h or fe rram e nta e
l
inguage m para o faze r. Portanto, s e ndo o
Sch e m e um a l
inguage m para dar bas e s de
conh e cim e nto de program ao, o C um a
l
inguage m , de baixo nve le , por is s o, com um
pote ncial e xtre m o, onde pos s ve l ope rar
tudo s e m e xce po.
A Linguage m C foi de s e nvol
vida por D e nnis
Ritch ie e m 19 72 para s e r us ada nos s is te m as
UNIX. um a l
inguage m q ue s e bas e ia no
paradigm a proce dim e ntal
, util
iza pas s age m
de
re fe rncia atravs de
ponte iros e
e nde re os de m e m ria, o q ue a torna um a
l
inguage m m inim al
is ta e de baixo nve le m
te rm os de ace s s o m e m ria, s e ndo por is s o,
m uito ve rs til para criar s oftw are [pare cida
com o As s e m bl
y ] e adapta-s e be m ao
h ardw are . Com o na m aior parte
das
l
inguage ns , pos s ve l criar-s e bibl
iote cas
para e xpandi-l
a. O C s e rviu de e vol
uo
para m uitas l
inguage ns , onde a principale
m ais infl
ue nciada l
inguage m foi o C+ + ,
de s e nvol
vida por Bjarne Strous trup e m 19 83.
No vam os e ntrar e m grande s porm e nore s
m as para trabal
h arm os e m C pre cis am os de
um com pil
ador e de um e ditor de te xto do
e s til
o Note pad2 ou G e dit, para W indow s e
Linux re s pe ctivam e nte .

<38>

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


com pil
ador de C e de C+ + , te m um e ditor
de te xto incl
udo e fre e w are . Pos to is to,
pode m os com e ar...

Hel
l
o W orl
d
No s e jam os originais e por is s o aq ui vai o
prim e iro program a unive rs al de q ual
q ue r
l
inguage m de program ao q ue s e pre ze :
H e l
l
o W orl
d!.
#include <stdio.h>
int main()
{
printf(Hellow World\n);
return 0;
}

A nica cois a q ue e s ta program a faz


im prim ir no e cr a fras e H e l
l
ow W orl
d e
acre s ce ntar-l
h e um a nova l
inh a. Em bora s
faa is to, te m m uito q ue s e l
h e diga, por is s o
aq ui vai a e xpl
icao pe dao a pe dao:
# incl
ude <s tdio.h > diz ao com pil
ador para
incl
uir a bibl
iote ca s tdio.h onde , e ntre e l
as ,
e s t de finida a funo printf(). Ao faze rm os
# incl
ude fich e iro.h e s tam os a dize r q ue j
crim os um fich e iro, ante riorm e nte , onde
e s to de finidas fune s q ue q ue re m os us ar
agora ne s te nos s o novo program a. Por
agora fica as s im , m ais para a fre nte ve re m os
mel
h or com o re al
m e nte funciona.
int m ain() a funo q ue nunca nos
e s q ue ce m os pois s e m e l
a no h program a.
Todos os program as fe itos e m C tm de te r a
funo m ain() de finida. Para al
m dis s o, a
prim e ira cois a q ue um program a e m C faz
ir funo m ain() e corre r o s e u conte do.
Ne s te cas o, o int q ue pre ce de a de finio
m ain(), podia ne m e s tar l
.
No vam os aprofundar agora o e s tudo de
fune s m as as fune s re tornam cois as
ne s te cas o, dis s e m os funo m ain() para
el
a re tornar um int, ou s e ja, um val
or inte iro.
M ais para a fre nte s e r e xpl
icado o
s ignificado do re torno de um val
or inte iro na
funo m ain, atravs da pe nl
tim a l
inh a
de s te pe q ue no cdigo, re turn 0;
.

tutorial
{ } is to um bl
oco. As ch ave tas s e rve m para
de l
im itar um bl
oco de cdigo q ue te nh a m ais
do q ue um a ins truo (e m bora um bl
oco de
cdigo pos s a te r ape nas um a ins truo).
Ne s te cas o, a funo m ain() pos s ui duas
ins true s , o printf(), l
ch e gare m os , e o re turn
0.
J de ntro do bl
oco da funo m ain() te m os as
ante riorm e nte m e ncionadas ins true s printf()
e re turn 0. Um a de cada ve z. A funo printf()
re ce be um a s tring e m os tra-a no e cr (ne s te
cas o na cons ol
a). O u s e ja, printf(H e l
l
o
W orl
d\n); im prim e na cons ol
a a fras e H e l
l
o
W orl
d s e guida de um a nova l
inh a. A nova
l
inh a de ve -s e ao facto de a fras e H e l
l
o W orl
d
e s tar s e guida de um caracte r e s pe cial
, o \n
(ne w l
ine ). Exis te m vrios caracte re s e s pe ciais
e m C q ue ve re m os m ais fre nte .
E final
m e nte te m os o re turn 0. Com o j foi
re fe rido ante riorm e nte , um a funo s e foi
de finida, te r de re tornar. Ne s te cas o foi
de finida para re tornar um val
or inte iro, int
m ain(). E por e s s a razo, e l
a re torna o val
or 0
[ze ro]
. Com o j foi re fe rido, s e r e xpl
icado
m ais fre nte o re torno de fune s .

Varive is (1 parte )
Vis to j s abe rm os faze r um program a e m C,
q ue m os tra fras e s no e cr, pode m os
avanar para al
go m ais inte re s s ante : varive is .
Um a varive le m al
go q ue no te m val
or fixo
e q ue , portanto, pode s e r al
te rado e tom ar
q ual
q ue r val
or. Is to ve rdade , m as e m C no
as s im to l
ine ar.
Um a varive le m C pode tom ar q ual
q ue r val
or
do s e u tipo, is to , e xis te m vrios tipos de
varive is : inte iros [int e s uas variante s uns igne d
(s e m s inal
) e s igne d (com s inal
)]
, de vrgul
a
fl
utuante [fl
oat] doubl
e s [cas o int/fl
oat no
ch e gue m ]
, e caracte re s [ch ar]
. Por agora e s te s
ch e gam e j nos vo dar m uito je ito.
Com is to ach o q ue pode m os com e ar com um
s im pl
e s program a q ue m os tra no e cr cada um
dos tipos de dados q ue acabm os de ve r.

#include <stdio.h>
int main()
{
int inteiro = 3; //definio de um int
float pi = 3.14; //definio de um float
//definio de um double
double inteiro_gigante = 1234567890;
//definio de um char
char caracter = A;
/* Imprimir as variveis no ecr*/
printf(inteiro:%d\n
pi: %f\n
inteiro_gigante: %d\n
caracter: %c\n, inteiro, pi,
inteiro_gigante, caracter);
return 0;
}

H aq ui m uita cois a nova e q ue pode


pare ce r com pl
icada m as q ue no fundo no
. Vam os por parte s . O program a com e a e ,
com o j re fe rim os , vai dire ito funo m ain().
Ao ace de rm os ao s e u bl
oco, e ncontram os
nas prim e ira 4 l
inh as , de finie s de varive is ,
int inte iro = 3; fl
oat pi = 3.14; doubl
e
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
para nos re s e rvar um pe dao [um a zona,
com um e nde re o]de m e m ria do nos s o
com putador [RAM ]para pode rm os l
guardar
al
go do tipo int [inte iro]e q ue , ne s te cas o,
conte nh a o val
or inte iro 3.
A m e s m a cois a para as outras 3 de finie s
de tipos de varive is . H aq ui dois pas s os
q ue foram e vitados e s cre ve r no cdigo para
pode re m s e r fal
ados agora. Na de cl
arao
de varive is , no obrigatrio atribuir-s e
autom aticam e nte um val
or a e l
a.
Podia te r-s e
form a:

e s crito o m e s m o da s e guinte

int inteiro;
inteiro = 3;

q ue o re s ul
tado s e ria e xactam e nte o m e s m o.

<39 >

tutorial
O u s e ja para al
m de s e de cl
arar a varive l
inte iro com o s e ndo um int, atribui-s e -l
he o
val
or 3 atravs do s m bol
o de atribuio =.
A atribuio funciona da dire ita para a
e s q ue rda, ou s e ja, o 3 atribudo varive l
inte iro e no ao contrrio, e pode m pe ns ar:
q ue e s tupide z, bvio q ue no ao
contrrio. M as um e xe m pl
o m os tra be m o
probl
e m a q ue m uitas ve ze s aconte ce .

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

O q ue aconte ce ne s ta s ituao : 3
atribudo a inte iro;outro_inte iro criado com
um val
or q ual
q ue r inde finido;5 atribudo a
e _outro_inte iro. D e pois , inte iro, q ue val
e 3,
atribudo a outro_inte iro, pas s ando e s te a
val
e r 3, e m ve z do val
or ante rior, al
e atrio;
e _outro_inte iro, q ue val
e 5, atribudo a
inte iro, de s truindo o s e u val
or ante rior, 3.
Com o ve m , o s m bol
o de atribuio = te m
o pode r de de s truio e de atribuio,
s e ndo e s ta, s e m pre da dire ita para a
e s q ue rda. Pos to is to, e no e s q ue ce ndo o
re s to do cdigo de s te s e gundo program a,
vol
te m os a e l
e.
O printf() um a funo q ue nos pe rm ite
im prim ir fras e s . M as e s e q uis e rm os im prim ir
o val
or q ue e s t de ntro de um a varive l
?No
nos s o cas o q ue re m os im prim ir o s e guinte
te xto:
inte iro: 3
pi: 3.14
inte iro_gigante : 123456789 0
caracte r: A

printf(Caracte re s norm ais : % d [para inte iros


ou dou bl
e s ], % f[para fl
oats ]e % c [para
caracte re s ]
...
D e pois de fe ch ar as pas , pe -s e o nom e de
cada varive ls e parada por vrgul
as , pe l
a
orde m q ue apare ce ram de ntro da fras e ,
ne s te cas o s e r um int, um fl
oate de pois um
caracte r e no nos s o cas o: , inte iro, pi,
caracte r);
A ide ia pr a % dfc, e tc, e no finaldas
pr o nom e das varive is pe l
a orde m q ue
foram ins e ridas de ntro da fras e . Se be m
re pararam ps -s e o printf() e m vrias l
inh as .
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
organizao do cdigo para q ue outra
pe s s oa pos s a vir a l
e r e com pre e nde r be m .
Por fal
ar e m organizao de cdigo,
pode m os
ve r
q ue
tam bm
foram
acre s ce ntados com e ntrios . D e s de j,
bom h bito acre s ce ntar com e ntrios ao
cdigo para q ue , m ais um a ve z, q ual
q ue r
pe s s oa q ue o v l
e r, o pos s a e nte nde r ou
m e s m o para no pe rde rm os um raciocnio
q ue s e e s tava a te r num dia e q uando
vol
tam os ao fich e iro no faze m os a m e nor
ide ia do q ue s e pas s a al
i. Exis te m duas
form as de com e ntar cdigo e m C: ou num a
nica l
inh a, us ando // ou e m m ais q ue um a
l
inh a, us ando /* para com e ar e */ para
acabar. E tudo o q ue de ntro de s s e e s pao
e s tive r, s e r ignorado pe l
o com pil
ador. Com
e s tas bas e s e s tam os prontos para criar
varive is , atribuir-l
h e s val
ore s , s e jam e l
as de
q ue tipo fore m , e ainda de im prim i-l
as no
e cr.

Varive is 2 e Sm bol
os
O pe radore s

Se re parare m , as as pas acabam na l


inh a
de baixo pois foi acre s ce ntado o caracte r
e s pe cial\n, para al
m das outras l
inh as , no
finalda fras e . O ra para im prim ir as varive is
de ntro da fras e us am os a s e guinte s intaxe :

<40>

Em bora j te nh am os apre ndido a us ar


inte iros , fl
oats e caracte re s , s e ria m ais
inte re s s ante s e puds s e m os inte ragir com
el
e s:
s om ando-os ,
s ubtraindo-os ,
m ul
tipl
icando-os , dividindo-os , e tc.

tutorial
Tudo ficar m ais cl
aro com
program a.

um

s im pl
es

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

To s im pl
e s q uanto is to. Crim os as
varive is a e b e atribum os -l
h e s os val
ore s
3 e 4 re s pe ctivam e nte . D e pois crim os as 4
varive is para guardarm os os val
ore s
re s pe ctivos s ope rae s e fe ctuadas a a e
b, s om a, s ub, m ul
t e div. Em s e guida
atribum os a cada um a de s tas ope rae s ,
o val
or da re s pe ctiva ope rao e ntre a e
b. No final
, im prim im os , com o j vim os , as
varive 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 :
int main()
{
//declarao das variveis a=3, b=4
//e soma
int a = 3;
int b = 4;
int soma;
//podia ter sido declarado da
//seguinte maneira:
//int a = 3, b = 4, soma;
//que teria o mesmo efeito
printf(soma=%d, sub=%d, mult=%d,
div=%d\n, a+b, a-b, a*b, a/b);
return 0;
}

<41>

M as um a m ane ira m uito pre guios a e na


q ualno pode ram os vol
tar a us ar o val
or
dos re s ul
tados , com o aconte ce na ve rs o
ante rior.

Input/O utput
Com o j re fe rim os no nicio, us am os o
# incl
ude <s tdio.h > para pode rm os util
izar
as funcional
idade s de input, te cl
ado, rato e
outros , e output, m onitor, fich e iro ou
pe rifrico. At agora s us m os o output,
com a funo printf(). Vam os agora pode r
al
argar, e m uito, a m ane ira de us ar o C,
pode ndo inte ragir com o program a.

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

O s canf() pode pare ce r difcil partida


m as no fundo m uito s im pl
e s.
No e ntanto, um a ve z m ais , ve jam os do
incio o cdigo de s te program a. No incio
de cl
arm os 3 varive is , a, b e s om a, com
o obje ctivo de atribuirm os um val
or a a e a
b e de pois de adicionados atribudo a
s om a. Pas s e m os , e nto, ao s canf(). Ne s ta
funo incl
um os o tipo de dados q ue
vam os ins e rir e no fim , fora das as pas , o
e nde re o de l
a e no cas o de s e r m ais do
q ue um a, pom o-l
as por orde m a s e guir s
as pas , as s im com o faze m os no printf().

tutorial
Ao e s cre ve rm os & a e & b e s tam os a dize r ao
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
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
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
program a e s pe ra o val
or para o inte iro a
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
program a q ue re ce be a data de nas cim e nto
e de pois a confirm a, m os trando no e cr as
ope s e s col
h idas pe l
o util
izador:
#include <stdio.h>
int main()
{
//declarao de variveis
int ano;
int dia;
int mes;
printf("Insira a sua data de
Nascimento [mes em numero]\n\nAno:");
// obter valor de ano
scanf("%d", &ano);
printf("Dia: ");
// obter valor de dia
scanf("%d", &dia);
printf("Mes: ");
// obter valor de mes
scanf("%d", &mes);
// imprimir os dados do utilizador
// no ecr
printf("Data:\n%d\\\%d\\\%d\n",
ano, dia, mes);
return 0;
}

Expre s s e s Condicionais e
O pe radore s Lgicos
Ne s ta s e co vam os apre nde r l
gica. A
l
gica m uito im portante para de cidir
s ituae s . E para as de cidir e xis te m as
e xpre s s e s condicionais . Exe m pl
o dis s o s o
o if() e o s w itch (). Por agora ve jam os e s tas
duas .

<42>

O if() funciona da s e guinte m ane ira:


if (condio)
{
expresso 1;
}
else
{
expresso 2;
}

Com o j re fe rim os ante riorm e nte , um bl


oco
{}, s pre cis a de e xis tir, s e e xis tir m ais do
q ue um a e xpre s s o. Em C, al
go
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
ve rdade iro e 0 [ze ro] s e m pre fal
s o.
Pos to is to, vam os a um s im pl
e s program a
para pr e m prtica o nos s o if():
#include <stdio.h>
int main()
{
int x = 10;
int user;
printf(Insira um numero maior que
%d: , x);
scanf(%d, &user);
if (user > x) // se condio for
// verdadeira, executa o seu corpo
{
printf(Inseriu o numero %d que
maior que %d\n, user, x);
}
else // caso contrrio
// executa este corpo
{
printf(O numero %d que inseriu
nao maior que %d\n, user, x);
}
return 0;
}

Com o pode m os ve r, m uito fcilpe rce be r


a s intaxe do if(). Se o nm e ro ins e rido for
m aior do q ue x, q ue val
e 10, o corpo do if
e xe cutado, cas o contrrio, o corpo do e l
se
e xe cutado. No obrigatrio q ue o if
te nh a e l
s e . Es ta l
gica m uito s im pl
e s m as
pre cios a. Por outro l
ado, e xis te m ope radore s
l
gicos q ue nos ajudam a pre cis ar um a
condio. So 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 .

tutorial

#include <stdio.h>
int main()
{
int MIN = 5, MAX = 10;
int user;
printf(Insira um numero maior que
%d e menor que %d: , MIN, MAX);
scanf(%d, &user);
if ((user > MIN) && (user < MAX))
// executa o seu corpo do if
{
printf(Inseriu o numero %d que
maior que %d e menor que %d\n,
user, MIN, MAX);
}
else
// caso contrrio executa este corpo
{
printf(O numero %d que inseriu
nao maior que %d e menor que %d
\n, user, MIN, MAX);
}
return 0;
}

Com o pode m os cons tatar, ne s te cas o, o


corpo do ifs e xe cutado s e o val
or ins e rido
pe l
o util
izador s atis fize r, obrigatoriam e nte , as
duas condie s , s e r m aior do q ue M IN, q ue
val
e 5, e ao m e s m o te m po, s e r m e nor do
q ue M AX, q ue val
e 10. fcilpe rce be r e s te s
conce itos
l
gicos
nas
condie s , o
im portante praticar para ganh ar traq ue jo
na m atria. Pos to is to pas s e m os ao s w itch ().
Es ta funo m uito im portante q uando
q ue re m os condicionar um a varive la um a
e s col
h a por ope s . A s ua s intaxe a
s e guinte :
switch (varivel)
{
case caso_1: { expresso_1 }
break;
case caso_2: { expresso_2 }
break;
default
{
expresso
}
}

Um a ve z m ais , pode
pare ce r m uito
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
e xpl
icao: o s w itch re ce be a varive l a
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 ,
cada um s e guido de bre ak , de m odo a q ue
um a ve z e xe cutado o prim e iro cas e q ue de r
ve rdade iro, o s w itch pare por a e no
e xe cute todas os outros cas e , e final
izado
por um a condio de faul
t, cas o ne nh um a
das ante riore s s e ja ve rdade ira. Um program a
para e xpl
icar o s w itch . Porq ue no um m e nu
de um l
e itor de m s ica?
#include <stdio.h>
int main()
{
int menuOption;
printf("Escolha uma opcao do
menu:\n\n");
printf("1-Play\n");
printf("2-Pause\n");
printf("3-Stop\n");
printf("4-Next\n");
printf("5-Previous\n\n");
printf("Opcao: ");
scanf("%d", &menuOption);
switch (menuOption)
{
case 1: printf("Escolheu a opcao
Play\n"); break;
case 2: printf("Escolheu a opcao
Pause\n"); break;
case 3: printf("Escolheu a opcao
Stop\n"); break;
case 4: printf("Escolheu a opcao
Next\n"); break;
case 5: printf("Escolheu a opcao
Previous\n"); break;
default:
printf("Opcao invalida\n");
}
return 0;
}

12345-

O u s e ja, de pois de m os trarm os o m e nu,


util
izam os o s canf() varive l m e nuO ption
para de te rm inar a opo e s col
h ida e
conform e e s ta, cada cas e dir a re s pe ctiva
opo e s col
h ida ou O po inval
ida cas o
ne nh um dos cas e s s e ja ve rdade iro. Na
prxim a e dio pros s e guire m os com e s ta
introduo ao C.

<43>

M igue lW ah non

E s e r-nos -o m uito te is no s e guinte


program a [um a ve rs o 2 do ante rior]
.

gnu/l
inux

Am bie nte s grficos 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 no pe rde r pitada de cada
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
juntar o p de m e ia para com prar aq ue l
a
pl
aca grfica ou proce s s ador topo de gam a,
pode pare ce r re l
ativam e nte e s tranh o q ue
ainda h aja q ue m trabal
h e na prim e ira ve rs o
do Pe ntium . M as , m ais (s upos tam e nte ) raro
e xis tire m s e r, de ntro de s s a m e s m a m inoria,
h ave r q ue m no q ue ira pe rde r o praze r de
util
izar G NU/Linux, e q ue com o talprocure
s abe r as m e l
h ore s ope s te ndo e m conta a
s ua s ituao.
G NU/Linux , afinal de contas , um a das
mel
h ore s s ol
ue s no m e rcado para e s ta
gam a de util
izadore s , com o tal
, ne s te artigo
de cidim os dar um as l
uze s s obre o principal
factor de gas to de de s e m pe nh o num a
dis tribuio: o am bie nte grfico.
-nos m uitas ve ze s , e m vrios fruns e m q ue
participam os , pe rguntado q ual a m e l
h or
dis tribuio para l
ow pc's . A re s pos ta s im pl
e s:
no de pe nde da dis tribuio, de pe nde do
am bie nte grfico 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 tribuio e m
funo dis s o. ne s s a al
tura q ue ve m bail
aa
q ue s to: Se ndo as s im , q u al o m e l
h or
am bie nte grfico?

Fl
uxbox
A pal
avra de orde m ne s te pe q ue no am bie nte
de
trabal
h o m inim al
is ta m e s m o a
s im pl
icidade e m te rm os e s tticos e funcionais .
D e s de l
ogo, h a re al
ar q ue o Fl
uxbox no
m ais q ue um W indow s M anage r, com o tal
,
no de e s pe rar um l
e q ue variado de
apl
icae s com um a raiz com um a s uportar a
util
izao
de
produtividade
(e xe m pl
o:
apl
icae s K do K D E, q ue um D e s k top
Environm e nt). O Fl
uxbox s s e e ncarre ga de
m odificar o s is te m a grfico Xorg de m ane ira a
incl
uir, e ntre outras cois as , um a pe q ue na
barra de tare fas , a pos s ibil
idade de de corar o
fundo do am bie nte com um w al
l
pappe r e um
m e nu de apl
icae s accionve lpe l
o cl
iq ue
dire ito do rato, al
m da pos s ibil
idade de
pe rs onal
izao por via de te m as . Logo, todas
as apl
icae s a util
izar te ro de s e r ins tal
adas
pe l
o prprio util
izador, m as no s e pre ocupe ,
Fl
uxBox com patve lcom as apl
icae s de
G NO M E e K D E.

No 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 rs 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 no
propriam e nte al
go novo, bas e ado noutro
W M : o Bl
ack Box. Se ndo m uito s e m e l
h ante a
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
cons ide rar para pc's de baixo de s e m pe nh o.
Em re l
ao ao Bl
ack Box apre s e nta m ais
al
gum as funcional
idade s im portante s , com o
um a barra de tare fas configurve l
, a
pos s ibil
idade de util
izar atal
h os de te cl
ado, e
pode r agrupar todas as jane l
as e m ape nas
um a com
s e paradore s . Ve rs e s m ais
re ce nte s apre s e ntam inovae s no de s ign
com o jane l
as com cantos arre dondados e
trans parncias .

Sim pl
icidade ?
No s e r pre cis o m uito te m po para q ue
fiq ue a conh e ce r os cantos cas a de s te
W M , com util
izao inte ns iva pode r at
e s tranh ar e no s e h abituar a m ais ne nh um
s is te m a q ue no d ao cl
iq ue dire ito do rato
um pape l ful
cral na aco. No e ntanto,
tudo is to te m um cus to, ou ne nh um ,
de pe nde ndo do util
izador q ue s e ja. Al
m
da s ua s im pl
icidade , Fl
uxBox tam bm
conh e cido por cons e guir apre s e ntar um
s is te m a com um de s ign actuale com um a
boa dos e de e y e candy, m as no re fe rido
com o ch e gar l
. A ve rdade q ue e s te
pe q ue no s is te m a total
m e nte configurve l
m as , para o faze r, te r de s e h abituar, tanto
util
izao 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
apl
icae s de com e o autom tico no
s tartup do s is te m a, tudo configurve le m
fich e iros de te xto s im pl
e s . Al
m dis s o, e
ape s ar dos m uitos te m as e xis te nte s na
Inte rne t, ne m s e m pre ficam os conte nte s
com o obtido, e e s tare m os a um pas s o de
andar a vas cul
h ar nos fich e iros dos te m as ,
e a e dit-l
os a nos s o be l
o praze r.
Se s e re fe re o abom inve lq ue is to pos s a s e r
para um util
izador q ue ape nas q ue r al
go l
e ve
e pronto a us ar, h q ue re fe rir tam bm o
e s pantos o de s ta pe rs onal
izao e xtre m a a q ue

<45>

e s te pe q ue no s is te m a ch e ga, o q ue um
ch am ariz para util
izadore s com m ais inte re s s e
e m apre nde r, ou m ais conh e cim e ntos .

rpido, ao m e nos ?
Ne s te cam po no h a m e nor dvida,
Fl
uxBox o W M m ais s im pl
e s do re ino
G NU/Linux, q ue incorpora igual
m e nte um
m aior nm e ro de funcional
idade s . A s ua
s ource no te m m ais de 1M B, de m orando
ape nas al
guns m inutos a com pil
ar. M als e
e ntra pode r-s e - de s de l
ogo cons tatar a
rapide z com q ue s e cons e gue util
izar e s te
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
icao e xte rior
abe rta, te ndo ape nas o s is te m a bas e por
trs e s e m s w ap util
izada, aproxim adam e nte
39 M B de m e m ria. Is to pe rm itir corr-l
o at
nos pc's m ais antigos s e ndo ne ce s s ria, no
e ntanto, a cons cincia de q ue q ual
q ue r
apl
icao, por m ais s im pl
e s q ue s e ja,
el
e var l
ogo a m e m ria para val
ore s m ais
al
tos e q ui abus ivos , com o al
is l
gico.
Se s e q uis e r re duzir ainda m ais a m e m ria
ocupada, pode r-s e - optar por um a s is te m a
bas e m ais l
e ve do q ue o q ue nos
proporcionado por um a norm aldis tribuio
com a opo de ins tal
ar Fl
uxbox (com o
D e bian, G e ntoo, SuSe , e tc), caindo a
e s col
h a no bas tante fam os o D am n Sm al
l
Linux, um a dis tribuio de
50M B de
tam anh o q ue incl
ui Fl
uxBox.

Concl
us o
Se gos ta de apre nde r, e q ue r o m e l
h or q ue
e xis te no com prom e te ndo a pe rform ance ,
Fl
uxBox a e s col
h a a tom ar. O s e u de s ign
s im pl
e s e funcional
idade j conq uis taram
m uitos , de q ual
q ue r form a, no h com o
e xpe rim e ntar e tirar a prova dos nove . Se
no q uis e r ins tal
ar propos itadam e nte e s te
am bie nte grfico, pode r s im pl
e s m e nte
faze r o dow nl
oad do Live CD da dis tribuio
D am n Sm al
lLinux e com provar o q ue l
e va
m uitos , m e s m o pos s uindo pc's de e l
e vada
pe rform ance , a t-l
o com o e s col
h a n 1.

gnu/l
inux

Xfce

o
a
e s te ,
s acrificar
al
gum as
funcional
idade s (tais com o ace de r por s s h ).

O nom e
Xfce
provinh a
original
m e nte
de
XForm s
Com m on Environm e nt, m as
com o foi re e s crito duas ve ze s
j no us a XForm s . O nom e
continuou o m e s m o, j no
s e ndo XFce m as Xfce , no s ignificando a
s igl
a abs ol
utam e nte nada, talcom o o l
ogo,
q ue ape nas um a piada.
O de s e nvol
vim e nto com e ou por vol
ta de
19 9 7 s e ndo um cl
one para Linux do Com m on
D e s k top Environm e nt (CD E) um D E proprie trio
para UNIX. A s e gunda ve rs o foi l
anada j
com o Xfce 's w indow m anage r (Xfw m ) ainda
h oje pre s e nte . Foi na te rce ira ve rs o q ue
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 trio, 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
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
fil
e m anage r. Es te l
tim o criado foi para
s e r l
e ve q uando com parado com ,
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>

A l
tim a ve rs o cons e gue s e r um bom
s ubs tituto de
G NO M E ou K D E. -nos
apre s e ntado um D e s k top s im pl
e s , com duas
barras h orizontais com o e m G NO M E, q ue o
torna
bas tante
prtico.
Pos s ui um paine ls im pl
e s m as
bas tante til pe rm itindo o
fcil ace s s o
a
vrias
configurae s do s is te m a.
O cupa ce rca de 55M b de
m e m ria
com
a
SW AP
total
m e nte l
ivre , te ndo por
trs o s is te m a bas e a corre r.
Ve m com trans parncias e
e fe itos
s om bra
nativos
(ne ce s s ita de ace l
e rao 3d
e m butida
no
de s k top),
apre s e ntando
um a
e xce l
e nte fl
uide z.

Nota final
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
um a boa apos ta. Al
m de s e r fcil de
util
izar, principal
m e nte para q ue m ve m do
G NO M E, te m um as pe cto l
im po e de
pe rs onal
izao fcil
. D e notar q ue para
com putadore s
q uas e
pr-h is tricos
provave l
m e nte fl
uxbox m ais indicado...

Ce l
s o Ram os & M igue lPais

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
de s pre zo da
funcional
idade . Te m na
rapide z, e m
re l
ao aos
dois
D E's
dom inante s , o s e u principal trunfo. Se gue
um a fil
os ofia m odul
ar, ou s e ja,
ve m com um s is te m a bas e
s e m m uitas de pe ndncias a
q ue
se
pode
facil
m e nte
acre s ce ntar fune s m e dida
das ne ce s s idade s , atravs da
ins tal
ao de pacote s . As s im ,
cons e gue
ocupar
m e nos
re curs os pois no ins tal
a por
de faul
t fune s m uitas ve ze s
de s ne ce s s rias ao util
izador.

e ve ntos

No pas s ado dia 27 de Jane iro,


de corre u o TECNO NO V 2007, um
e ncontro nacional de dicado
Te cnol
ogia e Inovao.
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
aco, com o BarCam pPortugale a SH iFT,
s e ndo e s te l
tim o m ais virado para um
pbl
ico inte rnacional
. O TECNO NO V, pe l
o
contrrio, tinh a a inte no de m os trar um
pouco do q ue s e faz no nos s o pas , aos
portugue s e s , e principal
m e nte fom e ntar a
partil
h a de ide ias e m otivar a inovao.
O e ncontro de corre u e m Coim bra, no
caf/auditrio da FNAC, l
ocal
izada no Frum
Coim bra, e s pao q ue , por ve ze s , no foi
s uficie nte para o pbl
ico q ue ia pas s ando e
re s ol
via e s pre itar. L de ntro iam de corre ndo
apre s e ntae s , m aioritariam e nte dirigidas a
um pbl
ico no-profis s ional, com e xce po
de al
guns te m as , com o a te rce ira ve rs o da
l
ice na G PL, q ue e ra dire ccionada para a
re a de de s e nvol
vim e nto de s oftw are . Ao
todo, foram s e te apre s e ntae s , re al
izadas
por oradore s na s ua grande m aioria
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 bm dis ponve is gratuitam e nte cds da
dis tribuio G NU/Linux Ubuntu, para dive rs as
pl
ataform as .
A prim e ira apre s e ntao, de ttul
o "Linux:
Um cam inh o para a produtividade ", ficou a
cargo de
O ctvio Fil
ipe
G onal
ve s ,
fundador da e m pre s a M agicBrain. Foi um a
apre s e ntao de dicada divul
gao do
"m undo" do Softw are Livre e de um a das
s uas principais "bande iras ": as dis tribuie s
de s is te m as ope rativos G NU/Linux.

<47>

Foram
de s m is tificados
m itos
q ue
se
pe rpe tuam s obre e s te tipo de s oftw are e
e nunciadas
al
gum as
das
principais
vantage ns .
Se guidam e nte , de corre u a apre s e ntao
da te rce ira ve rs o da l
ice na G NU G PL, por
Rui M igue l Se abra, Vice -Pre s ide nte da
ANSO L (As s ociao Nacional para o
Softw are
Livre ). Foram
cl
arificadas as
principais dife re nas de s ta nova ve rs o e m
re l
ao ante rior e apre s e ntadas al
gum as
vantage ns da s ua adopo. Para te rm inar
a prim e ira parte do e ve nto, M arcos
M arado, anal
is ta da Sonae Com IT, re al
izou
um a das apre s e ntae s q ue ge rou m aior
inte re s s e e dis cus s o de todo e s te e ve nto,
vol
ta do te m a "A Inds tria D is cogrfica e
o
D RM
(D igital
Righ ts /Re s trictions
M anagm e nt)". Aps a de s crio de s ta
te cnol
ogia, foram apre s e ntadas dive rs as
concl
us e s ne gativas a tirar da s ua
util
izao, jus tificando as s im as ace s q ue
o orador ince ntivava, de form a a com bate r
a apl
icao de tais re s trie s na inds tria
dis cogrfica.
Aps um curto coffe e bre ak , M rio Lope s ,
e s tudante na FEUP
, ve io apre s e ntar o IM AG E
(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
do curs o de Enge nh aria Inform tica. Es te
cons is te
num
jogo
w e b-bas e d
de
s im ul
ao de ge s to e de s e nvol
vim e nto
indus trial
. Te ndo por bas e aq uil
o q ue
re al
m e nte s e util
iza no s e ctor, e s te jogo
torna-s e as s im num a boa pl
ataform a para
te s te s de tcticas e pl
anos e m pre s ariais .

e ve ntos

Aprove itou-s e para abordar principal


m e nte
as de cis e s fe itas pe l
a e q uipa para o
de s e nvol
vim e nto de s te proje cto, s e ndo
dado um m aior foco pl
ataform a w e b
e s col
h ida, Ruby on Rail
s.
O fundador da W e Bre ak Stuff, e m pre s a
portugue s a de dicada ao de s e nvol
vim e nto,
de s ign e e s tratgia para produtos w e b,
Fre de rico O l
ive ira, ve io fal
ar s obre o te m a
"Inovao e m
Portugal
". Foram
fe itas
dive rs as
crticas

fal
ta
de
e m pre e nde doris m o
da
m aioria
dos
portugue s e s e fal
ta de oportunidade s
q ue
s o
dadas
a
novas
ide ias ,
com parando com outros pontos do gl
obo.

Em s um a, foi, s e m dvida ne nh um a, um a
ptim a iniciativa, pois para al
m de s urgir
m ais um e s pao de divul
gao do q ue s e
faz e m
Portugal ne s ta re a, s urgiu
principal
m e nte
m ais um
e s pao de
s e ns ibil
izao, m otivao e incubao de
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
"Inovao". Fe l
izm e nte
j pos s ve l
obs e rvar um
re s ul
tado prtico de s te
e ve nto: um
l
ocal de
divul
gao e
s e ns ibil
izao s obre as prticas de al
gum as
e m pre s as , ao ins e rire m D RM s nos s e us
produtos (h ttp://w w w .drm -pt.info).
Para m ais inform ae s s obre e s te e ve nto,
vis ite m o s ite oficialh ttp://te cnonov.ne t

Srgio Santos

Se guiu-s e um a Introduo l
inguage m de
program ao Pe rl
, e m bora m ais virada
para o as pe cto s ocial
, ou s e ja, para as
com unidade s e s uporte ge rado s ua vol
ta:
CPAN, m ail
ing l
is ts e m l
ngua portugue s a,
Pe rlM onge rs , e ntre outros ... Apre s e ntao
e s ta q ue foi re al
izada por Ne l
s on Fe rraz,
profis s ionalda Se gul
a Te ch nol
ogie s .

Para te rm inar, a l
tim a apre s e ntao ficou
a cargo de Pe dro Sous a, program ador w e b
para
a
Acce nture , q ue
j
h avia
apre s e ntado o s e u proje cto na 5 e dio
da Re vis ta PRO G RAM AR, o w e Spe ndM one y.
Es ta foi um a continuao do te m a
"Inovao", de s ta ve z apre s e ntando al
guns
bons e xe m pl
os , dando e s pe ciale nfas e
W ii, a nova cons ol
a da Ninte ndo.

<48>

anl
is e s

UM L, M e todol
ogias
e Fe rram e ntas CASE
Al
be rto S il
va
Carl
os Vide ira
Editora: Ce ntroAtl
antico.pt
Col
e co: Te cnol
ogias

Pginas : 357
2 Edio, 1 Edio: M aro de 2005
ISBN: 9 89 -615-009 -5

Introduzido o l
ivro, o prim e iro im pacto ao
corre r das pginas no im pre s s iona. O
as pe cto grfico pare ce indicar q ue o l
ivro
foi de s e nvol
vido num corriq ue iro e ditor de
te xto, ficando m uito aq um da q ual
idade
grfica q ue as e ditoras de re nom e m undial
h abituaram os profis s ionais e os al
unos do
e ns ino s upe rior. Es te
prim e iro im pacto
cons ol
ida-s e ao l
ongo do l
ivro, onde s e
juntam os im e ns os grficos e diagram as
cuja q ual
idade grfica fica abaixo das
e xpe ctativas , ao ponto de tornar difcila
l
e itura e m al
guns cas os .
Ce ntrando a ate no no conte do e no
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
introduzindo um a vis o ge ral s obre os
s is te m as de
inform ao, arq uite cturas ,
pl
ane am e nto, proce s s os e m todos de
de s e nvol
vim e nto de s oftw are . No s e ndo
e s te o obje ctivo do l
ivro e m q ue s to, e s ta
prim e ira parte pe rm ite q ue um l
e itor fora da

<49 >

re a de te cnol
ogias de inform ao s e
fam il
iarize com conce itos e conh e cim e ntos
bs icos da re a.
A s e gunda parte ce ntra-s e na l
inguage m de
m ode l
ao
UM L
(Unifie d
M ode l
ing
Language ), s e ndo a s e gunda ve rs o do
UM La grande razo de s e r de s ta re e dio.
Na
s e gunda
parte
e fe ctua-s e
um a
e num e rao
das
vrias
m ode l
ae s
s uportadas pe l
o UM L, e fe ctuando um a
de s crio, introduzindo os
diagram as
corre s ponde nte s e faze ndo re fe rncia, de
form a s upe rficial
, s l
im itae s das ve rs e s
ante riore s do UM L, m as no abordando
pos s ve is probl
e m as e s ol
ue s na actual
ve rs o. Um ponto inte re s s ante a incl
us o
de e xe rccios no finalde cada s e co de
form a a te s tar a s ol
ide z dos conh e cim e ntos
adq uiridos . Era e xpe ctve l q ue aps a
introduo dos conce itos UM Ls e il
us tras s e a
s ua util
izao cons ol
idada e a s ua l
igao
a fe rram e ntas CASE, dado q ue o l
ivro te m a
pre te ns o da apl
icao do UM L no
proce s s o de de s e nvol
vim e nto, no e ntanto
talno aconte ce .
Ao contrrio das as pirae s as s um idas no
incio do l
ivro, o m e s m o pare ce indicado
para l
e itore s q ue tom e m contacto pe l
a
prim e ira ve z com UM L, m as fica aq um das
ne ce s s idade s de al
unos do e ns ino s upe rior
q ue pre te ndam cons truir um a carre ira na
re a das te cnol
ogias de inform ao.

Fe rnando M artins

UM L, M e todol
ogias e Fe rram e ntas
CASE, vol
um e
1, apre s e nta-s e
com o um l
ivro de re fe rncia para
al
unos de l
ice nciaturas e de curs os
de ps -graduao, na re a de
conce po
de
s is te m as
de
s oftw are , com e s pe cial foco e m
m todos , m ode l
ao e fe rram e ntas
CASE (Com pute r Aide d Softw are
Engine e ring).

inte rne t

D ire ctrio de apl


icae s w e b 2.0

Um dire ctrio 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
icae 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
aboratrios do popul
ar portalde notcias 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 ual
izar e m te m po re al
, todas as notcias votadas pe l
os
m e m bros , e nq uanto as notcias com m ais im portncia (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
Bl
og m antido por um a program adora,
com um tutorialde PH P
. Cada aul
a
corre s ponde a um vde o fl
as h , s obre
um as s unto particul
ar de s ta popul
ar
l
inguage m de program ao.

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

Joos t
Nova apl
icao 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, atravs de um a apl
icao fcilde
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
cons igo

Sol
uo de s e s pe rada

As crianas e s to cada ve z m ais inte l


ige nte s ...
<51>

com unidade

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

O w ik i (h ttp://w ik i.portugal
-a-program ar.org)
m ais um a das pl
ataform as de apoio
form ao de s s e s proje ctos , de apoio
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 ao. O prxim o pas s o s e r
dado tam bm no s e ntido de continuar a
prom ove r a cons truo de conte dos e
apre ndizage m de q ue m s e dis ponibil
izar
para tal
.

Enfim , concl
uo o "A Com unidade " de s ta
e dio 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 pas fora, m uito
de vido ao trabal
h o e col
aborao de
todos
os
m ode radore s
do
frum ,
adm inis tradore s dos pl
os e aos util
izadore s
q ue
tm
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
os program adore s nacionais .

<52>

Vai a

w w w .re vis ta-program ar.info


para m ais inform ao com o
participar
ou e nto contacta-nos por

re vis taprogram ar

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

Rui M aia

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
ao ao
rum o q ue as cois as e s to a tom ar na
com unidade . Ve jo o nm e ro de util
izadore s
activos a aum e ntar no frum , as s im com o o
nm e ro de util
izadore s no s e u total
, ve jo
vrias e q uipas de de s e nvol
vim e nto a s e re m
form adas a partir do frum , vrios proje ctos
a s urgir, vrias de ze nas de pe s s oas a
q ue re r contribur activam e nte
para o
cre s cim e nto da com unidade , e nfim , ve jo
vontade de trabal
h ar. Por ve ze s torna-s e
difcil para o s taff apoiar todas as
iniciativas , todos os proje ctos e
dar
iniciao a todas as ide ias q ue s urge m . No
e ntanto, com al
gum e s foro e vontade as
cois as acabam por s e faze r com re l
ativa
rapide z e s uce s s o.

Você também pode gostar