EDITORIAL
2
EQUIPA PROGRAMAR JMP EAX
Mais uma ediccedilatildeo desta feita a 41ordf ediccedilatildeo da Revista que trazemos ateacute voacutes
Muito aconteceu desde as ediccedilotildees anteriores e muito iraacute acontecer pois a
tecnologia estaacute em constante evoluccedilatildeo e a programaccedilatildeo em constante
desenvolvimento
No passado dia 25 de Maio realizou-se no Auditoacuterio da Microsoft em Lisboa o
primeiro Evento Presencial da Comunidade Portugal-a-Programar sobre o qual
poderatildeo encontrar um artigo mais agrave frente na revista Em parte por causa de todo o
esforccedilo necessaacuterio para que se realiza-se o evento aconteceram alguns atrasos no
lanccedilamento desta ediccedilatildeo pelo que peccedilo desculpas a todos os leitores autores
colaboradores e parceiros que nos tecircm acompanhado ao longo destes anos que a
Revista PROGRAMAR jaacute ldquocarrega nos ombrosrdquo
Ainda na sequecircncia do evento no qual a revista tambeacutem esteve representada
decorre um concurso de aplicaccedilotildees para Windows 8 pelo que se tem uma ideia e
consegue fazer a aplicaccedilatildeo recomendamos que leia a paacutegina sobre o concurso que
poderaacute encontrar nesta ediccedilatildeo
Num outro registo congratulo-me pelo crescimento da revista e agradeccedilo a todos
quantos nela trabalham e colaboram com o seu crescimento Sem vocecircs seria
impossiacutevel mas natildeo me posso esquecer de todos os leitores pois eacute para voacutes que a
revista eacute feita Eacute para os leitores que bimestralmente uma equipe dedicada de
autores revisores designers e demais staff traz uma nova ediccedilatildeo com novos
artigos novos temas tentando ir sempre de encontro ao que esperam encontrar
nesta publicaccedilatildeo
Nesta ediccedilatildeo damos continuidade a algumas seacuteries de artigos de autores que
satildeo verdadeiros ldquoresidentesrdquo e introduzimos novos temas e tecnologias bem como
uma nova seacuterie de artigos no sentido de vos agradar mais e melhor
Para aqueles que de certa forma foram privilegiados ao ter vivido na geraccedilatildeo das
525rsquorsquo e ateacute antes com as cassetes e os 8 bits que faziam maravilhas esperamos
continuar a trazer-vos um pouco daquilo que eram as publicaccedilotildees de programaccedilatildeo
que fizeram de voacutes e alguns de noacutes os programadores que agora somos mas com
os conteuacutedos actualizados e de acordo com as vossas espectativas Aos demais
leitores que natildeo viveram essa ldquomaacutegica experiecircnciardquo de fazer muito com pouco e
copiar coacutedigo do papel para o computador digitando cada instruccedilatildeo como se fosse
uma ldquopalavra maacutegicardquo para no fim se mandar compilar ou interpretar e ver ldquomagiardquo
acontecer espero que a revista continue a ir de encontro aquilo que vos agrade
sempre com a isenccedilatildeo que a caracteriza e a pluralidade pela qual se pauta
Ateacute agrave proacutexima ediccedilatildeo jmp EAX
Antoacutenio Santos
A revista PROGRAMAR eacute um projecto voluntaacuterio sem fins lucrativos Todos os artigos satildeo da responsabilidade dos autores
natildeo podendo a revista ou a comunidade ser responsaacutevel por alguma imprecisatildeo ou erro
Para qualquer duacutevida ou esclarecimento poderaacute sempre contactar-nos
Coordenador Antoacutenio Santos
Editor Antoacutenio Santos
Design Seacutergio Alves
Twitter scorpion_blood
Redacccedilatildeo Antoacutenio Pedro Cunha
Joseacute Marques Mauricio Magnani Jr
Paulo Morgado Ricardo Perre
Rita Peres Sara Silva
Seacutergio Ribeiro
Staff Ana Barbosa
Antoacutenio Pedro Cunha Antoacutenio Santos
Antoacutenio Silva Faacutebio Domingos
Jorge Paulino Sara Santos
Contacto
revistaprogramarportugal-a-programarorg
Website
httpwwwrevista-programarinfo
ISSN 1 647-071 0
IacuteNDICE
3
TEMA DE CAPA
Introduccedilatildeo ao Java EE e Java Web (Joseacute Marques)
A PROGRAMAR
COLUNAS
EVENTOS
20 de Junho XXXVI Encontro da Comunidade SQLPort
22 de Junho 39ordf Reuniatildeo Presencial da Comunidade NetPonto em Lisboa
21 e 22 Junho Agile amp Scrum Portugal 2013
11 a 22 Junho CISTI 2013 - 8ordf Conferecircncia Ibeacuterica de Sistemas e Tecnologias de Informaccedilatildeo
Para mais informaccedilotildeeseventos httpbitlyPAP_Eventos Divulga os teus eventos para o email eventosportugal-a-programarpt
Programaccedilatildeo em C const (Antoacutenio Pedro Cunha)
Jogo da Vida (Rita Peres)
JBoss Aplication Server 7 (Mauricio Magnani Jr )
PHP Uma framework ldquofrom scratchrdquo (Parte 1) (Ricardo Perre)
C - Observable vs Task (Paulo Morgado)
Visual(not)Basic - Operator Overloading (Seacutergio Ribeiro)
7
22
COMUNIDADES
NetPonto - Telerik RadControls - Raacutepida implementaccedilatildeo da paacutegina Sobre para Windows Phone Apps (Sara Silva)
48
52
39
24
34
ANAacuteLISES
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees (Joseacute Marques)
C 50 com Visual Studio 2012 (Ricardo Perre) 49
NO CODE
Game Salad (Rita Peres)
Projecto em Destaque na Comunidade PP Little Bits
65
74
42
EVENTOS
I Evento Presencial Programar 46
34
NOTICIAS
4
ARM desenvolve chip anti-piratria
A ARM anunciou o lanccedilamento de um chip anti-pirataria que
vai permitir controlar a utilizaccedilatildeo indevida de conteuacutedos prote-
gidos por direitos de autor
A novidade eacute o resultado de uma parceria com Hollywood
que pretende prevenir a pirataria nos conteuacutedos de viacutedeo em
alta definiccedilatildeo numa proacutexima geraccedilatildeo de smartphones e ta-
blets Vai agir de forma complementar agraves tecnologias de Digi-
tal Rights Management ao niacutevel do hardware
O Mali V500 vai tirar partido da tecnologia TrustZone que a
fabricante britacircnica usa jaacute haacute vaacuterios anos como mecanismo de
seguranccedila para transaccedilotildees e software mas que aqui seraacute
utilizada pela primeira vez com o objetivo de prevenir a utiliza-
ccedilatildeo de conteuacutedos protegidos por direitos de autor
A disponibilizaccedilatildeo de conteuacutedos multimeacutedia de alta definiccedilatildeo
em sistemas moacuteveis tem sido endereccedilada com algumas reti-
cecircncias pelos detentores de direitos sobre esses conteuacutedos
que natildeo encontram grandes mecanismos de seguranccedila nes-
sas plataformas sobretudo no que se refere aos sistemas
operativos moacuteveis de coacutedigo aberto como eacute o caso do An-
droid
Citada pelo Financial Times a ARM defende que a sua tecno-
logia seraacute especialmente uacutetil em paiacuteses como a China onde a
induacutestria consegue fazer um niacutevel miacutenimo de receitas com os
filmes depois destes saiacuterem das salas de cinema
Na Computex a ARM lanccedilou ainda o Cortex A12 um proces-
sador dirigido ao mercado de gama meacutedia desenvolvido a 28
nanoacutemetros A fabricante garante que o chip assegura melho-
rias de 40 ao niacutevel da performance face ao antecessor Cor-
tex A9
Tambeacutem a Intel aproveitou a feira asiaacutetica para apresentar
uma nova geraccedilatildeo de processadores Core i3 i5 e i7 A efici-
ecircncia energeacutetica garante a fabricante eacute o incremento mais
relevante nesta nova geraccedilatildeo de chips
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
A tecnoloacutegica portuguesa quer democratizar o ensino e coloca
a figura do professor como agente principal do objetivo O Kit
Inspired Teacher eacute uma escola ambulante
A JP Inspiring Knowledge empresa responsaacutevel pelos com-
putadores Magalhatildees estaacute a lanccedilar em vaacuterios mercados inter-
nacionais um kit portaacutetil de ensino que se destina aos profes-
sores O conjunto eacute composto por um computador por um
rato com capacidade de digitalizaccedilatildeo por um projetor de pe-
quenas dimensotildees e por um quadro digital que torna qualquer
superfiacutecie plana num ambiente de trabalho
Todos os dispositivos podem ser guardados numa mala trolley
resistente a choques e a aacutegua sistema que reforccedila o caraacuteter
de mobilidade do kit de ensino
O Kit Inspired Teacher tenta conjugar o fator praacutetico ao lado
econoacutemico Mesmo sem revelar o preccedilo do conjunto o pacote
de ensino digital deve ficar mais barato do que montar uma
estrutura semelhante a uma sala de aula com todos os com-
ponentes como um PC projetor e quadro
A ideia da tecnoloacutegica portuguesa eacute diminuir ao maacuteximo o
nuacutemero de casos de crianccedilas que natildeo tecircm acesso ao ensino
pela falta de material escolar qualificado e atualizado O pro-
fessor eacute ao mesmo tempo a sala de aula ideia que tem sido
bem recebida internacionalmente
O conceito jaacute foi apresentado em vaacuterios paiacuteses com uma
resposta muito positiva sobretudo do puacuteblico-alvo principal
os professores Agora com o lanccedilamento desta soluccedilatildeo no
mercado estamos em condiccedilotildees de levar a educaccedilatildeo digital a
qualquer parte do mundo escreve em comunicado o presi-
dente da JP Inspiring Knowledge Jorge Saacute Couto
A empresa responsaacutevel pela gama de equipamentos Maga-
lhatildees natildeo vai disponibilizar o kit em Portugal e a pedido do
TeK tambeacutem natildeo adiantou uma estimativa para o volume de
vendas ateacute ao final do ano
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
JP Inspiring Knowledge cria kit por-
taacutetil de ensino para professores
NOTICIAS
5
Ferramentas de construccedilatildeo extensiacuteveis
Sabemos que eacute preciso construir um sistema que se adapte
aos seus requisitos de projeto mas que se estenda ainda ao
seu ambiente maior de desenvolvimento O Android Studio
usa um novo sistema de construccedilatildeo baseado em Gradle que
proporciona flexibilidade sabores de construccedilatildeo personaliza-
dos resoluccedilatildeo de dependecircncias e muito mais
Este novo sistema de montagem permite-lhe construir os seus
projetos no IDE bem como em seus servidores de integraccedilatildeo
contiacutenua A combinaccedilatildeo permite-lhe gerir facilmente as confi-
guraccedilotildees complexas de construccedilatildeo nativamente atraveacutes do
seu fluxo de trabalho em todas as suas ferramentas Confira
a documentaccedilatildeo de preacute-visualizaccedilatildeo para ter uma ideacuteia me-
lhor do que o novo sistema de construccedilatildeo pode fazer
Ediccedilatildeo de coacutedigo poderoso
O Android Studio inclui um editor de coacutedigo poderoso Ele eacute
baseado no editor IntelliJ IDEA que suporta recursos como
ediccedilatildeo inteligente refatoraccedilatildeo de coacutedigo avanccedilado e anaacutelise
aprofundada de coacutedigo estaacutetico
Os recursos de ediccedilatildeo inteligentes tais como pesquisas de
recursos em linha facilitam a leitura do coacutedigo dando-lhe
acesso instantacircneo a editar o coacutedigo dos recursos de apoio A
refatoraccedilatildeo avanccedilada de coacutedigo daacute-lhe o poder de transfor-
mar seu coacutedigo atraveacutes de todo o projeto com rapidez e se-
guranccedila
Adicionaacutemos anaacutelise de coacutedigo estaacutetico para o desenvolvi-
mento Android ajudando a identificaccedilatildeo de erros mais rapida-
mente Aleacutem das centenas de inspeccedilotildees de coacutedigo que o In-
telliJ IDEA oferece adicionaacutemos inspeccedilotildees personalizados
Por exemplo noacutes adicionamos metadados para as APIs do
Android que assinalam quais os meacutetodos que podem retornar
nulos ou natildeo que constantes satildeo permitidas para que meacuteto-
dos e assim por diante Android Studio usa esses dados para
analisar seu coacutedigo e encontrar possiacuteveis erros
Fonte Android Developers Blog
Portugal acolhe rede internacional
de centros de inclusatildeo social
O Centro de Inclusatildeo Digital um projeto de intervenccedilatildeo social
apoiado pela Microsoft estaacute a chegar a Portugal No primeiro
ano de atividade a organizaccedilatildeo quer chegar a 1200 jovens
A accedilatildeo do CDI centra-se no desenvolvimento de competecircn-
cias tecnoloacutegicas junto de populaccedilotildees provenientes de con-
textos socioeconoacutemicos desfavorecidos com o objetivo de
criar condiccedilotildees de empregabilidade
A organizaccedilatildeo fundada no Brasil em 1995 tambeacutem atua
apoiando iniciativas empresariais empreendedoras Em Portu-
gal pretende criar uma rede nacional de centros de inclusatildeo
digital O primeiro seraacute instalado no bairro da Belavista em
Setuacutebal Uma segunda estrutura estaacute tambeacutem jaacute prevista e vai
localizar-se em Vale de Cambra no Porto
O CDI conta com 780 espaccedilos de inclusatildeo social em 12 paiacute-
ses De acordo com os nuacutemeros avanccedilados pela organizaccedilatildeo
as suas iniciativas jaacute tiveram impacto na vida de um milhatildeo de
pessoas
A iniciativa conta com o apoio da Microsoft que hoje a apre-
sentou no acircmbito do 7ordm Encontro de Parceiros Sociais e que
doou 100 mil doacutelares agrave instituiccedilatildeo para o arranque do projeto
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
Hoje na Google I O anunciaacutemos uma nova IDE que eacute cons-
truiacuteda com as necessidades dos programadores de Android
em mente Eacute chamado Android Estuacutedio eacute gratuito e estaacute ago-
ra disponiacutevel para vocecirc experimentar como uma preacute-
visualizaccedilatildeo de acesso antecipado
Para desenvolver o Estuacutedio Android colaboraacutemos com Jet-
Brains os criadores de uma das mais avanccediladas IDEs Java
disponiacuteveis hoje Basea-
do no poderoso e exten-
siacutevel IntelliJ IDEA
Community Edition adi-
cionaacutemos recursos que
satildeo projetados especifi-
camente para o desen-
volvimento Android que
simplificam e otimizam o
seu fluxo de trabalho
diaacuterio
Android Studio An IDE built for An-
droid
TEMA DE CAPA Introduccedilatildeo ao Java EE e Java Web
TEMA DA CAPA
7
Java Enterprise Edition
A plataforma Java Enterprise Edition ou Java EE eacute uma pla-
taforma da Oracle que fornece uma API adicional ao Java
SE para o desenvolvimento e execuccedilatildeo de aplicaccedilotildees java
do tipo empresarial focadas nos serviccedilos de rede e Web
Vindo do Java Professional Edition o nome que foi anuncia-
do em Maio de 98 foi a partir dos finais de 1999 que ficou
com o nome de Java EE incluindo tecnologias como Java
Database Connectivity (JDBC) Java Servlet JavaServer
Pages (JSP) Enterprise JavaBeans JavaMail etc
CONCEITOS
Aplicaccedilatildeo Web Java
Uma aplicaccedilatildeo Java Web gera paacuteginas Web interactivas
contendo vaacuterios tipos de markup languages (HTML XML
etc) e conteuacutedo dinacircmico Eacute tipicamente composto por ele-
mentos Web tais como JavaServer Pages (JSP) Servlets e
JavaBeans para modificar e temporariamente armazenar
dados interagir com bases de dados e serviccedilos Web geran-
do conteuacutedo em resposta aos pedidos do cliente
JSP (JavaServer Pages)
JavaServer Pages eacute uma tecnologia usada no desenvolvi-
mento de aplicaccedilotildees Web Java semelhante ao PHP Possui
compatibilidades com outras soluccedilotildees Java como a Servlet
corre em servidores como o Apache Tomcat e o GlassFish
Ao contraacuterio dos tiacutepicos jarrsquos os arquivos deste tipo de imple-
mentaccedilotildees satildeo ear ou war (Web Archive)
As paacuteginas Web dinacircmicas java aceitam HTML CSS Ja-
vascript tudo que possam incluir no um ficheiro normal
HTML natildeo necessitam de compilaccedilatildeo preacutevia isso fica ao
cargo do servidor Web de traduzir as linhas de coacutedigo em
Java para o browser compreender
Qualquer coacutedigo Java inserido nos ficheiros JSP deve ficar
entre as tags
lt Code gt (para inserccedilatildeo de coacutedigo)
lt=var gt (para a expressatildeo de uma variaacutevel)
Introduccedilatildeo ao Java EE e Java Web ltpage gt (para importar include para incluir
uma paacutegina JSP ou HTML externa)
Servlet
Eacute uma tecnologia Java que permite gerar dados em HTML e
XML Incluiacuteda na biblioteca javaxservlet permite processar
pedidos e respostas vindas de JSP e serve como uma exten-
satildeo do servidor Web Neste caso vamos usar a HttpServlet
onde a sua funccedilatildeo seraacute processar pedidos das JSP resolver
os pedidos e enviar uma resposta
XML
XML (Extensible Markup Language) subtipo da SGML foi
criada pela W3C com o objectivo de ser usado como formato
de configuraccedilatildeo entre vaacuterias linguagens atraveacutes da internet
Ex
Neste caso em particular o ficheiro XML que vamos criar
editar na configuraccedilatildeo de uma aplicaccedilatildeo Java Web eacute o
webxml que tem como tags mais usa das as seguintes
lt gt agrave define comentaacuterios
ltweb-app id version xmlns gt agrave define o tipo do XML
a versatildeohellip
ltdisplay-namegt agrave define o nome
ltservletgt agrave define uma servlet
ltxml version=10 encoding=iso-8859-1 encoding=iso-8859-1gt ltreceita nome=patildeo tempo_de_preparacao=5 min tempo_de_cozedura=1horagt ltingredientesgt ltingrediente quantidade=4 unidade=chavenasgtFarinhaltingredientegt ltingrediente quantidade=7 unidade=gramasgtFermentoltingredientegt ltingrediente quantidade=15 unidade=chavenasgtAgualtingredientegt ltingrediente quantidade=1 unidade=colheresgtSalltingredientegt ltingredientesgt ltinstrucoesgt ltpassogtMisturar tdos os ingredientesltpassogt ltpassogtCobrir com um pano e deixar repousar uma hora agrave temperatura ambienteltpassogt ltpassogtMisturar novamente e colocar ao forno ateacute ao fim da cozeduraltpassogt ltinstrucoesgt ltreceitagt
TEMA DA CAPA
8
ltservlet-namegt agrave define o nome da servlet
ltservlet-classgt agrave aponta o caminho da servlet na apli-
caccedilatildeo
ltload-on-startupgt agrave quando o valor for 1 a servlet
seraacute inicializada no inicio da aplicaccedilatildeo
ltservlet-mappinggt agrave caso a servlet efectue operaccedilotildees
requeridas por elementos externos
ltservlet-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltservletgt
lturl-patterngt agrave define um url para a servlet
ltfiltergt agrave semelhante agrave tag ltservletgt com a diferenccedila
de que esta permite enquadrar uma classe de filtro na
aplicaccedilatildeo que permita a existecircncia de sessotildees na
aplicaccedilatildeo Web ou qualquer segmento de coacutedigo que
necessite de ser constantemente executado
ltfilter-namegt agrave define o nome da classe filtro
ltfilter-classgt agrave aponta o caminho da class na aplica-
ccedilatildeo
ltfilter-mappinggt agrave sempre necessaacuterio definir para
uma classe filtro
ltfilter-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltfiltergt
lturl-patterngt agrave para possuir o efeito de filtro o url seraacute
todos os existentes ou seja
lterror-pagegt agrave tag existente para definir paacuteginas de
erro que sejam geradas pelo web server e que pos-
sam ocorrer na aplicaccedilatildeo
lterror-codegt agrave define o tipo de coacutedigo de erro gerado
pelo web server (404-page not found 500-internal
server errorhellip)
ltlocationgt agrave localiza a paacutegina de erro personalizada
dentro da aplicaccedilatildeo
Estrutura de uma aplicaccedilatildeo Web Java
O exemplo que vai ser aqui apresentado seraacute montado num
Web Archive (ficheiro war) que poderaacute depois ser colocado
num servidor Web sendo os mais conhecidos o Apache
Tomcat e o Oracle Glassfish Ambos disponiacuteveis gratuita-
mente e no pacote de Java EE do IDE NetBeans que os ins-
tala em modo desenvolvimento na maacutequina local
Nota As aplicaccedilotildees necessaacuterias para a criaccedilatildeo deste exem-
plo satildeo o Java Runtime Environment (JRE) o Java Deve-
lopment Kit (JDK) e o IDE NetBeans
A estrutura normal de uma aplicaccedilatildeo java desta natureza
tem por norma a seguinte estrutura
O ficheiro WAR criado se o abrirmos tem uma estrutura de
pastasficheiros orientada ao modelo de desenvolvimento
MVC (Model-view-controller) onde a View estaacute incluiacuteda dire-
tamente na raiz do projeto onde se pode encontrar as paacutegi-
nas JSP e HTML acompanhadas pelos devidos ficheiros
JavaScript e CSS necessaacuterios Caso haja ausecircncia de um
Deployment Descriptor (ficheiro de configuraccedilatildeo referente a
uma determinada aplicaccedilatildeo que neste caso seraacute o webxml)
o servidor Web procura sempre por um indexjsp como paacutegi-
na inicial
Dentro da pasta WEB-INF estatildeo todas as classes bibliote-
cas ficheiros de configuraccedilatildeo e servlets necessaacuterias para
processar a informaccedilatildeo mostrada pelas JSPs
Em suma ter-se-aacute entatildeo algo deste geacutenero
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
9
Nota Nesta estrutura optou-se por colocar as paacuteginas dinacirc-
micas debaixo do WEB-INF pois uma vez que podemos usar
as servlets para controlar o que se deve ou natildeo ser mostrado
perante os pedidos vindos do cliente Isto torna a aplicaccedilatildeo
mais segura na questatildeo de mapeamento de URLs
Desenvolvimento
Neste exemplo vai-se usar o IDE NetBeans pois eacute aquele
que a Oracle recomenda encontra-se disponiacutevel para Win-
dows Linux Solaris e Mac OS X sendo mais simples de
configurar O NetBeans encontra-se disponiacutevel para downlo-
ad no proacuteprio site e no site da Oracle como complemento do
Java Development Kit 7 (Ver bibliografia)
Primeiros passos
Para dar iniacutecio agrave construccedilatildeo da nossa aplicaccedilatildeo Java Web
no NetBeans basta ir a File ndash New Project e aparece-nos a
seguinte janela
E vamos selecionar Java Web ndash Web Application Em se-
guida definimos a localizaccedilatildeo e o nome da nossa aplicaccedilatildeo
Dando o nome de Teste a esta aplicaccedilatildeo no passo seguinte
o nome que foi atribuiacutedo eacute automaticamente dado como
Context Path ou seja a aplicaccedilatildeo iraacute ser identificada no De-
ployment descriptor como Teste e uma vez colocada no servi-
dor teraacute o seguinte URL httphostnameportTeste
Neste exemplo vamos usar para o servidor GlassFish da Ora-
cle a versatildeo 6 do Java EE e o IDE Netbeans
O servidor escolhido pode ser posteriormente alterado caso
queira-se testar a aplicaccedilatildeo noutros ambientes contudo eacute de-
sencorajado a alteraccedilatildeo da versatildeo sem primeiro verificar a
existecircncia de possiacuteveis incompatibilidades com coacutedigo e biblio-
tecas que estejam a ser usadas O uacuteltimo seraacute ignorado uma
vez que este exemplo que vamos criar natildeo vai possuir nenhum
framework
Uma vez concluiacutedo todos os passos verificamos que automati-
camente o IDE criou-nos uma estrutura com uma paacutegina in-
dexjsp na raiz uma pasta WEB-INF vazia e atalhos para a
pasta de sources bibliotecas e de ficheiros de configuraccedilatildeo
com o tradicional MANIFESTMF criado
A estrutura visiacutevel natildeo corresponde agrave estrutura real de diretori-
as para se visualizar isso basta ir ao separador Files situado eacute
esquerda como mostra a imagem seguinte
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
10
Caso natildeo esteja criado o atalho pode-se sempre aceder indo
agrave opccedilatildeo Window ndash File abrindo o separador e recolocando o
atalho
Numa breve comparaccedilatildeo pode-se verificar que o NetBeans
cria determinados ficheiros e diretorias referentes ao projeto
(bluidxml e nbproject) e onde na estrutura do projeto a pasta
Web Pages tem referecircncia agrave pasta web e a Source Packa-
ges tem referecircncia agrave pasta src Todos os ficheiros de confi-
guraccedilatildeo ficam dentro da pasta WEB-INF e no caso da pasta
Libraries o seu conteuacutedo eacute um conjunto de atalhos cuja sua
localizaccedilatildeo pode ser referenciada a quaisquer pastas exter-
nas ao projeto No entanto recomenda-se criar uma pasta lib
debaixo de WEB-INF com as bibliotecas a ser usadas pela
aplicaccedilatildeo para evitar erros originados por utilizaccedilatildeo do mes-
mo ficheiro de biblioteca por mais do que um projeto e para
facilitar a passagem do projeto para outro ambiente ou ma-
quina pois assim basta soacute passar a pasta com o projeto sem
haver preocupaccedilotildees com importaccedilatildeo de bibliotecas
Criaccedilatildeo de uma JSP
Se abrirmos a paacutegina JSP criada pelo IDE ela vai ter um
aspecto semelhante a este
Uma vez que esta paacutegina tem o nome de index caso seja
feito o deploy da aplicaccedilatildeo a mesma vai apresentar uma
paacutegina de fundo branco com o tiacutetulo JSP Page e a frase Hel-
lo World
Para realizar o deploy da aplicaccedilatildeo basta carregar sobre o
botatildeo de play situado no painel de topo do IDE Netbeans ou
entatildeo ir a Run ndash Run Project
Caso o nome da paacutegina seja alterado e natildeo exista nenhuma
paacutegina com o nome index o servidor natildeo consegue encon-
trar nenhuma paacutegina inicial Entatildeo em seguida vamos alterar
o nome da nossa paacutegina inicial para homejsp e vamos con-
figurar o nosso webxml de maneira a criarmos um filtro de
sessatildeo que vai definir que o servidor no arranque da mesma
redirecionar-se para uma determinada servlet
Para tal se formos agrave opccedilatildeo de File ndash New Filehellip na secccedilatildeo
Web selecionar o tipo de ficheiro Standard Development
Descriptor (webxml)
Uma vez criado o ficheiro teraacute o seguinte conteuacutedo por defei-
to
Temos agora o ficheiro webxml onde poderemos colocar as
nossas referecircncias agraves servlets que vamos criar atribuindo-
lhes um url pattern a fim de poderem ser acedidas
Para natildeo termos trabalho o IDE por si soacute resolve todas as
tags que necessitamos de colocar no webxml na altura em
que criamos uma servlet caso natildeo seja resolvido pelo IDE
Para mapearmos a servlet WelcomeServlet no package
mainservlet com o url pattern Welcome o que deveria de ser
colocado seria algo deste geacutenero (ver as tags fornecidas)
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtJSP Pagelttitlegt ltheadgt ltbodygt lth1gtHello Worldlth1gt ltbodygt lthtmlgt
ltxml version=10 encoding=UTF-8gt ltweb-app xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=httpjavasuncomxml nsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsd version=30gt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
ltxml version=10 encoding=UTF-8gt ltweb-app version=30 xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
IacuteNDICE
3
TEMA DE CAPA
Introduccedilatildeo ao Java EE e Java Web (Joseacute Marques)
A PROGRAMAR
COLUNAS
EVENTOS
20 de Junho XXXVI Encontro da Comunidade SQLPort
22 de Junho 39ordf Reuniatildeo Presencial da Comunidade NetPonto em Lisboa
21 e 22 Junho Agile amp Scrum Portugal 2013
11 a 22 Junho CISTI 2013 - 8ordf Conferecircncia Ibeacuterica de Sistemas e Tecnologias de Informaccedilatildeo
Para mais informaccedilotildeeseventos httpbitlyPAP_Eventos Divulga os teus eventos para o email eventosportugal-a-programarpt
Programaccedilatildeo em C const (Antoacutenio Pedro Cunha)
Jogo da Vida (Rita Peres)
JBoss Aplication Server 7 (Mauricio Magnani Jr )
PHP Uma framework ldquofrom scratchrdquo (Parte 1) (Ricardo Perre)
C - Observable vs Task (Paulo Morgado)
Visual(not)Basic - Operator Overloading (Seacutergio Ribeiro)
7
22
COMUNIDADES
NetPonto - Telerik RadControls - Raacutepida implementaccedilatildeo da paacutegina Sobre para Windows Phone Apps (Sara Silva)
48
52
39
24
34
ANAacuteLISES
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees (Joseacute Marques)
C 50 com Visual Studio 2012 (Ricardo Perre) 49
NO CODE
Game Salad (Rita Peres)
Projecto em Destaque na Comunidade PP Little Bits
65
74
42
EVENTOS
I Evento Presencial Programar 46
34
NOTICIAS
4
ARM desenvolve chip anti-piratria
A ARM anunciou o lanccedilamento de um chip anti-pirataria que
vai permitir controlar a utilizaccedilatildeo indevida de conteuacutedos prote-
gidos por direitos de autor
A novidade eacute o resultado de uma parceria com Hollywood
que pretende prevenir a pirataria nos conteuacutedos de viacutedeo em
alta definiccedilatildeo numa proacutexima geraccedilatildeo de smartphones e ta-
blets Vai agir de forma complementar agraves tecnologias de Digi-
tal Rights Management ao niacutevel do hardware
O Mali V500 vai tirar partido da tecnologia TrustZone que a
fabricante britacircnica usa jaacute haacute vaacuterios anos como mecanismo de
seguranccedila para transaccedilotildees e software mas que aqui seraacute
utilizada pela primeira vez com o objetivo de prevenir a utiliza-
ccedilatildeo de conteuacutedos protegidos por direitos de autor
A disponibilizaccedilatildeo de conteuacutedos multimeacutedia de alta definiccedilatildeo
em sistemas moacuteveis tem sido endereccedilada com algumas reti-
cecircncias pelos detentores de direitos sobre esses conteuacutedos
que natildeo encontram grandes mecanismos de seguranccedila nes-
sas plataformas sobretudo no que se refere aos sistemas
operativos moacuteveis de coacutedigo aberto como eacute o caso do An-
droid
Citada pelo Financial Times a ARM defende que a sua tecno-
logia seraacute especialmente uacutetil em paiacuteses como a China onde a
induacutestria consegue fazer um niacutevel miacutenimo de receitas com os
filmes depois destes saiacuterem das salas de cinema
Na Computex a ARM lanccedilou ainda o Cortex A12 um proces-
sador dirigido ao mercado de gama meacutedia desenvolvido a 28
nanoacutemetros A fabricante garante que o chip assegura melho-
rias de 40 ao niacutevel da performance face ao antecessor Cor-
tex A9
Tambeacutem a Intel aproveitou a feira asiaacutetica para apresentar
uma nova geraccedilatildeo de processadores Core i3 i5 e i7 A efici-
ecircncia energeacutetica garante a fabricante eacute o incremento mais
relevante nesta nova geraccedilatildeo de chips
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
A tecnoloacutegica portuguesa quer democratizar o ensino e coloca
a figura do professor como agente principal do objetivo O Kit
Inspired Teacher eacute uma escola ambulante
A JP Inspiring Knowledge empresa responsaacutevel pelos com-
putadores Magalhatildees estaacute a lanccedilar em vaacuterios mercados inter-
nacionais um kit portaacutetil de ensino que se destina aos profes-
sores O conjunto eacute composto por um computador por um
rato com capacidade de digitalizaccedilatildeo por um projetor de pe-
quenas dimensotildees e por um quadro digital que torna qualquer
superfiacutecie plana num ambiente de trabalho
Todos os dispositivos podem ser guardados numa mala trolley
resistente a choques e a aacutegua sistema que reforccedila o caraacuteter
de mobilidade do kit de ensino
O Kit Inspired Teacher tenta conjugar o fator praacutetico ao lado
econoacutemico Mesmo sem revelar o preccedilo do conjunto o pacote
de ensino digital deve ficar mais barato do que montar uma
estrutura semelhante a uma sala de aula com todos os com-
ponentes como um PC projetor e quadro
A ideia da tecnoloacutegica portuguesa eacute diminuir ao maacuteximo o
nuacutemero de casos de crianccedilas que natildeo tecircm acesso ao ensino
pela falta de material escolar qualificado e atualizado O pro-
fessor eacute ao mesmo tempo a sala de aula ideia que tem sido
bem recebida internacionalmente
O conceito jaacute foi apresentado em vaacuterios paiacuteses com uma
resposta muito positiva sobretudo do puacuteblico-alvo principal
os professores Agora com o lanccedilamento desta soluccedilatildeo no
mercado estamos em condiccedilotildees de levar a educaccedilatildeo digital a
qualquer parte do mundo escreve em comunicado o presi-
dente da JP Inspiring Knowledge Jorge Saacute Couto
A empresa responsaacutevel pela gama de equipamentos Maga-
lhatildees natildeo vai disponibilizar o kit em Portugal e a pedido do
TeK tambeacutem natildeo adiantou uma estimativa para o volume de
vendas ateacute ao final do ano
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
JP Inspiring Knowledge cria kit por-
taacutetil de ensino para professores
NOTICIAS
5
Ferramentas de construccedilatildeo extensiacuteveis
Sabemos que eacute preciso construir um sistema que se adapte
aos seus requisitos de projeto mas que se estenda ainda ao
seu ambiente maior de desenvolvimento O Android Studio
usa um novo sistema de construccedilatildeo baseado em Gradle que
proporciona flexibilidade sabores de construccedilatildeo personaliza-
dos resoluccedilatildeo de dependecircncias e muito mais
Este novo sistema de montagem permite-lhe construir os seus
projetos no IDE bem como em seus servidores de integraccedilatildeo
contiacutenua A combinaccedilatildeo permite-lhe gerir facilmente as confi-
guraccedilotildees complexas de construccedilatildeo nativamente atraveacutes do
seu fluxo de trabalho em todas as suas ferramentas Confira
a documentaccedilatildeo de preacute-visualizaccedilatildeo para ter uma ideacuteia me-
lhor do que o novo sistema de construccedilatildeo pode fazer
Ediccedilatildeo de coacutedigo poderoso
O Android Studio inclui um editor de coacutedigo poderoso Ele eacute
baseado no editor IntelliJ IDEA que suporta recursos como
ediccedilatildeo inteligente refatoraccedilatildeo de coacutedigo avanccedilado e anaacutelise
aprofundada de coacutedigo estaacutetico
Os recursos de ediccedilatildeo inteligentes tais como pesquisas de
recursos em linha facilitam a leitura do coacutedigo dando-lhe
acesso instantacircneo a editar o coacutedigo dos recursos de apoio A
refatoraccedilatildeo avanccedilada de coacutedigo daacute-lhe o poder de transfor-
mar seu coacutedigo atraveacutes de todo o projeto com rapidez e se-
guranccedila
Adicionaacutemos anaacutelise de coacutedigo estaacutetico para o desenvolvi-
mento Android ajudando a identificaccedilatildeo de erros mais rapida-
mente Aleacutem das centenas de inspeccedilotildees de coacutedigo que o In-
telliJ IDEA oferece adicionaacutemos inspeccedilotildees personalizados
Por exemplo noacutes adicionamos metadados para as APIs do
Android que assinalam quais os meacutetodos que podem retornar
nulos ou natildeo que constantes satildeo permitidas para que meacuteto-
dos e assim por diante Android Studio usa esses dados para
analisar seu coacutedigo e encontrar possiacuteveis erros
Fonte Android Developers Blog
Portugal acolhe rede internacional
de centros de inclusatildeo social
O Centro de Inclusatildeo Digital um projeto de intervenccedilatildeo social
apoiado pela Microsoft estaacute a chegar a Portugal No primeiro
ano de atividade a organizaccedilatildeo quer chegar a 1200 jovens
A accedilatildeo do CDI centra-se no desenvolvimento de competecircn-
cias tecnoloacutegicas junto de populaccedilotildees provenientes de con-
textos socioeconoacutemicos desfavorecidos com o objetivo de
criar condiccedilotildees de empregabilidade
A organizaccedilatildeo fundada no Brasil em 1995 tambeacutem atua
apoiando iniciativas empresariais empreendedoras Em Portu-
gal pretende criar uma rede nacional de centros de inclusatildeo
digital O primeiro seraacute instalado no bairro da Belavista em
Setuacutebal Uma segunda estrutura estaacute tambeacutem jaacute prevista e vai
localizar-se em Vale de Cambra no Porto
O CDI conta com 780 espaccedilos de inclusatildeo social em 12 paiacute-
ses De acordo com os nuacutemeros avanccedilados pela organizaccedilatildeo
as suas iniciativas jaacute tiveram impacto na vida de um milhatildeo de
pessoas
A iniciativa conta com o apoio da Microsoft que hoje a apre-
sentou no acircmbito do 7ordm Encontro de Parceiros Sociais e que
doou 100 mil doacutelares agrave instituiccedilatildeo para o arranque do projeto
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
Hoje na Google I O anunciaacutemos uma nova IDE que eacute cons-
truiacuteda com as necessidades dos programadores de Android
em mente Eacute chamado Android Estuacutedio eacute gratuito e estaacute ago-
ra disponiacutevel para vocecirc experimentar como uma preacute-
visualizaccedilatildeo de acesso antecipado
Para desenvolver o Estuacutedio Android colaboraacutemos com Jet-
Brains os criadores de uma das mais avanccediladas IDEs Java
disponiacuteveis hoje Basea-
do no poderoso e exten-
siacutevel IntelliJ IDEA
Community Edition adi-
cionaacutemos recursos que
satildeo projetados especifi-
camente para o desen-
volvimento Android que
simplificam e otimizam o
seu fluxo de trabalho
diaacuterio
Android Studio An IDE built for An-
droid
TEMA DE CAPA Introduccedilatildeo ao Java EE e Java Web
TEMA DA CAPA
7
Java Enterprise Edition
A plataforma Java Enterprise Edition ou Java EE eacute uma pla-
taforma da Oracle que fornece uma API adicional ao Java
SE para o desenvolvimento e execuccedilatildeo de aplicaccedilotildees java
do tipo empresarial focadas nos serviccedilos de rede e Web
Vindo do Java Professional Edition o nome que foi anuncia-
do em Maio de 98 foi a partir dos finais de 1999 que ficou
com o nome de Java EE incluindo tecnologias como Java
Database Connectivity (JDBC) Java Servlet JavaServer
Pages (JSP) Enterprise JavaBeans JavaMail etc
CONCEITOS
Aplicaccedilatildeo Web Java
Uma aplicaccedilatildeo Java Web gera paacuteginas Web interactivas
contendo vaacuterios tipos de markup languages (HTML XML
etc) e conteuacutedo dinacircmico Eacute tipicamente composto por ele-
mentos Web tais como JavaServer Pages (JSP) Servlets e
JavaBeans para modificar e temporariamente armazenar
dados interagir com bases de dados e serviccedilos Web geran-
do conteuacutedo em resposta aos pedidos do cliente
JSP (JavaServer Pages)
JavaServer Pages eacute uma tecnologia usada no desenvolvi-
mento de aplicaccedilotildees Web Java semelhante ao PHP Possui
compatibilidades com outras soluccedilotildees Java como a Servlet
corre em servidores como o Apache Tomcat e o GlassFish
Ao contraacuterio dos tiacutepicos jarrsquos os arquivos deste tipo de imple-
mentaccedilotildees satildeo ear ou war (Web Archive)
As paacuteginas Web dinacircmicas java aceitam HTML CSS Ja-
vascript tudo que possam incluir no um ficheiro normal
HTML natildeo necessitam de compilaccedilatildeo preacutevia isso fica ao
cargo do servidor Web de traduzir as linhas de coacutedigo em
Java para o browser compreender
Qualquer coacutedigo Java inserido nos ficheiros JSP deve ficar
entre as tags
lt Code gt (para inserccedilatildeo de coacutedigo)
lt=var gt (para a expressatildeo de uma variaacutevel)
Introduccedilatildeo ao Java EE e Java Web ltpage gt (para importar include para incluir
uma paacutegina JSP ou HTML externa)
Servlet
Eacute uma tecnologia Java que permite gerar dados em HTML e
XML Incluiacuteda na biblioteca javaxservlet permite processar
pedidos e respostas vindas de JSP e serve como uma exten-
satildeo do servidor Web Neste caso vamos usar a HttpServlet
onde a sua funccedilatildeo seraacute processar pedidos das JSP resolver
os pedidos e enviar uma resposta
XML
XML (Extensible Markup Language) subtipo da SGML foi
criada pela W3C com o objectivo de ser usado como formato
de configuraccedilatildeo entre vaacuterias linguagens atraveacutes da internet
Ex
Neste caso em particular o ficheiro XML que vamos criar
editar na configuraccedilatildeo de uma aplicaccedilatildeo Java Web eacute o
webxml que tem como tags mais usa das as seguintes
lt gt agrave define comentaacuterios
ltweb-app id version xmlns gt agrave define o tipo do XML
a versatildeohellip
ltdisplay-namegt agrave define o nome
ltservletgt agrave define uma servlet
ltxml version=10 encoding=iso-8859-1 encoding=iso-8859-1gt ltreceita nome=patildeo tempo_de_preparacao=5 min tempo_de_cozedura=1horagt ltingredientesgt ltingrediente quantidade=4 unidade=chavenasgtFarinhaltingredientegt ltingrediente quantidade=7 unidade=gramasgtFermentoltingredientegt ltingrediente quantidade=15 unidade=chavenasgtAgualtingredientegt ltingrediente quantidade=1 unidade=colheresgtSalltingredientegt ltingredientesgt ltinstrucoesgt ltpassogtMisturar tdos os ingredientesltpassogt ltpassogtCobrir com um pano e deixar repousar uma hora agrave temperatura ambienteltpassogt ltpassogtMisturar novamente e colocar ao forno ateacute ao fim da cozeduraltpassogt ltinstrucoesgt ltreceitagt
TEMA DA CAPA
8
ltservlet-namegt agrave define o nome da servlet
ltservlet-classgt agrave aponta o caminho da servlet na apli-
caccedilatildeo
ltload-on-startupgt agrave quando o valor for 1 a servlet
seraacute inicializada no inicio da aplicaccedilatildeo
ltservlet-mappinggt agrave caso a servlet efectue operaccedilotildees
requeridas por elementos externos
ltservlet-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltservletgt
lturl-patterngt agrave define um url para a servlet
ltfiltergt agrave semelhante agrave tag ltservletgt com a diferenccedila
de que esta permite enquadrar uma classe de filtro na
aplicaccedilatildeo que permita a existecircncia de sessotildees na
aplicaccedilatildeo Web ou qualquer segmento de coacutedigo que
necessite de ser constantemente executado
ltfilter-namegt agrave define o nome da classe filtro
ltfilter-classgt agrave aponta o caminho da class na aplica-
ccedilatildeo
ltfilter-mappinggt agrave sempre necessaacuterio definir para
uma classe filtro
ltfilter-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltfiltergt
lturl-patterngt agrave para possuir o efeito de filtro o url seraacute
todos os existentes ou seja
lterror-pagegt agrave tag existente para definir paacuteginas de
erro que sejam geradas pelo web server e que pos-
sam ocorrer na aplicaccedilatildeo
lterror-codegt agrave define o tipo de coacutedigo de erro gerado
pelo web server (404-page not found 500-internal
server errorhellip)
ltlocationgt agrave localiza a paacutegina de erro personalizada
dentro da aplicaccedilatildeo
Estrutura de uma aplicaccedilatildeo Web Java
O exemplo que vai ser aqui apresentado seraacute montado num
Web Archive (ficheiro war) que poderaacute depois ser colocado
num servidor Web sendo os mais conhecidos o Apache
Tomcat e o Oracle Glassfish Ambos disponiacuteveis gratuita-
mente e no pacote de Java EE do IDE NetBeans que os ins-
tala em modo desenvolvimento na maacutequina local
Nota As aplicaccedilotildees necessaacuterias para a criaccedilatildeo deste exem-
plo satildeo o Java Runtime Environment (JRE) o Java Deve-
lopment Kit (JDK) e o IDE NetBeans
A estrutura normal de uma aplicaccedilatildeo java desta natureza
tem por norma a seguinte estrutura
O ficheiro WAR criado se o abrirmos tem uma estrutura de
pastasficheiros orientada ao modelo de desenvolvimento
MVC (Model-view-controller) onde a View estaacute incluiacuteda dire-
tamente na raiz do projeto onde se pode encontrar as paacutegi-
nas JSP e HTML acompanhadas pelos devidos ficheiros
JavaScript e CSS necessaacuterios Caso haja ausecircncia de um
Deployment Descriptor (ficheiro de configuraccedilatildeo referente a
uma determinada aplicaccedilatildeo que neste caso seraacute o webxml)
o servidor Web procura sempre por um indexjsp como paacutegi-
na inicial
Dentro da pasta WEB-INF estatildeo todas as classes bibliote-
cas ficheiros de configuraccedilatildeo e servlets necessaacuterias para
processar a informaccedilatildeo mostrada pelas JSPs
Em suma ter-se-aacute entatildeo algo deste geacutenero
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
9
Nota Nesta estrutura optou-se por colocar as paacuteginas dinacirc-
micas debaixo do WEB-INF pois uma vez que podemos usar
as servlets para controlar o que se deve ou natildeo ser mostrado
perante os pedidos vindos do cliente Isto torna a aplicaccedilatildeo
mais segura na questatildeo de mapeamento de URLs
Desenvolvimento
Neste exemplo vai-se usar o IDE NetBeans pois eacute aquele
que a Oracle recomenda encontra-se disponiacutevel para Win-
dows Linux Solaris e Mac OS X sendo mais simples de
configurar O NetBeans encontra-se disponiacutevel para downlo-
ad no proacuteprio site e no site da Oracle como complemento do
Java Development Kit 7 (Ver bibliografia)
Primeiros passos
Para dar iniacutecio agrave construccedilatildeo da nossa aplicaccedilatildeo Java Web
no NetBeans basta ir a File ndash New Project e aparece-nos a
seguinte janela
E vamos selecionar Java Web ndash Web Application Em se-
guida definimos a localizaccedilatildeo e o nome da nossa aplicaccedilatildeo
Dando o nome de Teste a esta aplicaccedilatildeo no passo seguinte
o nome que foi atribuiacutedo eacute automaticamente dado como
Context Path ou seja a aplicaccedilatildeo iraacute ser identificada no De-
ployment descriptor como Teste e uma vez colocada no servi-
dor teraacute o seguinte URL httphostnameportTeste
Neste exemplo vamos usar para o servidor GlassFish da Ora-
cle a versatildeo 6 do Java EE e o IDE Netbeans
O servidor escolhido pode ser posteriormente alterado caso
queira-se testar a aplicaccedilatildeo noutros ambientes contudo eacute de-
sencorajado a alteraccedilatildeo da versatildeo sem primeiro verificar a
existecircncia de possiacuteveis incompatibilidades com coacutedigo e biblio-
tecas que estejam a ser usadas O uacuteltimo seraacute ignorado uma
vez que este exemplo que vamos criar natildeo vai possuir nenhum
framework
Uma vez concluiacutedo todos os passos verificamos que automati-
camente o IDE criou-nos uma estrutura com uma paacutegina in-
dexjsp na raiz uma pasta WEB-INF vazia e atalhos para a
pasta de sources bibliotecas e de ficheiros de configuraccedilatildeo
com o tradicional MANIFESTMF criado
A estrutura visiacutevel natildeo corresponde agrave estrutura real de diretori-
as para se visualizar isso basta ir ao separador Files situado eacute
esquerda como mostra a imagem seguinte
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
10
Caso natildeo esteja criado o atalho pode-se sempre aceder indo
agrave opccedilatildeo Window ndash File abrindo o separador e recolocando o
atalho
Numa breve comparaccedilatildeo pode-se verificar que o NetBeans
cria determinados ficheiros e diretorias referentes ao projeto
(bluidxml e nbproject) e onde na estrutura do projeto a pasta
Web Pages tem referecircncia agrave pasta web e a Source Packa-
ges tem referecircncia agrave pasta src Todos os ficheiros de confi-
guraccedilatildeo ficam dentro da pasta WEB-INF e no caso da pasta
Libraries o seu conteuacutedo eacute um conjunto de atalhos cuja sua
localizaccedilatildeo pode ser referenciada a quaisquer pastas exter-
nas ao projeto No entanto recomenda-se criar uma pasta lib
debaixo de WEB-INF com as bibliotecas a ser usadas pela
aplicaccedilatildeo para evitar erros originados por utilizaccedilatildeo do mes-
mo ficheiro de biblioteca por mais do que um projeto e para
facilitar a passagem do projeto para outro ambiente ou ma-
quina pois assim basta soacute passar a pasta com o projeto sem
haver preocupaccedilotildees com importaccedilatildeo de bibliotecas
Criaccedilatildeo de uma JSP
Se abrirmos a paacutegina JSP criada pelo IDE ela vai ter um
aspecto semelhante a este
Uma vez que esta paacutegina tem o nome de index caso seja
feito o deploy da aplicaccedilatildeo a mesma vai apresentar uma
paacutegina de fundo branco com o tiacutetulo JSP Page e a frase Hel-
lo World
Para realizar o deploy da aplicaccedilatildeo basta carregar sobre o
botatildeo de play situado no painel de topo do IDE Netbeans ou
entatildeo ir a Run ndash Run Project
Caso o nome da paacutegina seja alterado e natildeo exista nenhuma
paacutegina com o nome index o servidor natildeo consegue encon-
trar nenhuma paacutegina inicial Entatildeo em seguida vamos alterar
o nome da nossa paacutegina inicial para homejsp e vamos con-
figurar o nosso webxml de maneira a criarmos um filtro de
sessatildeo que vai definir que o servidor no arranque da mesma
redirecionar-se para uma determinada servlet
Para tal se formos agrave opccedilatildeo de File ndash New Filehellip na secccedilatildeo
Web selecionar o tipo de ficheiro Standard Development
Descriptor (webxml)
Uma vez criado o ficheiro teraacute o seguinte conteuacutedo por defei-
to
Temos agora o ficheiro webxml onde poderemos colocar as
nossas referecircncias agraves servlets que vamos criar atribuindo-
lhes um url pattern a fim de poderem ser acedidas
Para natildeo termos trabalho o IDE por si soacute resolve todas as
tags que necessitamos de colocar no webxml na altura em
que criamos uma servlet caso natildeo seja resolvido pelo IDE
Para mapearmos a servlet WelcomeServlet no package
mainservlet com o url pattern Welcome o que deveria de ser
colocado seria algo deste geacutenero (ver as tags fornecidas)
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtJSP Pagelttitlegt ltheadgt ltbodygt lth1gtHello Worldlth1gt ltbodygt lthtmlgt
ltxml version=10 encoding=UTF-8gt ltweb-app xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=httpjavasuncomxml nsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsd version=30gt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
ltxml version=10 encoding=UTF-8gt ltweb-app version=30 xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
NOTICIAS
4
ARM desenvolve chip anti-piratria
A ARM anunciou o lanccedilamento de um chip anti-pirataria que
vai permitir controlar a utilizaccedilatildeo indevida de conteuacutedos prote-
gidos por direitos de autor
A novidade eacute o resultado de uma parceria com Hollywood
que pretende prevenir a pirataria nos conteuacutedos de viacutedeo em
alta definiccedilatildeo numa proacutexima geraccedilatildeo de smartphones e ta-
blets Vai agir de forma complementar agraves tecnologias de Digi-
tal Rights Management ao niacutevel do hardware
O Mali V500 vai tirar partido da tecnologia TrustZone que a
fabricante britacircnica usa jaacute haacute vaacuterios anos como mecanismo de
seguranccedila para transaccedilotildees e software mas que aqui seraacute
utilizada pela primeira vez com o objetivo de prevenir a utiliza-
ccedilatildeo de conteuacutedos protegidos por direitos de autor
A disponibilizaccedilatildeo de conteuacutedos multimeacutedia de alta definiccedilatildeo
em sistemas moacuteveis tem sido endereccedilada com algumas reti-
cecircncias pelos detentores de direitos sobre esses conteuacutedos
que natildeo encontram grandes mecanismos de seguranccedila nes-
sas plataformas sobretudo no que se refere aos sistemas
operativos moacuteveis de coacutedigo aberto como eacute o caso do An-
droid
Citada pelo Financial Times a ARM defende que a sua tecno-
logia seraacute especialmente uacutetil em paiacuteses como a China onde a
induacutestria consegue fazer um niacutevel miacutenimo de receitas com os
filmes depois destes saiacuterem das salas de cinema
Na Computex a ARM lanccedilou ainda o Cortex A12 um proces-
sador dirigido ao mercado de gama meacutedia desenvolvido a 28
nanoacutemetros A fabricante garante que o chip assegura melho-
rias de 40 ao niacutevel da performance face ao antecessor Cor-
tex A9
Tambeacutem a Intel aproveitou a feira asiaacutetica para apresentar
uma nova geraccedilatildeo de processadores Core i3 i5 e i7 A efici-
ecircncia energeacutetica garante a fabricante eacute o incremento mais
relevante nesta nova geraccedilatildeo de chips
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
A tecnoloacutegica portuguesa quer democratizar o ensino e coloca
a figura do professor como agente principal do objetivo O Kit
Inspired Teacher eacute uma escola ambulante
A JP Inspiring Knowledge empresa responsaacutevel pelos com-
putadores Magalhatildees estaacute a lanccedilar em vaacuterios mercados inter-
nacionais um kit portaacutetil de ensino que se destina aos profes-
sores O conjunto eacute composto por um computador por um
rato com capacidade de digitalizaccedilatildeo por um projetor de pe-
quenas dimensotildees e por um quadro digital que torna qualquer
superfiacutecie plana num ambiente de trabalho
Todos os dispositivos podem ser guardados numa mala trolley
resistente a choques e a aacutegua sistema que reforccedila o caraacuteter
de mobilidade do kit de ensino
O Kit Inspired Teacher tenta conjugar o fator praacutetico ao lado
econoacutemico Mesmo sem revelar o preccedilo do conjunto o pacote
de ensino digital deve ficar mais barato do que montar uma
estrutura semelhante a uma sala de aula com todos os com-
ponentes como um PC projetor e quadro
A ideia da tecnoloacutegica portuguesa eacute diminuir ao maacuteximo o
nuacutemero de casos de crianccedilas que natildeo tecircm acesso ao ensino
pela falta de material escolar qualificado e atualizado O pro-
fessor eacute ao mesmo tempo a sala de aula ideia que tem sido
bem recebida internacionalmente
O conceito jaacute foi apresentado em vaacuterios paiacuteses com uma
resposta muito positiva sobretudo do puacuteblico-alvo principal
os professores Agora com o lanccedilamento desta soluccedilatildeo no
mercado estamos em condiccedilotildees de levar a educaccedilatildeo digital a
qualquer parte do mundo escreve em comunicado o presi-
dente da JP Inspiring Knowledge Jorge Saacute Couto
A empresa responsaacutevel pela gama de equipamentos Maga-
lhatildees natildeo vai disponibilizar o kit em Portugal e a pedido do
TeK tambeacutem natildeo adiantou uma estimativa para o volume de
vendas ateacute ao final do ano
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
JP Inspiring Knowledge cria kit por-
taacutetil de ensino para professores
NOTICIAS
5
Ferramentas de construccedilatildeo extensiacuteveis
Sabemos que eacute preciso construir um sistema que se adapte
aos seus requisitos de projeto mas que se estenda ainda ao
seu ambiente maior de desenvolvimento O Android Studio
usa um novo sistema de construccedilatildeo baseado em Gradle que
proporciona flexibilidade sabores de construccedilatildeo personaliza-
dos resoluccedilatildeo de dependecircncias e muito mais
Este novo sistema de montagem permite-lhe construir os seus
projetos no IDE bem como em seus servidores de integraccedilatildeo
contiacutenua A combinaccedilatildeo permite-lhe gerir facilmente as confi-
guraccedilotildees complexas de construccedilatildeo nativamente atraveacutes do
seu fluxo de trabalho em todas as suas ferramentas Confira
a documentaccedilatildeo de preacute-visualizaccedilatildeo para ter uma ideacuteia me-
lhor do que o novo sistema de construccedilatildeo pode fazer
Ediccedilatildeo de coacutedigo poderoso
O Android Studio inclui um editor de coacutedigo poderoso Ele eacute
baseado no editor IntelliJ IDEA que suporta recursos como
ediccedilatildeo inteligente refatoraccedilatildeo de coacutedigo avanccedilado e anaacutelise
aprofundada de coacutedigo estaacutetico
Os recursos de ediccedilatildeo inteligentes tais como pesquisas de
recursos em linha facilitam a leitura do coacutedigo dando-lhe
acesso instantacircneo a editar o coacutedigo dos recursos de apoio A
refatoraccedilatildeo avanccedilada de coacutedigo daacute-lhe o poder de transfor-
mar seu coacutedigo atraveacutes de todo o projeto com rapidez e se-
guranccedila
Adicionaacutemos anaacutelise de coacutedigo estaacutetico para o desenvolvi-
mento Android ajudando a identificaccedilatildeo de erros mais rapida-
mente Aleacutem das centenas de inspeccedilotildees de coacutedigo que o In-
telliJ IDEA oferece adicionaacutemos inspeccedilotildees personalizados
Por exemplo noacutes adicionamos metadados para as APIs do
Android que assinalam quais os meacutetodos que podem retornar
nulos ou natildeo que constantes satildeo permitidas para que meacuteto-
dos e assim por diante Android Studio usa esses dados para
analisar seu coacutedigo e encontrar possiacuteveis erros
Fonte Android Developers Blog
Portugal acolhe rede internacional
de centros de inclusatildeo social
O Centro de Inclusatildeo Digital um projeto de intervenccedilatildeo social
apoiado pela Microsoft estaacute a chegar a Portugal No primeiro
ano de atividade a organizaccedilatildeo quer chegar a 1200 jovens
A accedilatildeo do CDI centra-se no desenvolvimento de competecircn-
cias tecnoloacutegicas junto de populaccedilotildees provenientes de con-
textos socioeconoacutemicos desfavorecidos com o objetivo de
criar condiccedilotildees de empregabilidade
A organizaccedilatildeo fundada no Brasil em 1995 tambeacutem atua
apoiando iniciativas empresariais empreendedoras Em Portu-
gal pretende criar uma rede nacional de centros de inclusatildeo
digital O primeiro seraacute instalado no bairro da Belavista em
Setuacutebal Uma segunda estrutura estaacute tambeacutem jaacute prevista e vai
localizar-se em Vale de Cambra no Porto
O CDI conta com 780 espaccedilos de inclusatildeo social em 12 paiacute-
ses De acordo com os nuacutemeros avanccedilados pela organizaccedilatildeo
as suas iniciativas jaacute tiveram impacto na vida de um milhatildeo de
pessoas
A iniciativa conta com o apoio da Microsoft que hoje a apre-
sentou no acircmbito do 7ordm Encontro de Parceiros Sociais e que
doou 100 mil doacutelares agrave instituiccedilatildeo para o arranque do projeto
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
Hoje na Google I O anunciaacutemos uma nova IDE que eacute cons-
truiacuteda com as necessidades dos programadores de Android
em mente Eacute chamado Android Estuacutedio eacute gratuito e estaacute ago-
ra disponiacutevel para vocecirc experimentar como uma preacute-
visualizaccedilatildeo de acesso antecipado
Para desenvolver o Estuacutedio Android colaboraacutemos com Jet-
Brains os criadores de uma das mais avanccediladas IDEs Java
disponiacuteveis hoje Basea-
do no poderoso e exten-
siacutevel IntelliJ IDEA
Community Edition adi-
cionaacutemos recursos que
satildeo projetados especifi-
camente para o desen-
volvimento Android que
simplificam e otimizam o
seu fluxo de trabalho
diaacuterio
Android Studio An IDE built for An-
droid
TEMA DE CAPA Introduccedilatildeo ao Java EE e Java Web
TEMA DA CAPA
7
Java Enterprise Edition
A plataforma Java Enterprise Edition ou Java EE eacute uma pla-
taforma da Oracle que fornece uma API adicional ao Java
SE para o desenvolvimento e execuccedilatildeo de aplicaccedilotildees java
do tipo empresarial focadas nos serviccedilos de rede e Web
Vindo do Java Professional Edition o nome que foi anuncia-
do em Maio de 98 foi a partir dos finais de 1999 que ficou
com o nome de Java EE incluindo tecnologias como Java
Database Connectivity (JDBC) Java Servlet JavaServer
Pages (JSP) Enterprise JavaBeans JavaMail etc
CONCEITOS
Aplicaccedilatildeo Web Java
Uma aplicaccedilatildeo Java Web gera paacuteginas Web interactivas
contendo vaacuterios tipos de markup languages (HTML XML
etc) e conteuacutedo dinacircmico Eacute tipicamente composto por ele-
mentos Web tais como JavaServer Pages (JSP) Servlets e
JavaBeans para modificar e temporariamente armazenar
dados interagir com bases de dados e serviccedilos Web geran-
do conteuacutedo em resposta aos pedidos do cliente
JSP (JavaServer Pages)
JavaServer Pages eacute uma tecnologia usada no desenvolvi-
mento de aplicaccedilotildees Web Java semelhante ao PHP Possui
compatibilidades com outras soluccedilotildees Java como a Servlet
corre em servidores como o Apache Tomcat e o GlassFish
Ao contraacuterio dos tiacutepicos jarrsquos os arquivos deste tipo de imple-
mentaccedilotildees satildeo ear ou war (Web Archive)
As paacuteginas Web dinacircmicas java aceitam HTML CSS Ja-
vascript tudo que possam incluir no um ficheiro normal
HTML natildeo necessitam de compilaccedilatildeo preacutevia isso fica ao
cargo do servidor Web de traduzir as linhas de coacutedigo em
Java para o browser compreender
Qualquer coacutedigo Java inserido nos ficheiros JSP deve ficar
entre as tags
lt Code gt (para inserccedilatildeo de coacutedigo)
lt=var gt (para a expressatildeo de uma variaacutevel)
Introduccedilatildeo ao Java EE e Java Web ltpage gt (para importar include para incluir
uma paacutegina JSP ou HTML externa)
Servlet
Eacute uma tecnologia Java que permite gerar dados em HTML e
XML Incluiacuteda na biblioteca javaxservlet permite processar
pedidos e respostas vindas de JSP e serve como uma exten-
satildeo do servidor Web Neste caso vamos usar a HttpServlet
onde a sua funccedilatildeo seraacute processar pedidos das JSP resolver
os pedidos e enviar uma resposta
XML
XML (Extensible Markup Language) subtipo da SGML foi
criada pela W3C com o objectivo de ser usado como formato
de configuraccedilatildeo entre vaacuterias linguagens atraveacutes da internet
Ex
Neste caso em particular o ficheiro XML que vamos criar
editar na configuraccedilatildeo de uma aplicaccedilatildeo Java Web eacute o
webxml que tem como tags mais usa das as seguintes
lt gt agrave define comentaacuterios
ltweb-app id version xmlns gt agrave define o tipo do XML
a versatildeohellip
ltdisplay-namegt agrave define o nome
ltservletgt agrave define uma servlet
ltxml version=10 encoding=iso-8859-1 encoding=iso-8859-1gt ltreceita nome=patildeo tempo_de_preparacao=5 min tempo_de_cozedura=1horagt ltingredientesgt ltingrediente quantidade=4 unidade=chavenasgtFarinhaltingredientegt ltingrediente quantidade=7 unidade=gramasgtFermentoltingredientegt ltingrediente quantidade=15 unidade=chavenasgtAgualtingredientegt ltingrediente quantidade=1 unidade=colheresgtSalltingredientegt ltingredientesgt ltinstrucoesgt ltpassogtMisturar tdos os ingredientesltpassogt ltpassogtCobrir com um pano e deixar repousar uma hora agrave temperatura ambienteltpassogt ltpassogtMisturar novamente e colocar ao forno ateacute ao fim da cozeduraltpassogt ltinstrucoesgt ltreceitagt
TEMA DA CAPA
8
ltservlet-namegt agrave define o nome da servlet
ltservlet-classgt agrave aponta o caminho da servlet na apli-
caccedilatildeo
ltload-on-startupgt agrave quando o valor for 1 a servlet
seraacute inicializada no inicio da aplicaccedilatildeo
ltservlet-mappinggt agrave caso a servlet efectue operaccedilotildees
requeridas por elementos externos
ltservlet-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltservletgt
lturl-patterngt agrave define um url para a servlet
ltfiltergt agrave semelhante agrave tag ltservletgt com a diferenccedila
de que esta permite enquadrar uma classe de filtro na
aplicaccedilatildeo que permita a existecircncia de sessotildees na
aplicaccedilatildeo Web ou qualquer segmento de coacutedigo que
necessite de ser constantemente executado
ltfilter-namegt agrave define o nome da classe filtro
ltfilter-classgt agrave aponta o caminho da class na aplica-
ccedilatildeo
ltfilter-mappinggt agrave sempre necessaacuterio definir para
uma classe filtro
ltfilter-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltfiltergt
lturl-patterngt agrave para possuir o efeito de filtro o url seraacute
todos os existentes ou seja
lterror-pagegt agrave tag existente para definir paacuteginas de
erro que sejam geradas pelo web server e que pos-
sam ocorrer na aplicaccedilatildeo
lterror-codegt agrave define o tipo de coacutedigo de erro gerado
pelo web server (404-page not found 500-internal
server errorhellip)
ltlocationgt agrave localiza a paacutegina de erro personalizada
dentro da aplicaccedilatildeo
Estrutura de uma aplicaccedilatildeo Web Java
O exemplo que vai ser aqui apresentado seraacute montado num
Web Archive (ficheiro war) que poderaacute depois ser colocado
num servidor Web sendo os mais conhecidos o Apache
Tomcat e o Oracle Glassfish Ambos disponiacuteveis gratuita-
mente e no pacote de Java EE do IDE NetBeans que os ins-
tala em modo desenvolvimento na maacutequina local
Nota As aplicaccedilotildees necessaacuterias para a criaccedilatildeo deste exem-
plo satildeo o Java Runtime Environment (JRE) o Java Deve-
lopment Kit (JDK) e o IDE NetBeans
A estrutura normal de uma aplicaccedilatildeo java desta natureza
tem por norma a seguinte estrutura
O ficheiro WAR criado se o abrirmos tem uma estrutura de
pastasficheiros orientada ao modelo de desenvolvimento
MVC (Model-view-controller) onde a View estaacute incluiacuteda dire-
tamente na raiz do projeto onde se pode encontrar as paacutegi-
nas JSP e HTML acompanhadas pelos devidos ficheiros
JavaScript e CSS necessaacuterios Caso haja ausecircncia de um
Deployment Descriptor (ficheiro de configuraccedilatildeo referente a
uma determinada aplicaccedilatildeo que neste caso seraacute o webxml)
o servidor Web procura sempre por um indexjsp como paacutegi-
na inicial
Dentro da pasta WEB-INF estatildeo todas as classes bibliote-
cas ficheiros de configuraccedilatildeo e servlets necessaacuterias para
processar a informaccedilatildeo mostrada pelas JSPs
Em suma ter-se-aacute entatildeo algo deste geacutenero
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
9
Nota Nesta estrutura optou-se por colocar as paacuteginas dinacirc-
micas debaixo do WEB-INF pois uma vez que podemos usar
as servlets para controlar o que se deve ou natildeo ser mostrado
perante os pedidos vindos do cliente Isto torna a aplicaccedilatildeo
mais segura na questatildeo de mapeamento de URLs
Desenvolvimento
Neste exemplo vai-se usar o IDE NetBeans pois eacute aquele
que a Oracle recomenda encontra-se disponiacutevel para Win-
dows Linux Solaris e Mac OS X sendo mais simples de
configurar O NetBeans encontra-se disponiacutevel para downlo-
ad no proacuteprio site e no site da Oracle como complemento do
Java Development Kit 7 (Ver bibliografia)
Primeiros passos
Para dar iniacutecio agrave construccedilatildeo da nossa aplicaccedilatildeo Java Web
no NetBeans basta ir a File ndash New Project e aparece-nos a
seguinte janela
E vamos selecionar Java Web ndash Web Application Em se-
guida definimos a localizaccedilatildeo e o nome da nossa aplicaccedilatildeo
Dando o nome de Teste a esta aplicaccedilatildeo no passo seguinte
o nome que foi atribuiacutedo eacute automaticamente dado como
Context Path ou seja a aplicaccedilatildeo iraacute ser identificada no De-
ployment descriptor como Teste e uma vez colocada no servi-
dor teraacute o seguinte URL httphostnameportTeste
Neste exemplo vamos usar para o servidor GlassFish da Ora-
cle a versatildeo 6 do Java EE e o IDE Netbeans
O servidor escolhido pode ser posteriormente alterado caso
queira-se testar a aplicaccedilatildeo noutros ambientes contudo eacute de-
sencorajado a alteraccedilatildeo da versatildeo sem primeiro verificar a
existecircncia de possiacuteveis incompatibilidades com coacutedigo e biblio-
tecas que estejam a ser usadas O uacuteltimo seraacute ignorado uma
vez que este exemplo que vamos criar natildeo vai possuir nenhum
framework
Uma vez concluiacutedo todos os passos verificamos que automati-
camente o IDE criou-nos uma estrutura com uma paacutegina in-
dexjsp na raiz uma pasta WEB-INF vazia e atalhos para a
pasta de sources bibliotecas e de ficheiros de configuraccedilatildeo
com o tradicional MANIFESTMF criado
A estrutura visiacutevel natildeo corresponde agrave estrutura real de diretori-
as para se visualizar isso basta ir ao separador Files situado eacute
esquerda como mostra a imagem seguinte
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
10
Caso natildeo esteja criado o atalho pode-se sempre aceder indo
agrave opccedilatildeo Window ndash File abrindo o separador e recolocando o
atalho
Numa breve comparaccedilatildeo pode-se verificar que o NetBeans
cria determinados ficheiros e diretorias referentes ao projeto
(bluidxml e nbproject) e onde na estrutura do projeto a pasta
Web Pages tem referecircncia agrave pasta web e a Source Packa-
ges tem referecircncia agrave pasta src Todos os ficheiros de confi-
guraccedilatildeo ficam dentro da pasta WEB-INF e no caso da pasta
Libraries o seu conteuacutedo eacute um conjunto de atalhos cuja sua
localizaccedilatildeo pode ser referenciada a quaisquer pastas exter-
nas ao projeto No entanto recomenda-se criar uma pasta lib
debaixo de WEB-INF com as bibliotecas a ser usadas pela
aplicaccedilatildeo para evitar erros originados por utilizaccedilatildeo do mes-
mo ficheiro de biblioteca por mais do que um projeto e para
facilitar a passagem do projeto para outro ambiente ou ma-
quina pois assim basta soacute passar a pasta com o projeto sem
haver preocupaccedilotildees com importaccedilatildeo de bibliotecas
Criaccedilatildeo de uma JSP
Se abrirmos a paacutegina JSP criada pelo IDE ela vai ter um
aspecto semelhante a este
Uma vez que esta paacutegina tem o nome de index caso seja
feito o deploy da aplicaccedilatildeo a mesma vai apresentar uma
paacutegina de fundo branco com o tiacutetulo JSP Page e a frase Hel-
lo World
Para realizar o deploy da aplicaccedilatildeo basta carregar sobre o
botatildeo de play situado no painel de topo do IDE Netbeans ou
entatildeo ir a Run ndash Run Project
Caso o nome da paacutegina seja alterado e natildeo exista nenhuma
paacutegina com o nome index o servidor natildeo consegue encon-
trar nenhuma paacutegina inicial Entatildeo em seguida vamos alterar
o nome da nossa paacutegina inicial para homejsp e vamos con-
figurar o nosso webxml de maneira a criarmos um filtro de
sessatildeo que vai definir que o servidor no arranque da mesma
redirecionar-se para uma determinada servlet
Para tal se formos agrave opccedilatildeo de File ndash New Filehellip na secccedilatildeo
Web selecionar o tipo de ficheiro Standard Development
Descriptor (webxml)
Uma vez criado o ficheiro teraacute o seguinte conteuacutedo por defei-
to
Temos agora o ficheiro webxml onde poderemos colocar as
nossas referecircncias agraves servlets que vamos criar atribuindo-
lhes um url pattern a fim de poderem ser acedidas
Para natildeo termos trabalho o IDE por si soacute resolve todas as
tags que necessitamos de colocar no webxml na altura em
que criamos uma servlet caso natildeo seja resolvido pelo IDE
Para mapearmos a servlet WelcomeServlet no package
mainservlet com o url pattern Welcome o que deveria de ser
colocado seria algo deste geacutenero (ver as tags fornecidas)
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtJSP Pagelttitlegt ltheadgt ltbodygt lth1gtHello Worldlth1gt ltbodygt lthtmlgt
ltxml version=10 encoding=UTF-8gt ltweb-app xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=httpjavasuncomxml nsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsd version=30gt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
ltxml version=10 encoding=UTF-8gt ltweb-app version=30 xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
NOTICIAS
5
Ferramentas de construccedilatildeo extensiacuteveis
Sabemos que eacute preciso construir um sistema que se adapte
aos seus requisitos de projeto mas que se estenda ainda ao
seu ambiente maior de desenvolvimento O Android Studio
usa um novo sistema de construccedilatildeo baseado em Gradle que
proporciona flexibilidade sabores de construccedilatildeo personaliza-
dos resoluccedilatildeo de dependecircncias e muito mais
Este novo sistema de montagem permite-lhe construir os seus
projetos no IDE bem como em seus servidores de integraccedilatildeo
contiacutenua A combinaccedilatildeo permite-lhe gerir facilmente as confi-
guraccedilotildees complexas de construccedilatildeo nativamente atraveacutes do
seu fluxo de trabalho em todas as suas ferramentas Confira
a documentaccedilatildeo de preacute-visualizaccedilatildeo para ter uma ideacuteia me-
lhor do que o novo sistema de construccedilatildeo pode fazer
Ediccedilatildeo de coacutedigo poderoso
O Android Studio inclui um editor de coacutedigo poderoso Ele eacute
baseado no editor IntelliJ IDEA que suporta recursos como
ediccedilatildeo inteligente refatoraccedilatildeo de coacutedigo avanccedilado e anaacutelise
aprofundada de coacutedigo estaacutetico
Os recursos de ediccedilatildeo inteligentes tais como pesquisas de
recursos em linha facilitam a leitura do coacutedigo dando-lhe
acesso instantacircneo a editar o coacutedigo dos recursos de apoio A
refatoraccedilatildeo avanccedilada de coacutedigo daacute-lhe o poder de transfor-
mar seu coacutedigo atraveacutes de todo o projeto com rapidez e se-
guranccedila
Adicionaacutemos anaacutelise de coacutedigo estaacutetico para o desenvolvi-
mento Android ajudando a identificaccedilatildeo de erros mais rapida-
mente Aleacutem das centenas de inspeccedilotildees de coacutedigo que o In-
telliJ IDEA oferece adicionaacutemos inspeccedilotildees personalizados
Por exemplo noacutes adicionamos metadados para as APIs do
Android que assinalam quais os meacutetodos que podem retornar
nulos ou natildeo que constantes satildeo permitidas para que meacuteto-
dos e assim por diante Android Studio usa esses dados para
analisar seu coacutedigo e encontrar possiacuteveis erros
Fonte Android Developers Blog
Portugal acolhe rede internacional
de centros de inclusatildeo social
O Centro de Inclusatildeo Digital um projeto de intervenccedilatildeo social
apoiado pela Microsoft estaacute a chegar a Portugal No primeiro
ano de atividade a organizaccedilatildeo quer chegar a 1200 jovens
A accedilatildeo do CDI centra-se no desenvolvimento de competecircn-
cias tecnoloacutegicas junto de populaccedilotildees provenientes de con-
textos socioeconoacutemicos desfavorecidos com o objetivo de
criar condiccedilotildees de empregabilidade
A organizaccedilatildeo fundada no Brasil em 1995 tambeacutem atua
apoiando iniciativas empresariais empreendedoras Em Portu-
gal pretende criar uma rede nacional de centros de inclusatildeo
digital O primeiro seraacute instalado no bairro da Belavista em
Setuacutebal Uma segunda estrutura estaacute tambeacutem jaacute prevista e vai
localizar-se em Vale de Cambra no Porto
O CDI conta com 780 espaccedilos de inclusatildeo social em 12 paiacute-
ses De acordo com os nuacutemeros avanccedilados pela organizaccedilatildeo
as suas iniciativas jaacute tiveram impacto na vida de um milhatildeo de
pessoas
A iniciativa conta com o apoio da Microsoft que hoje a apre-
sentou no acircmbito do 7ordm Encontro de Parceiros Sociais e que
doou 100 mil doacutelares agrave instituiccedilatildeo para o arranque do projeto
Escrito ao abrigo do novo Acordo Ortograacutefico
Fonte Tek Sapo
Hoje na Google I O anunciaacutemos uma nova IDE que eacute cons-
truiacuteda com as necessidades dos programadores de Android
em mente Eacute chamado Android Estuacutedio eacute gratuito e estaacute ago-
ra disponiacutevel para vocecirc experimentar como uma preacute-
visualizaccedilatildeo de acesso antecipado
Para desenvolver o Estuacutedio Android colaboraacutemos com Jet-
Brains os criadores de uma das mais avanccediladas IDEs Java
disponiacuteveis hoje Basea-
do no poderoso e exten-
siacutevel IntelliJ IDEA
Community Edition adi-
cionaacutemos recursos que
satildeo projetados especifi-
camente para o desen-
volvimento Android que
simplificam e otimizam o
seu fluxo de trabalho
diaacuterio
Android Studio An IDE built for An-
droid
TEMA DE CAPA Introduccedilatildeo ao Java EE e Java Web
TEMA DA CAPA
7
Java Enterprise Edition
A plataforma Java Enterprise Edition ou Java EE eacute uma pla-
taforma da Oracle que fornece uma API adicional ao Java
SE para o desenvolvimento e execuccedilatildeo de aplicaccedilotildees java
do tipo empresarial focadas nos serviccedilos de rede e Web
Vindo do Java Professional Edition o nome que foi anuncia-
do em Maio de 98 foi a partir dos finais de 1999 que ficou
com o nome de Java EE incluindo tecnologias como Java
Database Connectivity (JDBC) Java Servlet JavaServer
Pages (JSP) Enterprise JavaBeans JavaMail etc
CONCEITOS
Aplicaccedilatildeo Web Java
Uma aplicaccedilatildeo Java Web gera paacuteginas Web interactivas
contendo vaacuterios tipos de markup languages (HTML XML
etc) e conteuacutedo dinacircmico Eacute tipicamente composto por ele-
mentos Web tais como JavaServer Pages (JSP) Servlets e
JavaBeans para modificar e temporariamente armazenar
dados interagir com bases de dados e serviccedilos Web geran-
do conteuacutedo em resposta aos pedidos do cliente
JSP (JavaServer Pages)
JavaServer Pages eacute uma tecnologia usada no desenvolvi-
mento de aplicaccedilotildees Web Java semelhante ao PHP Possui
compatibilidades com outras soluccedilotildees Java como a Servlet
corre em servidores como o Apache Tomcat e o GlassFish
Ao contraacuterio dos tiacutepicos jarrsquos os arquivos deste tipo de imple-
mentaccedilotildees satildeo ear ou war (Web Archive)
As paacuteginas Web dinacircmicas java aceitam HTML CSS Ja-
vascript tudo que possam incluir no um ficheiro normal
HTML natildeo necessitam de compilaccedilatildeo preacutevia isso fica ao
cargo do servidor Web de traduzir as linhas de coacutedigo em
Java para o browser compreender
Qualquer coacutedigo Java inserido nos ficheiros JSP deve ficar
entre as tags
lt Code gt (para inserccedilatildeo de coacutedigo)
lt=var gt (para a expressatildeo de uma variaacutevel)
Introduccedilatildeo ao Java EE e Java Web ltpage gt (para importar include para incluir
uma paacutegina JSP ou HTML externa)
Servlet
Eacute uma tecnologia Java que permite gerar dados em HTML e
XML Incluiacuteda na biblioteca javaxservlet permite processar
pedidos e respostas vindas de JSP e serve como uma exten-
satildeo do servidor Web Neste caso vamos usar a HttpServlet
onde a sua funccedilatildeo seraacute processar pedidos das JSP resolver
os pedidos e enviar uma resposta
XML
XML (Extensible Markup Language) subtipo da SGML foi
criada pela W3C com o objectivo de ser usado como formato
de configuraccedilatildeo entre vaacuterias linguagens atraveacutes da internet
Ex
Neste caso em particular o ficheiro XML que vamos criar
editar na configuraccedilatildeo de uma aplicaccedilatildeo Java Web eacute o
webxml que tem como tags mais usa das as seguintes
lt gt agrave define comentaacuterios
ltweb-app id version xmlns gt agrave define o tipo do XML
a versatildeohellip
ltdisplay-namegt agrave define o nome
ltservletgt agrave define uma servlet
ltxml version=10 encoding=iso-8859-1 encoding=iso-8859-1gt ltreceita nome=patildeo tempo_de_preparacao=5 min tempo_de_cozedura=1horagt ltingredientesgt ltingrediente quantidade=4 unidade=chavenasgtFarinhaltingredientegt ltingrediente quantidade=7 unidade=gramasgtFermentoltingredientegt ltingrediente quantidade=15 unidade=chavenasgtAgualtingredientegt ltingrediente quantidade=1 unidade=colheresgtSalltingredientegt ltingredientesgt ltinstrucoesgt ltpassogtMisturar tdos os ingredientesltpassogt ltpassogtCobrir com um pano e deixar repousar uma hora agrave temperatura ambienteltpassogt ltpassogtMisturar novamente e colocar ao forno ateacute ao fim da cozeduraltpassogt ltinstrucoesgt ltreceitagt
TEMA DA CAPA
8
ltservlet-namegt agrave define o nome da servlet
ltservlet-classgt agrave aponta o caminho da servlet na apli-
caccedilatildeo
ltload-on-startupgt agrave quando o valor for 1 a servlet
seraacute inicializada no inicio da aplicaccedilatildeo
ltservlet-mappinggt agrave caso a servlet efectue operaccedilotildees
requeridas por elementos externos
ltservlet-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltservletgt
lturl-patterngt agrave define um url para a servlet
ltfiltergt agrave semelhante agrave tag ltservletgt com a diferenccedila
de que esta permite enquadrar uma classe de filtro na
aplicaccedilatildeo que permita a existecircncia de sessotildees na
aplicaccedilatildeo Web ou qualquer segmento de coacutedigo que
necessite de ser constantemente executado
ltfilter-namegt agrave define o nome da classe filtro
ltfilter-classgt agrave aponta o caminho da class na aplica-
ccedilatildeo
ltfilter-mappinggt agrave sempre necessaacuterio definir para
uma classe filtro
ltfilter-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltfiltergt
lturl-patterngt agrave para possuir o efeito de filtro o url seraacute
todos os existentes ou seja
lterror-pagegt agrave tag existente para definir paacuteginas de
erro que sejam geradas pelo web server e que pos-
sam ocorrer na aplicaccedilatildeo
lterror-codegt agrave define o tipo de coacutedigo de erro gerado
pelo web server (404-page not found 500-internal
server errorhellip)
ltlocationgt agrave localiza a paacutegina de erro personalizada
dentro da aplicaccedilatildeo
Estrutura de uma aplicaccedilatildeo Web Java
O exemplo que vai ser aqui apresentado seraacute montado num
Web Archive (ficheiro war) que poderaacute depois ser colocado
num servidor Web sendo os mais conhecidos o Apache
Tomcat e o Oracle Glassfish Ambos disponiacuteveis gratuita-
mente e no pacote de Java EE do IDE NetBeans que os ins-
tala em modo desenvolvimento na maacutequina local
Nota As aplicaccedilotildees necessaacuterias para a criaccedilatildeo deste exem-
plo satildeo o Java Runtime Environment (JRE) o Java Deve-
lopment Kit (JDK) e o IDE NetBeans
A estrutura normal de uma aplicaccedilatildeo java desta natureza
tem por norma a seguinte estrutura
O ficheiro WAR criado se o abrirmos tem uma estrutura de
pastasficheiros orientada ao modelo de desenvolvimento
MVC (Model-view-controller) onde a View estaacute incluiacuteda dire-
tamente na raiz do projeto onde se pode encontrar as paacutegi-
nas JSP e HTML acompanhadas pelos devidos ficheiros
JavaScript e CSS necessaacuterios Caso haja ausecircncia de um
Deployment Descriptor (ficheiro de configuraccedilatildeo referente a
uma determinada aplicaccedilatildeo que neste caso seraacute o webxml)
o servidor Web procura sempre por um indexjsp como paacutegi-
na inicial
Dentro da pasta WEB-INF estatildeo todas as classes bibliote-
cas ficheiros de configuraccedilatildeo e servlets necessaacuterias para
processar a informaccedilatildeo mostrada pelas JSPs
Em suma ter-se-aacute entatildeo algo deste geacutenero
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
9
Nota Nesta estrutura optou-se por colocar as paacuteginas dinacirc-
micas debaixo do WEB-INF pois uma vez que podemos usar
as servlets para controlar o que se deve ou natildeo ser mostrado
perante os pedidos vindos do cliente Isto torna a aplicaccedilatildeo
mais segura na questatildeo de mapeamento de URLs
Desenvolvimento
Neste exemplo vai-se usar o IDE NetBeans pois eacute aquele
que a Oracle recomenda encontra-se disponiacutevel para Win-
dows Linux Solaris e Mac OS X sendo mais simples de
configurar O NetBeans encontra-se disponiacutevel para downlo-
ad no proacuteprio site e no site da Oracle como complemento do
Java Development Kit 7 (Ver bibliografia)
Primeiros passos
Para dar iniacutecio agrave construccedilatildeo da nossa aplicaccedilatildeo Java Web
no NetBeans basta ir a File ndash New Project e aparece-nos a
seguinte janela
E vamos selecionar Java Web ndash Web Application Em se-
guida definimos a localizaccedilatildeo e o nome da nossa aplicaccedilatildeo
Dando o nome de Teste a esta aplicaccedilatildeo no passo seguinte
o nome que foi atribuiacutedo eacute automaticamente dado como
Context Path ou seja a aplicaccedilatildeo iraacute ser identificada no De-
ployment descriptor como Teste e uma vez colocada no servi-
dor teraacute o seguinte URL httphostnameportTeste
Neste exemplo vamos usar para o servidor GlassFish da Ora-
cle a versatildeo 6 do Java EE e o IDE Netbeans
O servidor escolhido pode ser posteriormente alterado caso
queira-se testar a aplicaccedilatildeo noutros ambientes contudo eacute de-
sencorajado a alteraccedilatildeo da versatildeo sem primeiro verificar a
existecircncia de possiacuteveis incompatibilidades com coacutedigo e biblio-
tecas que estejam a ser usadas O uacuteltimo seraacute ignorado uma
vez que este exemplo que vamos criar natildeo vai possuir nenhum
framework
Uma vez concluiacutedo todos os passos verificamos que automati-
camente o IDE criou-nos uma estrutura com uma paacutegina in-
dexjsp na raiz uma pasta WEB-INF vazia e atalhos para a
pasta de sources bibliotecas e de ficheiros de configuraccedilatildeo
com o tradicional MANIFESTMF criado
A estrutura visiacutevel natildeo corresponde agrave estrutura real de diretori-
as para se visualizar isso basta ir ao separador Files situado eacute
esquerda como mostra a imagem seguinte
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
10
Caso natildeo esteja criado o atalho pode-se sempre aceder indo
agrave opccedilatildeo Window ndash File abrindo o separador e recolocando o
atalho
Numa breve comparaccedilatildeo pode-se verificar que o NetBeans
cria determinados ficheiros e diretorias referentes ao projeto
(bluidxml e nbproject) e onde na estrutura do projeto a pasta
Web Pages tem referecircncia agrave pasta web e a Source Packa-
ges tem referecircncia agrave pasta src Todos os ficheiros de confi-
guraccedilatildeo ficam dentro da pasta WEB-INF e no caso da pasta
Libraries o seu conteuacutedo eacute um conjunto de atalhos cuja sua
localizaccedilatildeo pode ser referenciada a quaisquer pastas exter-
nas ao projeto No entanto recomenda-se criar uma pasta lib
debaixo de WEB-INF com as bibliotecas a ser usadas pela
aplicaccedilatildeo para evitar erros originados por utilizaccedilatildeo do mes-
mo ficheiro de biblioteca por mais do que um projeto e para
facilitar a passagem do projeto para outro ambiente ou ma-
quina pois assim basta soacute passar a pasta com o projeto sem
haver preocupaccedilotildees com importaccedilatildeo de bibliotecas
Criaccedilatildeo de uma JSP
Se abrirmos a paacutegina JSP criada pelo IDE ela vai ter um
aspecto semelhante a este
Uma vez que esta paacutegina tem o nome de index caso seja
feito o deploy da aplicaccedilatildeo a mesma vai apresentar uma
paacutegina de fundo branco com o tiacutetulo JSP Page e a frase Hel-
lo World
Para realizar o deploy da aplicaccedilatildeo basta carregar sobre o
botatildeo de play situado no painel de topo do IDE Netbeans ou
entatildeo ir a Run ndash Run Project
Caso o nome da paacutegina seja alterado e natildeo exista nenhuma
paacutegina com o nome index o servidor natildeo consegue encon-
trar nenhuma paacutegina inicial Entatildeo em seguida vamos alterar
o nome da nossa paacutegina inicial para homejsp e vamos con-
figurar o nosso webxml de maneira a criarmos um filtro de
sessatildeo que vai definir que o servidor no arranque da mesma
redirecionar-se para uma determinada servlet
Para tal se formos agrave opccedilatildeo de File ndash New Filehellip na secccedilatildeo
Web selecionar o tipo de ficheiro Standard Development
Descriptor (webxml)
Uma vez criado o ficheiro teraacute o seguinte conteuacutedo por defei-
to
Temos agora o ficheiro webxml onde poderemos colocar as
nossas referecircncias agraves servlets que vamos criar atribuindo-
lhes um url pattern a fim de poderem ser acedidas
Para natildeo termos trabalho o IDE por si soacute resolve todas as
tags que necessitamos de colocar no webxml na altura em
que criamos uma servlet caso natildeo seja resolvido pelo IDE
Para mapearmos a servlet WelcomeServlet no package
mainservlet com o url pattern Welcome o que deveria de ser
colocado seria algo deste geacutenero (ver as tags fornecidas)
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtJSP Pagelttitlegt ltheadgt ltbodygt lth1gtHello Worldlth1gt ltbodygt lthtmlgt
ltxml version=10 encoding=UTF-8gt ltweb-app xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=httpjavasuncomxml nsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsd version=30gt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
ltxml version=10 encoding=UTF-8gt ltweb-app version=30 xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
TEMA DE CAPA Introduccedilatildeo ao Java EE e Java Web
TEMA DA CAPA
7
Java Enterprise Edition
A plataforma Java Enterprise Edition ou Java EE eacute uma pla-
taforma da Oracle que fornece uma API adicional ao Java
SE para o desenvolvimento e execuccedilatildeo de aplicaccedilotildees java
do tipo empresarial focadas nos serviccedilos de rede e Web
Vindo do Java Professional Edition o nome que foi anuncia-
do em Maio de 98 foi a partir dos finais de 1999 que ficou
com o nome de Java EE incluindo tecnologias como Java
Database Connectivity (JDBC) Java Servlet JavaServer
Pages (JSP) Enterprise JavaBeans JavaMail etc
CONCEITOS
Aplicaccedilatildeo Web Java
Uma aplicaccedilatildeo Java Web gera paacuteginas Web interactivas
contendo vaacuterios tipos de markup languages (HTML XML
etc) e conteuacutedo dinacircmico Eacute tipicamente composto por ele-
mentos Web tais como JavaServer Pages (JSP) Servlets e
JavaBeans para modificar e temporariamente armazenar
dados interagir com bases de dados e serviccedilos Web geran-
do conteuacutedo em resposta aos pedidos do cliente
JSP (JavaServer Pages)
JavaServer Pages eacute uma tecnologia usada no desenvolvi-
mento de aplicaccedilotildees Web Java semelhante ao PHP Possui
compatibilidades com outras soluccedilotildees Java como a Servlet
corre em servidores como o Apache Tomcat e o GlassFish
Ao contraacuterio dos tiacutepicos jarrsquos os arquivos deste tipo de imple-
mentaccedilotildees satildeo ear ou war (Web Archive)
As paacuteginas Web dinacircmicas java aceitam HTML CSS Ja-
vascript tudo que possam incluir no um ficheiro normal
HTML natildeo necessitam de compilaccedilatildeo preacutevia isso fica ao
cargo do servidor Web de traduzir as linhas de coacutedigo em
Java para o browser compreender
Qualquer coacutedigo Java inserido nos ficheiros JSP deve ficar
entre as tags
lt Code gt (para inserccedilatildeo de coacutedigo)
lt=var gt (para a expressatildeo de uma variaacutevel)
Introduccedilatildeo ao Java EE e Java Web ltpage gt (para importar include para incluir
uma paacutegina JSP ou HTML externa)
Servlet
Eacute uma tecnologia Java que permite gerar dados em HTML e
XML Incluiacuteda na biblioteca javaxservlet permite processar
pedidos e respostas vindas de JSP e serve como uma exten-
satildeo do servidor Web Neste caso vamos usar a HttpServlet
onde a sua funccedilatildeo seraacute processar pedidos das JSP resolver
os pedidos e enviar uma resposta
XML
XML (Extensible Markup Language) subtipo da SGML foi
criada pela W3C com o objectivo de ser usado como formato
de configuraccedilatildeo entre vaacuterias linguagens atraveacutes da internet
Ex
Neste caso em particular o ficheiro XML que vamos criar
editar na configuraccedilatildeo de uma aplicaccedilatildeo Java Web eacute o
webxml que tem como tags mais usa das as seguintes
lt gt agrave define comentaacuterios
ltweb-app id version xmlns gt agrave define o tipo do XML
a versatildeohellip
ltdisplay-namegt agrave define o nome
ltservletgt agrave define uma servlet
ltxml version=10 encoding=iso-8859-1 encoding=iso-8859-1gt ltreceita nome=patildeo tempo_de_preparacao=5 min tempo_de_cozedura=1horagt ltingredientesgt ltingrediente quantidade=4 unidade=chavenasgtFarinhaltingredientegt ltingrediente quantidade=7 unidade=gramasgtFermentoltingredientegt ltingrediente quantidade=15 unidade=chavenasgtAgualtingredientegt ltingrediente quantidade=1 unidade=colheresgtSalltingredientegt ltingredientesgt ltinstrucoesgt ltpassogtMisturar tdos os ingredientesltpassogt ltpassogtCobrir com um pano e deixar repousar uma hora agrave temperatura ambienteltpassogt ltpassogtMisturar novamente e colocar ao forno ateacute ao fim da cozeduraltpassogt ltinstrucoesgt ltreceitagt
TEMA DA CAPA
8
ltservlet-namegt agrave define o nome da servlet
ltservlet-classgt agrave aponta o caminho da servlet na apli-
caccedilatildeo
ltload-on-startupgt agrave quando o valor for 1 a servlet
seraacute inicializada no inicio da aplicaccedilatildeo
ltservlet-mappinggt agrave caso a servlet efectue operaccedilotildees
requeridas por elementos externos
ltservlet-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltservletgt
lturl-patterngt agrave define um url para a servlet
ltfiltergt agrave semelhante agrave tag ltservletgt com a diferenccedila
de que esta permite enquadrar uma classe de filtro na
aplicaccedilatildeo que permita a existecircncia de sessotildees na
aplicaccedilatildeo Web ou qualquer segmento de coacutedigo que
necessite de ser constantemente executado
ltfilter-namegt agrave define o nome da classe filtro
ltfilter-classgt agrave aponta o caminho da class na aplica-
ccedilatildeo
ltfilter-mappinggt agrave sempre necessaacuterio definir para
uma classe filtro
ltfilter-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltfiltergt
lturl-patterngt agrave para possuir o efeito de filtro o url seraacute
todos os existentes ou seja
lterror-pagegt agrave tag existente para definir paacuteginas de
erro que sejam geradas pelo web server e que pos-
sam ocorrer na aplicaccedilatildeo
lterror-codegt agrave define o tipo de coacutedigo de erro gerado
pelo web server (404-page not found 500-internal
server errorhellip)
ltlocationgt agrave localiza a paacutegina de erro personalizada
dentro da aplicaccedilatildeo
Estrutura de uma aplicaccedilatildeo Web Java
O exemplo que vai ser aqui apresentado seraacute montado num
Web Archive (ficheiro war) que poderaacute depois ser colocado
num servidor Web sendo os mais conhecidos o Apache
Tomcat e o Oracle Glassfish Ambos disponiacuteveis gratuita-
mente e no pacote de Java EE do IDE NetBeans que os ins-
tala em modo desenvolvimento na maacutequina local
Nota As aplicaccedilotildees necessaacuterias para a criaccedilatildeo deste exem-
plo satildeo o Java Runtime Environment (JRE) o Java Deve-
lopment Kit (JDK) e o IDE NetBeans
A estrutura normal de uma aplicaccedilatildeo java desta natureza
tem por norma a seguinte estrutura
O ficheiro WAR criado se o abrirmos tem uma estrutura de
pastasficheiros orientada ao modelo de desenvolvimento
MVC (Model-view-controller) onde a View estaacute incluiacuteda dire-
tamente na raiz do projeto onde se pode encontrar as paacutegi-
nas JSP e HTML acompanhadas pelos devidos ficheiros
JavaScript e CSS necessaacuterios Caso haja ausecircncia de um
Deployment Descriptor (ficheiro de configuraccedilatildeo referente a
uma determinada aplicaccedilatildeo que neste caso seraacute o webxml)
o servidor Web procura sempre por um indexjsp como paacutegi-
na inicial
Dentro da pasta WEB-INF estatildeo todas as classes bibliote-
cas ficheiros de configuraccedilatildeo e servlets necessaacuterias para
processar a informaccedilatildeo mostrada pelas JSPs
Em suma ter-se-aacute entatildeo algo deste geacutenero
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
9
Nota Nesta estrutura optou-se por colocar as paacuteginas dinacirc-
micas debaixo do WEB-INF pois uma vez que podemos usar
as servlets para controlar o que se deve ou natildeo ser mostrado
perante os pedidos vindos do cliente Isto torna a aplicaccedilatildeo
mais segura na questatildeo de mapeamento de URLs
Desenvolvimento
Neste exemplo vai-se usar o IDE NetBeans pois eacute aquele
que a Oracle recomenda encontra-se disponiacutevel para Win-
dows Linux Solaris e Mac OS X sendo mais simples de
configurar O NetBeans encontra-se disponiacutevel para downlo-
ad no proacuteprio site e no site da Oracle como complemento do
Java Development Kit 7 (Ver bibliografia)
Primeiros passos
Para dar iniacutecio agrave construccedilatildeo da nossa aplicaccedilatildeo Java Web
no NetBeans basta ir a File ndash New Project e aparece-nos a
seguinte janela
E vamos selecionar Java Web ndash Web Application Em se-
guida definimos a localizaccedilatildeo e o nome da nossa aplicaccedilatildeo
Dando o nome de Teste a esta aplicaccedilatildeo no passo seguinte
o nome que foi atribuiacutedo eacute automaticamente dado como
Context Path ou seja a aplicaccedilatildeo iraacute ser identificada no De-
ployment descriptor como Teste e uma vez colocada no servi-
dor teraacute o seguinte URL httphostnameportTeste
Neste exemplo vamos usar para o servidor GlassFish da Ora-
cle a versatildeo 6 do Java EE e o IDE Netbeans
O servidor escolhido pode ser posteriormente alterado caso
queira-se testar a aplicaccedilatildeo noutros ambientes contudo eacute de-
sencorajado a alteraccedilatildeo da versatildeo sem primeiro verificar a
existecircncia de possiacuteveis incompatibilidades com coacutedigo e biblio-
tecas que estejam a ser usadas O uacuteltimo seraacute ignorado uma
vez que este exemplo que vamos criar natildeo vai possuir nenhum
framework
Uma vez concluiacutedo todos os passos verificamos que automati-
camente o IDE criou-nos uma estrutura com uma paacutegina in-
dexjsp na raiz uma pasta WEB-INF vazia e atalhos para a
pasta de sources bibliotecas e de ficheiros de configuraccedilatildeo
com o tradicional MANIFESTMF criado
A estrutura visiacutevel natildeo corresponde agrave estrutura real de diretori-
as para se visualizar isso basta ir ao separador Files situado eacute
esquerda como mostra a imagem seguinte
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
10
Caso natildeo esteja criado o atalho pode-se sempre aceder indo
agrave opccedilatildeo Window ndash File abrindo o separador e recolocando o
atalho
Numa breve comparaccedilatildeo pode-se verificar que o NetBeans
cria determinados ficheiros e diretorias referentes ao projeto
(bluidxml e nbproject) e onde na estrutura do projeto a pasta
Web Pages tem referecircncia agrave pasta web e a Source Packa-
ges tem referecircncia agrave pasta src Todos os ficheiros de confi-
guraccedilatildeo ficam dentro da pasta WEB-INF e no caso da pasta
Libraries o seu conteuacutedo eacute um conjunto de atalhos cuja sua
localizaccedilatildeo pode ser referenciada a quaisquer pastas exter-
nas ao projeto No entanto recomenda-se criar uma pasta lib
debaixo de WEB-INF com as bibliotecas a ser usadas pela
aplicaccedilatildeo para evitar erros originados por utilizaccedilatildeo do mes-
mo ficheiro de biblioteca por mais do que um projeto e para
facilitar a passagem do projeto para outro ambiente ou ma-
quina pois assim basta soacute passar a pasta com o projeto sem
haver preocupaccedilotildees com importaccedilatildeo de bibliotecas
Criaccedilatildeo de uma JSP
Se abrirmos a paacutegina JSP criada pelo IDE ela vai ter um
aspecto semelhante a este
Uma vez que esta paacutegina tem o nome de index caso seja
feito o deploy da aplicaccedilatildeo a mesma vai apresentar uma
paacutegina de fundo branco com o tiacutetulo JSP Page e a frase Hel-
lo World
Para realizar o deploy da aplicaccedilatildeo basta carregar sobre o
botatildeo de play situado no painel de topo do IDE Netbeans ou
entatildeo ir a Run ndash Run Project
Caso o nome da paacutegina seja alterado e natildeo exista nenhuma
paacutegina com o nome index o servidor natildeo consegue encon-
trar nenhuma paacutegina inicial Entatildeo em seguida vamos alterar
o nome da nossa paacutegina inicial para homejsp e vamos con-
figurar o nosso webxml de maneira a criarmos um filtro de
sessatildeo que vai definir que o servidor no arranque da mesma
redirecionar-se para uma determinada servlet
Para tal se formos agrave opccedilatildeo de File ndash New Filehellip na secccedilatildeo
Web selecionar o tipo de ficheiro Standard Development
Descriptor (webxml)
Uma vez criado o ficheiro teraacute o seguinte conteuacutedo por defei-
to
Temos agora o ficheiro webxml onde poderemos colocar as
nossas referecircncias agraves servlets que vamos criar atribuindo-
lhes um url pattern a fim de poderem ser acedidas
Para natildeo termos trabalho o IDE por si soacute resolve todas as
tags que necessitamos de colocar no webxml na altura em
que criamos uma servlet caso natildeo seja resolvido pelo IDE
Para mapearmos a servlet WelcomeServlet no package
mainservlet com o url pattern Welcome o que deveria de ser
colocado seria algo deste geacutenero (ver as tags fornecidas)
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtJSP Pagelttitlegt ltheadgt ltbodygt lth1gtHello Worldlth1gt ltbodygt lthtmlgt
ltxml version=10 encoding=UTF-8gt ltweb-app xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=httpjavasuncomxml nsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsd version=30gt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
ltxml version=10 encoding=UTF-8gt ltweb-app version=30 xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
TEMA DA CAPA
7
Java Enterprise Edition
A plataforma Java Enterprise Edition ou Java EE eacute uma pla-
taforma da Oracle que fornece uma API adicional ao Java
SE para o desenvolvimento e execuccedilatildeo de aplicaccedilotildees java
do tipo empresarial focadas nos serviccedilos de rede e Web
Vindo do Java Professional Edition o nome que foi anuncia-
do em Maio de 98 foi a partir dos finais de 1999 que ficou
com o nome de Java EE incluindo tecnologias como Java
Database Connectivity (JDBC) Java Servlet JavaServer
Pages (JSP) Enterprise JavaBeans JavaMail etc
CONCEITOS
Aplicaccedilatildeo Web Java
Uma aplicaccedilatildeo Java Web gera paacuteginas Web interactivas
contendo vaacuterios tipos de markup languages (HTML XML
etc) e conteuacutedo dinacircmico Eacute tipicamente composto por ele-
mentos Web tais como JavaServer Pages (JSP) Servlets e
JavaBeans para modificar e temporariamente armazenar
dados interagir com bases de dados e serviccedilos Web geran-
do conteuacutedo em resposta aos pedidos do cliente
JSP (JavaServer Pages)
JavaServer Pages eacute uma tecnologia usada no desenvolvi-
mento de aplicaccedilotildees Web Java semelhante ao PHP Possui
compatibilidades com outras soluccedilotildees Java como a Servlet
corre em servidores como o Apache Tomcat e o GlassFish
Ao contraacuterio dos tiacutepicos jarrsquos os arquivos deste tipo de imple-
mentaccedilotildees satildeo ear ou war (Web Archive)
As paacuteginas Web dinacircmicas java aceitam HTML CSS Ja-
vascript tudo que possam incluir no um ficheiro normal
HTML natildeo necessitam de compilaccedilatildeo preacutevia isso fica ao
cargo do servidor Web de traduzir as linhas de coacutedigo em
Java para o browser compreender
Qualquer coacutedigo Java inserido nos ficheiros JSP deve ficar
entre as tags
lt Code gt (para inserccedilatildeo de coacutedigo)
lt=var gt (para a expressatildeo de uma variaacutevel)
Introduccedilatildeo ao Java EE e Java Web ltpage gt (para importar include para incluir
uma paacutegina JSP ou HTML externa)
Servlet
Eacute uma tecnologia Java que permite gerar dados em HTML e
XML Incluiacuteda na biblioteca javaxservlet permite processar
pedidos e respostas vindas de JSP e serve como uma exten-
satildeo do servidor Web Neste caso vamos usar a HttpServlet
onde a sua funccedilatildeo seraacute processar pedidos das JSP resolver
os pedidos e enviar uma resposta
XML
XML (Extensible Markup Language) subtipo da SGML foi
criada pela W3C com o objectivo de ser usado como formato
de configuraccedilatildeo entre vaacuterias linguagens atraveacutes da internet
Ex
Neste caso em particular o ficheiro XML que vamos criar
editar na configuraccedilatildeo de uma aplicaccedilatildeo Java Web eacute o
webxml que tem como tags mais usa das as seguintes
lt gt agrave define comentaacuterios
ltweb-app id version xmlns gt agrave define o tipo do XML
a versatildeohellip
ltdisplay-namegt agrave define o nome
ltservletgt agrave define uma servlet
ltxml version=10 encoding=iso-8859-1 encoding=iso-8859-1gt ltreceita nome=patildeo tempo_de_preparacao=5 min tempo_de_cozedura=1horagt ltingredientesgt ltingrediente quantidade=4 unidade=chavenasgtFarinhaltingredientegt ltingrediente quantidade=7 unidade=gramasgtFermentoltingredientegt ltingrediente quantidade=15 unidade=chavenasgtAgualtingredientegt ltingrediente quantidade=1 unidade=colheresgtSalltingredientegt ltingredientesgt ltinstrucoesgt ltpassogtMisturar tdos os ingredientesltpassogt ltpassogtCobrir com um pano e deixar repousar uma hora agrave temperatura ambienteltpassogt ltpassogtMisturar novamente e colocar ao forno ateacute ao fim da cozeduraltpassogt ltinstrucoesgt ltreceitagt
TEMA DA CAPA
8
ltservlet-namegt agrave define o nome da servlet
ltservlet-classgt agrave aponta o caminho da servlet na apli-
caccedilatildeo
ltload-on-startupgt agrave quando o valor for 1 a servlet
seraacute inicializada no inicio da aplicaccedilatildeo
ltservlet-mappinggt agrave caso a servlet efectue operaccedilotildees
requeridas por elementos externos
ltservlet-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltservletgt
lturl-patterngt agrave define um url para a servlet
ltfiltergt agrave semelhante agrave tag ltservletgt com a diferenccedila
de que esta permite enquadrar uma classe de filtro na
aplicaccedilatildeo que permita a existecircncia de sessotildees na
aplicaccedilatildeo Web ou qualquer segmento de coacutedigo que
necessite de ser constantemente executado
ltfilter-namegt agrave define o nome da classe filtro
ltfilter-classgt agrave aponta o caminho da class na aplica-
ccedilatildeo
ltfilter-mappinggt agrave sempre necessaacuterio definir para
uma classe filtro
ltfilter-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltfiltergt
lturl-patterngt agrave para possuir o efeito de filtro o url seraacute
todos os existentes ou seja
lterror-pagegt agrave tag existente para definir paacuteginas de
erro que sejam geradas pelo web server e que pos-
sam ocorrer na aplicaccedilatildeo
lterror-codegt agrave define o tipo de coacutedigo de erro gerado
pelo web server (404-page not found 500-internal
server errorhellip)
ltlocationgt agrave localiza a paacutegina de erro personalizada
dentro da aplicaccedilatildeo
Estrutura de uma aplicaccedilatildeo Web Java
O exemplo que vai ser aqui apresentado seraacute montado num
Web Archive (ficheiro war) que poderaacute depois ser colocado
num servidor Web sendo os mais conhecidos o Apache
Tomcat e o Oracle Glassfish Ambos disponiacuteveis gratuita-
mente e no pacote de Java EE do IDE NetBeans que os ins-
tala em modo desenvolvimento na maacutequina local
Nota As aplicaccedilotildees necessaacuterias para a criaccedilatildeo deste exem-
plo satildeo o Java Runtime Environment (JRE) o Java Deve-
lopment Kit (JDK) e o IDE NetBeans
A estrutura normal de uma aplicaccedilatildeo java desta natureza
tem por norma a seguinte estrutura
O ficheiro WAR criado se o abrirmos tem uma estrutura de
pastasficheiros orientada ao modelo de desenvolvimento
MVC (Model-view-controller) onde a View estaacute incluiacuteda dire-
tamente na raiz do projeto onde se pode encontrar as paacutegi-
nas JSP e HTML acompanhadas pelos devidos ficheiros
JavaScript e CSS necessaacuterios Caso haja ausecircncia de um
Deployment Descriptor (ficheiro de configuraccedilatildeo referente a
uma determinada aplicaccedilatildeo que neste caso seraacute o webxml)
o servidor Web procura sempre por um indexjsp como paacutegi-
na inicial
Dentro da pasta WEB-INF estatildeo todas as classes bibliote-
cas ficheiros de configuraccedilatildeo e servlets necessaacuterias para
processar a informaccedilatildeo mostrada pelas JSPs
Em suma ter-se-aacute entatildeo algo deste geacutenero
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
9
Nota Nesta estrutura optou-se por colocar as paacuteginas dinacirc-
micas debaixo do WEB-INF pois uma vez que podemos usar
as servlets para controlar o que se deve ou natildeo ser mostrado
perante os pedidos vindos do cliente Isto torna a aplicaccedilatildeo
mais segura na questatildeo de mapeamento de URLs
Desenvolvimento
Neste exemplo vai-se usar o IDE NetBeans pois eacute aquele
que a Oracle recomenda encontra-se disponiacutevel para Win-
dows Linux Solaris e Mac OS X sendo mais simples de
configurar O NetBeans encontra-se disponiacutevel para downlo-
ad no proacuteprio site e no site da Oracle como complemento do
Java Development Kit 7 (Ver bibliografia)
Primeiros passos
Para dar iniacutecio agrave construccedilatildeo da nossa aplicaccedilatildeo Java Web
no NetBeans basta ir a File ndash New Project e aparece-nos a
seguinte janela
E vamos selecionar Java Web ndash Web Application Em se-
guida definimos a localizaccedilatildeo e o nome da nossa aplicaccedilatildeo
Dando o nome de Teste a esta aplicaccedilatildeo no passo seguinte
o nome que foi atribuiacutedo eacute automaticamente dado como
Context Path ou seja a aplicaccedilatildeo iraacute ser identificada no De-
ployment descriptor como Teste e uma vez colocada no servi-
dor teraacute o seguinte URL httphostnameportTeste
Neste exemplo vamos usar para o servidor GlassFish da Ora-
cle a versatildeo 6 do Java EE e o IDE Netbeans
O servidor escolhido pode ser posteriormente alterado caso
queira-se testar a aplicaccedilatildeo noutros ambientes contudo eacute de-
sencorajado a alteraccedilatildeo da versatildeo sem primeiro verificar a
existecircncia de possiacuteveis incompatibilidades com coacutedigo e biblio-
tecas que estejam a ser usadas O uacuteltimo seraacute ignorado uma
vez que este exemplo que vamos criar natildeo vai possuir nenhum
framework
Uma vez concluiacutedo todos os passos verificamos que automati-
camente o IDE criou-nos uma estrutura com uma paacutegina in-
dexjsp na raiz uma pasta WEB-INF vazia e atalhos para a
pasta de sources bibliotecas e de ficheiros de configuraccedilatildeo
com o tradicional MANIFESTMF criado
A estrutura visiacutevel natildeo corresponde agrave estrutura real de diretori-
as para se visualizar isso basta ir ao separador Files situado eacute
esquerda como mostra a imagem seguinte
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
10
Caso natildeo esteja criado o atalho pode-se sempre aceder indo
agrave opccedilatildeo Window ndash File abrindo o separador e recolocando o
atalho
Numa breve comparaccedilatildeo pode-se verificar que o NetBeans
cria determinados ficheiros e diretorias referentes ao projeto
(bluidxml e nbproject) e onde na estrutura do projeto a pasta
Web Pages tem referecircncia agrave pasta web e a Source Packa-
ges tem referecircncia agrave pasta src Todos os ficheiros de confi-
guraccedilatildeo ficam dentro da pasta WEB-INF e no caso da pasta
Libraries o seu conteuacutedo eacute um conjunto de atalhos cuja sua
localizaccedilatildeo pode ser referenciada a quaisquer pastas exter-
nas ao projeto No entanto recomenda-se criar uma pasta lib
debaixo de WEB-INF com as bibliotecas a ser usadas pela
aplicaccedilatildeo para evitar erros originados por utilizaccedilatildeo do mes-
mo ficheiro de biblioteca por mais do que um projeto e para
facilitar a passagem do projeto para outro ambiente ou ma-
quina pois assim basta soacute passar a pasta com o projeto sem
haver preocupaccedilotildees com importaccedilatildeo de bibliotecas
Criaccedilatildeo de uma JSP
Se abrirmos a paacutegina JSP criada pelo IDE ela vai ter um
aspecto semelhante a este
Uma vez que esta paacutegina tem o nome de index caso seja
feito o deploy da aplicaccedilatildeo a mesma vai apresentar uma
paacutegina de fundo branco com o tiacutetulo JSP Page e a frase Hel-
lo World
Para realizar o deploy da aplicaccedilatildeo basta carregar sobre o
botatildeo de play situado no painel de topo do IDE Netbeans ou
entatildeo ir a Run ndash Run Project
Caso o nome da paacutegina seja alterado e natildeo exista nenhuma
paacutegina com o nome index o servidor natildeo consegue encon-
trar nenhuma paacutegina inicial Entatildeo em seguida vamos alterar
o nome da nossa paacutegina inicial para homejsp e vamos con-
figurar o nosso webxml de maneira a criarmos um filtro de
sessatildeo que vai definir que o servidor no arranque da mesma
redirecionar-se para uma determinada servlet
Para tal se formos agrave opccedilatildeo de File ndash New Filehellip na secccedilatildeo
Web selecionar o tipo de ficheiro Standard Development
Descriptor (webxml)
Uma vez criado o ficheiro teraacute o seguinte conteuacutedo por defei-
to
Temos agora o ficheiro webxml onde poderemos colocar as
nossas referecircncias agraves servlets que vamos criar atribuindo-
lhes um url pattern a fim de poderem ser acedidas
Para natildeo termos trabalho o IDE por si soacute resolve todas as
tags que necessitamos de colocar no webxml na altura em
que criamos uma servlet caso natildeo seja resolvido pelo IDE
Para mapearmos a servlet WelcomeServlet no package
mainservlet com o url pattern Welcome o que deveria de ser
colocado seria algo deste geacutenero (ver as tags fornecidas)
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtJSP Pagelttitlegt ltheadgt ltbodygt lth1gtHello Worldlth1gt ltbodygt lthtmlgt
ltxml version=10 encoding=UTF-8gt ltweb-app xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=httpjavasuncomxml nsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsd version=30gt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
ltxml version=10 encoding=UTF-8gt ltweb-app version=30 xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
TEMA DA CAPA
8
ltservlet-namegt agrave define o nome da servlet
ltservlet-classgt agrave aponta o caminho da servlet na apli-
caccedilatildeo
ltload-on-startupgt agrave quando o valor for 1 a servlet
seraacute inicializada no inicio da aplicaccedilatildeo
ltservlet-mappinggt agrave caso a servlet efectue operaccedilotildees
requeridas por elementos externos
ltservlet-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltservletgt
lturl-patterngt agrave define um url para a servlet
ltfiltergt agrave semelhante agrave tag ltservletgt com a diferenccedila
de que esta permite enquadrar uma classe de filtro na
aplicaccedilatildeo que permita a existecircncia de sessotildees na
aplicaccedilatildeo Web ou qualquer segmento de coacutedigo que
necessite de ser constantemente executado
ltfilter-namegt agrave define o nome da classe filtro
ltfilter-classgt agrave aponta o caminho da class na aplica-
ccedilatildeo
ltfilter-mappinggt agrave sempre necessaacuterio definir para
uma classe filtro
ltfilter-namegt agrave define o nome teraacute de ser o mesmo
que se encontra na tag ltfiltergt
lturl-patterngt agrave para possuir o efeito de filtro o url seraacute
todos os existentes ou seja
lterror-pagegt agrave tag existente para definir paacuteginas de
erro que sejam geradas pelo web server e que pos-
sam ocorrer na aplicaccedilatildeo
lterror-codegt agrave define o tipo de coacutedigo de erro gerado
pelo web server (404-page not found 500-internal
server errorhellip)
ltlocationgt agrave localiza a paacutegina de erro personalizada
dentro da aplicaccedilatildeo
Estrutura de uma aplicaccedilatildeo Web Java
O exemplo que vai ser aqui apresentado seraacute montado num
Web Archive (ficheiro war) que poderaacute depois ser colocado
num servidor Web sendo os mais conhecidos o Apache
Tomcat e o Oracle Glassfish Ambos disponiacuteveis gratuita-
mente e no pacote de Java EE do IDE NetBeans que os ins-
tala em modo desenvolvimento na maacutequina local
Nota As aplicaccedilotildees necessaacuterias para a criaccedilatildeo deste exem-
plo satildeo o Java Runtime Environment (JRE) o Java Deve-
lopment Kit (JDK) e o IDE NetBeans
A estrutura normal de uma aplicaccedilatildeo java desta natureza
tem por norma a seguinte estrutura
O ficheiro WAR criado se o abrirmos tem uma estrutura de
pastasficheiros orientada ao modelo de desenvolvimento
MVC (Model-view-controller) onde a View estaacute incluiacuteda dire-
tamente na raiz do projeto onde se pode encontrar as paacutegi-
nas JSP e HTML acompanhadas pelos devidos ficheiros
JavaScript e CSS necessaacuterios Caso haja ausecircncia de um
Deployment Descriptor (ficheiro de configuraccedilatildeo referente a
uma determinada aplicaccedilatildeo que neste caso seraacute o webxml)
o servidor Web procura sempre por um indexjsp como paacutegi-
na inicial
Dentro da pasta WEB-INF estatildeo todas as classes bibliote-
cas ficheiros de configuraccedilatildeo e servlets necessaacuterias para
processar a informaccedilatildeo mostrada pelas JSPs
Em suma ter-se-aacute entatildeo algo deste geacutenero
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
9
Nota Nesta estrutura optou-se por colocar as paacuteginas dinacirc-
micas debaixo do WEB-INF pois uma vez que podemos usar
as servlets para controlar o que se deve ou natildeo ser mostrado
perante os pedidos vindos do cliente Isto torna a aplicaccedilatildeo
mais segura na questatildeo de mapeamento de URLs
Desenvolvimento
Neste exemplo vai-se usar o IDE NetBeans pois eacute aquele
que a Oracle recomenda encontra-se disponiacutevel para Win-
dows Linux Solaris e Mac OS X sendo mais simples de
configurar O NetBeans encontra-se disponiacutevel para downlo-
ad no proacuteprio site e no site da Oracle como complemento do
Java Development Kit 7 (Ver bibliografia)
Primeiros passos
Para dar iniacutecio agrave construccedilatildeo da nossa aplicaccedilatildeo Java Web
no NetBeans basta ir a File ndash New Project e aparece-nos a
seguinte janela
E vamos selecionar Java Web ndash Web Application Em se-
guida definimos a localizaccedilatildeo e o nome da nossa aplicaccedilatildeo
Dando o nome de Teste a esta aplicaccedilatildeo no passo seguinte
o nome que foi atribuiacutedo eacute automaticamente dado como
Context Path ou seja a aplicaccedilatildeo iraacute ser identificada no De-
ployment descriptor como Teste e uma vez colocada no servi-
dor teraacute o seguinte URL httphostnameportTeste
Neste exemplo vamos usar para o servidor GlassFish da Ora-
cle a versatildeo 6 do Java EE e o IDE Netbeans
O servidor escolhido pode ser posteriormente alterado caso
queira-se testar a aplicaccedilatildeo noutros ambientes contudo eacute de-
sencorajado a alteraccedilatildeo da versatildeo sem primeiro verificar a
existecircncia de possiacuteveis incompatibilidades com coacutedigo e biblio-
tecas que estejam a ser usadas O uacuteltimo seraacute ignorado uma
vez que este exemplo que vamos criar natildeo vai possuir nenhum
framework
Uma vez concluiacutedo todos os passos verificamos que automati-
camente o IDE criou-nos uma estrutura com uma paacutegina in-
dexjsp na raiz uma pasta WEB-INF vazia e atalhos para a
pasta de sources bibliotecas e de ficheiros de configuraccedilatildeo
com o tradicional MANIFESTMF criado
A estrutura visiacutevel natildeo corresponde agrave estrutura real de diretori-
as para se visualizar isso basta ir ao separador Files situado eacute
esquerda como mostra a imagem seguinte
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
10
Caso natildeo esteja criado o atalho pode-se sempre aceder indo
agrave opccedilatildeo Window ndash File abrindo o separador e recolocando o
atalho
Numa breve comparaccedilatildeo pode-se verificar que o NetBeans
cria determinados ficheiros e diretorias referentes ao projeto
(bluidxml e nbproject) e onde na estrutura do projeto a pasta
Web Pages tem referecircncia agrave pasta web e a Source Packa-
ges tem referecircncia agrave pasta src Todos os ficheiros de confi-
guraccedilatildeo ficam dentro da pasta WEB-INF e no caso da pasta
Libraries o seu conteuacutedo eacute um conjunto de atalhos cuja sua
localizaccedilatildeo pode ser referenciada a quaisquer pastas exter-
nas ao projeto No entanto recomenda-se criar uma pasta lib
debaixo de WEB-INF com as bibliotecas a ser usadas pela
aplicaccedilatildeo para evitar erros originados por utilizaccedilatildeo do mes-
mo ficheiro de biblioteca por mais do que um projeto e para
facilitar a passagem do projeto para outro ambiente ou ma-
quina pois assim basta soacute passar a pasta com o projeto sem
haver preocupaccedilotildees com importaccedilatildeo de bibliotecas
Criaccedilatildeo de uma JSP
Se abrirmos a paacutegina JSP criada pelo IDE ela vai ter um
aspecto semelhante a este
Uma vez que esta paacutegina tem o nome de index caso seja
feito o deploy da aplicaccedilatildeo a mesma vai apresentar uma
paacutegina de fundo branco com o tiacutetulo JSP Page e a frase Hel-
lo World
Para realizar o deploy da aplicaccedilatildeo basta carregar sobre o
botatildeo de play situado no painel de topo do IDE Netbeans ou
entatildeo ir a Run ndash Run Project
Caso o nome da paacutegina seja alterado e natildeo exista nenhuma
paacutegina com o nome index o servidor natildeo consegue encon-
trar nenhuma paacutegina inicial Entatildeo em seguida vamos alterar
o nome da nossa paacutegina inicial para homejsp e vamos con-
figurar o nosso webxml de maneira a criarmos um filtro de
sessatildeo que vai definir que o servidor no arranque da mesma
redirecionar-se para uma determinada servlet
Para tal se formos agrave opccedilatildeo de File ndash New Filehellip na secccedilatildeo
Web selecionar o tipo de ficheiro Standard Development
Descriptor (webxml)
Uma vez criado o ficheiro teraacute o seguinte conteuacutedo por defei-
to
Temos agora o ficheiro webxml onde poderemos colocar as
nossas referecircncias agraves servlets que vamos criar atribuindo-
lhes um url pattern a fim de poderem ser acedidas
Para natildeo termos trabalho o IDE por si soacute resolve todas as
tags que necessitamos de colocar no webxml na altura em
que criamos uma servlet caso natildeo seja resolvido pelo IDE
Para mapearmos a servlet WelcomeServlet no package
mainservlet com o url pattern Welcome o que deveria de ser
colocado seria algo deste geacutenero (ver as tags fornecidas)
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtJSP Pagelttitlegt ltheadgt ltbodygt lth1gtHello Worldlth1gt ltbodygt lthtmlgt
ltxml version=10 encoding=UTF-8gt ltweb-app xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=httpjavasuncomxml nsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsd version=30gt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
ltxml version=10 encoding=UTF-8gt ltweb-app version=30 xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
TEMA DA CAPA
9
Nota Nesta estrutura optou-se por colocar as paacuteginas dinacirc-
micas debaixo do WEB-INF pois uma vez que podemos usar
as servlets para controlar o que se deve ou natildeo ser mostrado
perante os pedidos vindos do cliente Isto torna a aplicaccedilatildeo
mais segura na questatildeo de mapeamento de URLs
Desenvolvimento
Neste exemplo vai-se usar o IDE NetBeans pois eacute aquele
que a Oracle recomenda encontra-se disponiacutevel para Win-
dows Linux Solaris e Mac OS X sendo mais simples de
configurar O NetBeans encontra-se disponiacutevel para downlo-
ad no proacuteprio site e no site da Oracle como complemento do
Java Development Kit 7 (Ver bibliografia)
Primeiros passos
Para dar iniacutecio agrave construccedilatildeo da nossa aplicaccedilatildeo Java Web
no NetBeans basta ir a File ndash New Project e aparece-nos a
seguinte janela
E vamos selecionar Java Web ndash Web Application Em se-
guida definimos a localizaccedilatildeo e o nome da nossa aplicaccedilatildeo
Dando o nome de Teste a esta aplicaccedilatildeo no passo seguinte
o nome que foi atribuiacutedo eacute automaticamente dado como
Context Path ou seja a aplicaccedilatildeo iraacute ser identificada no De-
ployment descriptor como Teste e uma vez colocada no servi-
dor teraacute o seguinte URL httphostnameportTeste
Neste exemplo vamos usar para o servidor GlassFish da Ora-
cle a versatildeo 6 do Java EE e o IDE Netbeans
O servidor escolhido pode ser posteriormente alterado caso
queira-se testar a aplicaccedilatildeo noutros ambientes contudo eacute de-
sencorajado a alteraccedilatildeo da versatildeo sem primeiro verificar a
existecircncia de possiacuteveis incompatibilidades com coacutedigo e biblio-
tecas que estejam a ser usadas O uacuteltimo seraacute ignorado uma
vez que este exemplo que vamos criar natildeo vai possuir nenhum
framework
Uma vez concluiacutedo todos os passos verificamos que automati-
camente o IDE criou-nos uma estrutura com uma paacutegina in-
dexjsp na raiz uma pasta WEB-INF vazia e atalhos para a
pasta de sources bibliotecas e de ficheiros de configuraccedilatildeo
com o tradicional MANIFESTMF criado
A estrutura visiacutevel natildeo corresponde agrave estrutura real de diretori-
as para se visualizar isso basta ir ao separador Files situado eacute
esquerda como mostra a imagem seguinte
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
TEMA DA CAPA
10
Caso natildeo esteja criado o atalho pode-se sempre aceder indo
agrave opccedilatildeo Window ndash File abrindo o separador e recolocando o
atalho
Numa breve comparaccedilatildeo pode-se verificar que o NetBeans
cria determinados ficheiros e diretorias referentes ao projeto
(bluidxml e nbproject) e onde na estrutura do projeto a pasta
Web Pages tem referecircncia agrave pasta web e a Source Packa-
ges tem referecircncia agrave pasta src Todos os ficheiros de confi-
guraccedilatildeo ficam dentro da pasta WEB-INF e no caso da pasta
Libraries o seu conteuacutedo eacute um conjunto de atalhos cuja sua
localizaccedilatildeo pode ser referenciada a quaisquer pastas exter-
nas ao projeto No entanto recomenda-se criar uma pasta lib
debaixo de WEB-INF com as bibliotecas a ser usadas pela
aplicaccedilatildeo para evitar erros originados por utilizaccedilatildeo do mes-
mo ficheiro de biblioteca por mais do que um projeto e para
facilitar a passagem do projeto para outro ambiente ou ma-
quina pois assim basta soacute passar a pasta com o projeto sem
haver preocupaccedilotildees com importaccedilatildeo de bibliotecas
Criaccedilatildeo de uma JSP
Se abrirmos a paacutegina JSP criada pelo IDE ela vai ter um
aspecto semelhante a este
Uma vez que esta paacutegina tem o nome de index caso seja
feito o deploy da aplicaccedilatildeo a mesma vai apresentar uma
paacutegina de fundo branco com o tiacutetulo JSP Page e a frase Hel-
lo World
Para realizar o deploy da aplicaccedilatildeo basta carregar sobre o
botatildeo de play situado no painel de topo do IDE Netbeans ou
entatildeo ir a Run ndash Run Project
Caso o nome da paacutegina seja alterado e natildeo exista nenhuma
paacutegina com o nome index o servidor natildeo consegue encon-
trar nenhuma paacutegina inicial Entatildeo em seguida vamos alterar
o nome da nossa paacutegina inicial para homejsp e vamos con-
figurar o nosso webxml de maneira a criarmos um filtro de
sessatildeo que vai definir que o servidor no arranque da mesma
redirecionar-se para uma determinada servlet
Para tal se formos agrave opccedilatildeo de File ndash New Filehellip na secccedilatildeo
Web selecionar o tipo de ficheiro Standard Development
Descriptor (webxml)
Uma vez criado o ficheiro teraacute o seguinte conteuacutedo por defei-
to
Temos agora o ficheiro webxml onde poderemos colocar as
nossas referecircncias agraves servlets que vamos criar atribuindo-
lhes um url pattern a fim de poderem ser acedidas
Para natildeo termos trabalho o IDE por si soacute resolve todas as
tags que necessitamos de colocar no webxml na altura em
que criamos uma servlet caso natildeo seja resolvido pelo IDE
Para mapearmos a servlet WelcomeServlet no package
mainservlet com o url pattern Welcome o que deveria de ser
colocado seria algo deste geacutenero (ver as tags fornecidas)
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtJSP Pagelttitlegt ltheadgt ltbodygt lth1gtHello Worldlth1gt ltbodygt lthtmlgt
ltxml version=10 encoding=UTF-8gt ltweb-app xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=httpjavasuncomxml nsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsd version=30gt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
ltxml version=10 encoding=UTF-8gt ltweb-app version=30 xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
TEMA DA CAPA
10
Caso natildeo esteja criado o atalho pode-se sempre aceder indo
agrave opccedilatildeo Window ndash File abrindo o separador e recolocando o
atalho
Numa breve comparaccedilatildeo pode-se verificar que o NetBeans
cria determinados ficheiros e diretorias referentes ao projeto
(bluidxml e nbproject) e onde na estrutura do projeto a pasta
Web Pages tem referecircncia agrave pasta web e a Source Packa-
ges tem referecircncia agrave pasta src Todos os ficheiros de confi-
guraccedilatildeo ficam dentro da pasta WEB-INF e no caso da pasta
Libraries o seu conteuacutedo eacute um conjunto de atalhos cuja sua
localizaccedilatildeo pode ser referenciada a quaisquer pastas exter-
nas ao projeto No entanto recomenda-se criar uma pasta lib
debaixo de WEB-INF com as bibliotecas a ser usadas pela
aplicaccedilatildeo para evitar erros originados por utilizaccedilatildeo do mes-
mo ficheiro de biblioteca por mais do que um projeto e para
facilitar a passagem do projeto para outro ambiente ou ma-
quina pois assim basta soacute passar a pasta com o projeto sem
haver preocupaccedilotildees com importaccedilatildeo de bibliotecas
Criaccedilatildeo de uma JSP
Se abrirmos a paacutegina JSP criada pelo IDE ela vai ter um
aspecto semelhante a este
Uma vez que esta paacutegina tem o nome de index caso seja
feito o deploy da aplicaccedilatildeo a mesma vai apresentar uma
paacutegina de fundo branco com o tiacutetulo JSP Page e a frase Hel-
lo World
Para realizar o deploy da aplicaccedilatildeo basta carregar sobre o
botatildeo de play situado no painel de topo do IDE Netbeans ou
entatildeo ir a Run ndash Run Project
Caso o nome da paacutegina seja alterado e natildeo exista nenhuma
paacutegina com o nome index o servidor natildeo consegue encon-
trar nenhuma paacutegina inicial Entatildeo em seguida vamos alterar
o nome da nossa paacutegina inicial para homejsp e vamos con-
figurar o nosso webxml de maneira a criarmos um filtro de
sessatildeo que vai definir que o servidor no arranque da mesma
redirecionar-se para uma determinada servlet
Para tal se formos agrave opccedilatildeo de File ndash New Filehellip na secccedilatildeo
Web selecionar o tipo de ficheiro Standard Development
Descriptor (webxml)
Uma vez criado o ficheiro teraacute o seguinte conteuacutedo por defei-
to
Temos agora o ficheiro webxml onde poderemos colocar as
nossas referecircncias agraves servlets que vamos criar atribuindo-
lhes um url pattern a fim de poderem ser acedidas
Para natildeo termos trabalho o IDE por si soacute resolve todas as
tags que necessitamos de colocar no webxml na altura em
que criamos uma servlet caso natildeo seja resolvido pelo IDE
Para mapearmos a servlet WelcomeServlet no package
mainservlet com o url pattern Welcome o que deveria de ser
colocado seria algo deste geacutenero (ver as tags fornecidas)
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtJSP Pagelttitlegt ltheadgt ltbodygt lth1gtHello Worldlth1gt ltbodygt lthtmlgt
ltxml version=10 encoding=UTF-8gt ltweb-app xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=httpjavasuncomxml nsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsd version=30gt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
ltxml version=10 encoding=UTF-8gt ltweb-app version=30 xmlns=httpjavasuncomxmlnsjavaee xmlnsxsi=httpwwww3org2001 XMLSchema-instance xsischemaLocation=
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
TEMA DA CAPA
11
Mas natildeo eacute necessaacuterio escrever estas tags ateacute porque o Net-
Beans natildeo permite a criaccedilatildeo de servlets que jaacute possuam refe-
recircncias no webxml como tal o que podemos fazer eacute ir a opccedilatildeo
File ndash New Filehellip e dentro do Web selecionar Servlet
Em seguida o IDE vai recomendar a natildeo criar classes na raiz
dos packages e como tal vamos preencher o campo Package
com mainservlet e como nome WelcomeServlet
Dado o passo seguinte o IDE automaticamente cria a estru-
tura dos packages introduzidos e apresenta o formulaacuterio de
configuraccedilatildeo da servlet
Carregando sobre a check box e alterando o URL Pattern
para Welcome teremos automaticamente criado as tags
pretendidas no webxml
Uma vez criada a servlet vem com os meacutetodos herdados de
HttpServlet doGet() e doPost() implementados e com um
meacutetodo chamado processRequest() que envia coacutedigo
HTML O que vamos fazer eacute apagar este meacutetodo e colocar a
vazio o meacutetodo doPost() e introduzir a seguinte linha no
meacutetodo doGet()
Com esta linha criada e uma vez chamada a servlet que por
defeito responde por GET o pedido vai ser reencaminhado
para a nossa paacutegina criada homejsp
Fazendo deploy coloca-se o URL httplocalhost8080Teste
Welcome e verifica-se que a nossa servlet estaacute a fazer o
reencaminhamento para a nossa paacutegina inicial
Como proacuteximo passo vamos enviar variaacuteveis para uma ser-
vlet onde a mesma iraacute processar e enviar uma resposta En-
tatildeo o que se pretende eacute tomando os mesmos passos de cria-
ccedilatildeo da WelcomeServlet vamos criar a SomaServlet com o
seguinte coacutedigo
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
httpjavasuncomxmlnsjavaee httpjavasuncomxmlnsjavaee web-app_3_0xsdgt ltservletgt ltservlet-namegtWelcomeServletltservlet-namegt ltservlet-classgtmainservletWelcomeServlet ltservlet-classgt ltservletgt ltservlet-mappinggt ltservlet-namegtWelcomeServletltservlet-namegt lturl-patterngtWelcomelturl-patterngt ltservlet-mappinggt ltsession-configgt ltsession-timeoutgt 30 ltsession-timeoutgt ltsession-configgt ltweb-appgt
getServletContext()getRequestDispatcher( homejsp)forward(request response)
package mainservlet import javaioIOException import javaxservletServletException import javaxservlethttpHttpServlet import javaxservlethttpHttpServletRequest import javaxservlethttpHttpServletResponse public class SomaServlet extends HttpServlet public static final String TEXTO = texto public static final String VALOR_1 = valor1 public static final String VALOR_2 = valor2 public static final String RESULTADO = resultado
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
TEMA DA CAPA
12
E para interagirmos com a servlet vamos criar as paacuteginas so-
majsp e resultadojsp onde mais uma vez vamos ao menu
File ndash New Filehellip selecionamos JSP e preenchemos o nome
sem a extensatildeo no campo File Name
somajsp
Com o objectivo de evitar erros a servlet possui constantes
que permitem que haja uma coerecircncia entre as variaacuteveis envia-
das e recebidas com o objectivo de evitar errosPode-se ob-
servar que a servlet uma vez iniciada envia uma variaacutevel atra-
veacutes de requestsetAttribute() Uma vez chamado o setAttri-
bute() requer 2 paracircmetros
requestsetAttribute(NomeDoAtributo UmObjectoQQ)
O primeiro paracircmetro como descrito atribui um nome sen-
do esse o nome que deve ser usado nas paacuteginas JSP para
puderem capturar a variaacutevel enviada que se vai encontrar
descrita no segundo paracircmetro que por sua vez eacute sempre
convertida da servlet para object Como tal teve que ser
efectuado o cast do objecto agrave chegada para o tipo de variaacute-
vel que tinha antes de ser enviada
String atributo = (String) requestgetAttribute
(NomeDoAtributo)
(Recepccedilatildeo do atributo)
Caso o que se pretenda seja o contraacuterio enviar variaacuteveis no
sentido JSP agrave Servlet a paacutegina JSP deve de conter um for-
mulaacuterio HTML com o meacutetodo que se pretende POST ou
GET e na action o URL pattern da servlet em questatildeo E os
nomes dos inputs satildeo as referecircncias que a servlet usa para
receber as variaacuteveis das paacuteginas JSP variaacuteveis essas quem
vecircm como String e como tal devem de ser convertidas para o
tipo desejado (Como demonstrado no coacutedigo acima referi-
do) Vamos entatildeo testar acedendo ao URL http
localhost8080TesteSoma
Porem a aplicaccedilatildeo funciona mas apenas mostra paacuteginas
caso as mesmas sejam escritas no URL pois uma vez que
renomeamos o indexjsp para homejsp natildeo existe de mo-
mento nenhuma paacutegina inicial ou seja caso escrevesse-
mos httplocalhost8080Teste a aplicaccedilatildeo natildeo vai mostrar
nenhuma paacutegina
Para solucionarmos esse problema vamos entatildeo criar um
filtro que remeta para uma determinada servlet filtro esse
que vai aguardar que uma determinada variaacutevel se altere de
estado para desbloquear as restantes paacuteginas Com este
tipo de classes podemos definir niacuteveis de acesso dentro da
nossa aplicaccedilatildeo restringindo a mesma quando certas variaacute-
veis natildeo forem validadas ou natildeo se encontram com o valor
pretendido (por exemplo um determinado nome de utilizador
e palavra chave)
Vamos entatildeo novamente a File ndash New Filehellip e seleciona-
mos Filter
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
Override protected void doGet(HttpServletRequest request HttpServletResponse response) throws ServletException IOException requestsetAttribute(TEXTO Insira 2 numeros e submeta para obter o resultado) getServletContext()getRequestDispatcher (somajsp)forward(request response) Override protected void doPost(HttpServletRequest request HttpServletResponse response) throws ServletException IOException int resultado try int val1 = IntegerparseInt (requestgetParameter(VALOR_1)) int val2 = IntegerparseInt (requestgetParameter(VALOR_2)) resultado = val1 + val2 requestsetAttribute(RESULTADO +resultado) catch (NumberFormatException e) requestsetAttribute(RESULTADO Valores natildeo validos) getServletContext()getRequestDispatcher (resultadojsp)forward(request response)
ltpage import=mainservletSomaServletgt ltpage contentType=texthtml pageEncoding=UTF- 8gt ltDOCTYPE htmlgt lt String texto = (String) requestgetAttribute (SomaServletTEXTO)gt lthtmlgt ltheadgt ltmeta http-equiv=Content-Type content=texthtml charset=UTF-8gt lttitlegtSomalttitlegt ltheadgt ltbodygt lth2gtlt=textogtlth2gt ltform action=Soma method=POSTgt Valor 1ltinput type=text name= lt=SomaServletVALOR_1gtgt Valor 2ltinput type=text name= lt=SomaServletVALOR_2gtgt ltbrgt ltinput type=submit name=submitgt ltformgt ltbodygt lthtmlgt
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
TEMA DA CAPA
13
caccedilatildeo e restriccedilatildeo de acessos os filtros permitem a execuccedilatildeo
de certas linhas de coacutedigo que mantecircm estados numa aplica-
ccedilatildeo e eacute o siacutetio ideal para colocar a parte do coacutedigo da aplica-
ccedilatildeo que manipula variaacuteveis de sessatildeo
Apoacutes criar-se a classe do tipo Filter ignorando o coacutedigo ge-
rado o filtro deveraacute possuir o seguinte coacutedigo
Uma vez criado o filtro este vai redirecionar todos os pedidos
agrave aplicaccedilatildeo para a WelcomeServlet enquanto a variaacutevel
validSession estiver a NULL como tal na servlet Welcome-
Servlet coloca-se a seguinte linha
requestgetSession()setAttribute(UrlFilterSESSION
gotSession)
Assim que o filtro passar pela WelcomeServlet a variaacutevel
validSession vai deixar de estar a NULL colocando o filtro a
fazer um encadeamento com os restantes pedidos que apa-
recerem
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
No seguinte passo vamos atribuir o nome de UrlFilter e coloca
-lo num novo package mainfilter
Semelhante ao passo de criaccedilatildeo do mapeamento das servlets
no webxml o IDE igualmente cria automaticamente um mape-
amento do filtro no ficheiro XML contudo o coacutedigo gerado eacute
ligeiramente diferente (Ver referecircncia de tags do webxml)
Apoacutes dar seguinte neste passo e natildeo preencher nada no proacutexi-
mo o IDE gera uma classe filtro por defeito e gera o seu mape-
amento no webxml semelhante a
Muito semelhante ao que se vai encontrar num mapeamento
de uma servlet apenas com a diferenccedila do nome das tags de
servlet para filter e o seu mapeamento seraacute muacuteltiplo para todos
os URLs que se deseja correr um determinado filtro antes de
haver o redireccionamento Uacuteteis para criar poliacuteticas de autenti-
ltfiltergt ltfilter-namegtUrlFilterltfilter-namegt ltfilter-classgtmainfilterUrlFilter ltfilter-classgt ltfiltergt ltfilter-mappinggt ltfilter-namegtUrlFilterltfilter-namegt lturl-patterngtlturl-patterngt ltfilter-mappinggt
package mainfilter import javaioIOException import javaxservlet import javaxservlethttp public class UrlFilter implements Filter FilterConfig filterConfig public static final String SESSION = session Override public void doFilter(ServletRequest req ServletResponse resp FilterChain chain) throws IOException ServletException if (req instanceof HttpServletRequest) String path = ((HttpServletRequest) req)getServletPath() HttpSession session = ((HttpServletRequest) req)getSession(false) boolean sessionValidator = false if (session = null) String validSession = (String) sessiongetAttribute(SESSION) if (validSession = null) sessionValidator = true if (pathequals(Welcome) ampamp sessionValidator) ((HttpServletResponse) resp)sendRedirect(filterConfiggetServletContext ()getContextPath() + Welcome) else chaindoFilter(req resp) Override public void init(FilterConfig filterConfig) thisfilterConfig = filterConfig Override public void destroy()
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
TEMA DA CAPA
14
Apoacutes implementado quando se aceder agrave aplicaccedilatildeo pelo URL
apontado para a raiz (httplocalhost8080Teste) o servidor
com conhecimento da existecircncia de um filtro vai chama-lo para
cada vez que o cliente acede a qualquer servlet ou JSP
Para finalizar este exemplo vamos soacute criar um link na paacutegina
homejsp que nos vai apontar para a paacutegina somajsp atraveacutes
da SomaServlet
lta href=SomagtSomarltagt
Dentro da aplicaccedilatildeo os URL pattern que foram definidos no
webxml servem igualmente para os links HTML chamando
sempre o meacutetodo doGet() da servlet
Conclusatildeo
Este artigo mostra numa forma introdutoacuteria como se pode criar
uma aplicaccedilatildeo Java com uma interface Web tendo em conta
que as capacidades do Java EE e das suas bibliotecas nome-
adamente Servlets Filters e as configuraccedilotildees necessaacuterias para
criar uma aplicaccedilatildeo Web baacutesica com conceitos adicionais de
XML( no seu geral) JSP e MVC
BibliografiaReferecircncias
httpwwworaclecomtechnetworkjavajavasedownloads
jre7-downloads-1880261html
httpwwworaclecomtechnetworkjavajavaeedownloads
indexhtml
httpsnetbeansorgfeaturesindexhtml
httpenwikipediaorgwikiJava_EE_version_history
httpwwwjsptutcom
httpsdevelopersgooglecomappenginedocsjavaconfig
webxml
INTRODUCcedilAtildeO AO JAVA EE E JAVA WEB
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR Programaccedilatildeo em C const
Jogo da Vida
JBoss Aplication Server 7
PHP Uma framework ldquofrom scratchrdquo (Parte 1)
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
16
Uma das ldquorecentesrdquo adiccedilotildees agrave linguagem C foi o qualificador
const Ao contraacuterio do que se possa pensar utilizar const
natildeo cria uma constante mas sim uma variaacutevel soacute-de-leitura
O que queremos dizer com isto Vejamos o seguinte exem-
plo
Qual o valor de i apoacutes execuccedilatildeo da linha 4 Embora possa
parecer estranho i vai ter o valor 73 apesar de termos de-
clarado i como constante Por este motivo variaacuteveis qualifi-
cadas com const natildeo satildeo constantes verdadeiras em C (satildeo-
no em C++) e natildeo podem por este motivo ser utilizadas em
certos lugares como a definiccedilatildeo do tamanho de arrays ou
em cases de um switch (excepto com extensotildees dos compi-
ladores)
De que nos serve entatildeo um qualificador const se natildeo asse-
gura que a variaacutevel permanece inalterada Bem a utilizaccedilatildeo
de const para qualificar variaacuteveis impede de facto a sua
alteraccedilatildeo na maioria dos casos Natildeo podemos alterar i direc-
tamente por exemplo (ie i = 73 emite um erro) No exemplo
apresentado acima enganaacutemos o compilador (linha 2) com o
cast de ampi para o tipo int sem cast um compilador bem
configurado emitiraacute pelo menos um aviso de que o qualifica-
dor const eacute descartado na atribuiccedilatildeo de ampi a ptr um pequeno
sinal de alarme para o programador (eacute soacute estar atento)
Podemos como referido acima qualificar uma variaacutevel com
const e impedir que seja alterada directamente Se tentar-
mos apontar um apontador a essa variaacutevel o compilador
avisa-nos que a qualificaccedilatildeo de const seraacute perdida e pode-
mos alterar a variaacutevel atraveacutes do apontador Haveraacute maneira
de impedir que isto aconteccedila Na realidade a questatildeo eacute
outra como utilizar o qualificador const com apontadores
Existem 4 formas de qualificar um apontador com const
obtendo-se diferentes niacuteveis de acesso de leitura eou escri-
ta da variaacutevel apontada atraveacutes do mesmo Para que natildeo
existam duacutevidas eacute importante reter que o qualificador const
qualifica uma variaacutevel e natildeo um local na memoacuteria Por outras
palavras (e recorrendo ao exemplo inicial) qualificar i como
const soacute impedir a alteraccedilatildeo do valor atraveacutes da variaacutevel i
Quando apontamos um apontador ao endereccedilo de i pode-
mos fazer o que quisermos com o valor laacute armazenado inde-
pendentemente de como i foi declarado
A primeira forma de usar const num apontador eacute surpreen-
dentemente natildeo usar const num apontador Na realidade
(obviamente) esta natildeo eacute uma utilizaccedilatildeo do qualificador const
Programaccedilatildeo em C const mas este artigo natildeo estaria completo sem se falar dela Um
apontador simples de forma tipo p permite-nos fazer vaacuterias
coisas podemos apontaacute-lo a qualquer local da memoacuteria que
queiramos e desde que apontado a um endereccedilo vaacutelido
podemos alterar o valor aiacute armazenado com o operador de
indirecccedilatildeo (eg p = 3) Este tipo de apontador natildeo apresenta
restriccedilotildees nenhumas (por esse motivo eacute que o compilador
emite um aviso quando tentamos apontaacute-lo a uma variaacutevel
const excepto na presenccedila de casts)
Segue-se entatildeo a criaccedilatildeo de um apontador para uma variaacute-
vel constante Este tipo de apontador apresenta uma particu-
laridade embora seja possiacutevel apontaacute-lo a qualquer endere-
ccedilo de memoacuteria natildeo eacute possiacutevel utilizar este apontador para
alterar o conteuacutedo do endereccedilo apontado Logicamente este
era o tipo de apontador que precisaacutevamos no exemplo inici-
al se temos uma variaacutevel constante queremos apontar para
ela com um apontador para uma variaacutevel constante
Se lermos a declaraccedilatildeo de ptr da direita para a esquerda
tudo faz sentido ptr eacute um apontador () para um const int E
de facto i eacute um const int tudo parece bem Quando tentamos
modificar o valor apontado por ptr o compilador emite um
erro queixa-se que estamos a tentar atribuir um valor a uma
variaacutevelendereccedilo soacute de leitura Este era o comportamento
que procuraacutevamos inicialmente
Passemos agora para a terceira forma de usar const com
apontadores Uma espeacutecie de ldquoinversordquo de um apontador
para uma variaacutevel constante eacute um apontador constante para
uma variaacutevel (natildeo constante) A diferenccedila do anterior para
este eacute que agora passamos a conseguir alterar o valor apon-
tado (por outras palavras ptr = 73 passa a ser possiacutevel)
mas natildeo nos eacute possiacutevel apontar ptr para outra variaacutevel
Uma vez mais da direita para a esquerda ptr eacute um aponta-
dor constante ( const) para um int Podemos utilizar ptr agrave
vontade para modificar o valor de 42 para 73 mas eacute-nos
impossiacutevel alterar o endereccedilo para o qual ptr aponta Este
tipo de apontadores eacute uacutetil quando nos queremos assegurar
de que natildeo haacute alteraccedilotildees acidentais do local para onde um
apontador aponta Um pormenor importante sendo ptr um
apontador cujo endereccedilo natildeo pode ser alterado devemos
1 const int i = 42 2 int ptr = (int)ampi 3 4 ptr = 73
1 const int i = 42 2 const int ptr = ampi 3 4 ptr = 73 erro
1 const int i = 42 2 int const ptr = ampi 3 4 ptr = 73 ok 5 ptr = NULL erro
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
17
apontaacute-lo para onde queremos no momento da sua declara-
ccedilatildeo sob pena de ficar apontado para um local aleatoacuterio sem
possibilidade de alteraccedilatildeo
A quarta (e uacuteltima) forma de utilizar const num apontador eacute
como devem ter imaginado a combinaccedilatildeo das duas uacuteltimas
um apontador constante para uma variaacutevel constante Este eacute
o tipo de apontador mais limitado de todos uma vez que a
uacutenica coisa que podemos fazer com ele apoacutes a sua declara-
ccedilatildeo eacute consultar o valor para o qual aponta Natildeo podemos
alterar i se ptr for deste tipo nem podemos apontar ptr para
NULL ou outro endereccedilo qualquer
Desta vez utilizamos const em dois locais agrave esquerda do
asterisco para qualificar a variaacutevel apontada e agrave direita do
asterisco para qualificar o apontador Neste caso nenhuma
das operaccedilotildees funcionaraacute o compilador assegura-se que
natildeo utilizaremos ptr para alterar o valor para o qual aponta
nem tentaremos apontar ptr para outro endereccedilo
Neste artigo cobrimos algumas utilizaccedilotildees do qualificador
const na linguagem C (volto a lembrar estamos a falar de C
e natildeo de ldquoCC++rdquo) e foi tambeacutem referido como utilizar este
qualificador para melhorar o coacutedigo que escrevemos de for-
ma a prevenir asneiras relativamente comuns quando se lida
com apontadores
Falta no entanto mencionar outra utilidade do const docu-
mentaccedilatildeo Quando o programador utiliza const de uma for-
ma pensada estaacute a documentar o seu coacutedigo Se virmos uma
funccedilatildeo que aceita como argumento const void podemos
imediatamente imaginar que o endereccedilo passado nunca seraacute
alterado pela funccedilatildeo em causa enquanto que um simples
void natildeo nos informa sobre as intenccedilotildees da API Natural-
mente se o programador da API declarar um argumento
com const e depois utilizar casts para se livrar da qualifica-
ccedilatildeo entatildeo aiacute all bets are off e nada eacute garantido Mas assu-
mamos que isso eacute a excepccedilatildeo e natildeo a regra
Existem ainda muacuteltiplos aspectos que natildeo foram cobertos
neste artigo nomeadamente a conversatildeo impliacutecita de T para
const T e T para const T Esta conversatildeo eacute bastante uacutetil
quando queremos passar um valor do tipo T a uma funccedilatildeo
que requer const T como argumento Se pensarmos bem
faz sentido em qualquer lugar onde eacute necessaacuterio um const
T podemos utilizar um T perfeitamente (que nunca seraacute al-
terado) Por outro lado a conversatildeo inversa (de const T ou
const T para T e T respectivamente) natildeo eacute permitida e
tambeacutem isso faz sentido se uma funccedilatildeo pede um valor do
tipo T natildeo faz sentido aceitar um const T porque isso im-
plicaria potenciais alteraccedilotildees ao valor apontado (que satildeo
proibidas pelo qualificador const)
As conversotildees impliacutecitas relativas ao const terminam por
aqui Em C natildeo haacute conversatildeo de T para const T o que
significa que numa funccedilatildeo que aceite um argumento const
T seraacute emitido um aviso se tentarmos passar um T Neste
caso temos que recorrer a um cast para silenciar o compila-
dor Nada disto eacute um erro no entanto os casts surgiram
porque satildeo necessaacuterios na linguagem C e recusar a sua
utilizaccedilatildeo eacute negar a linguagem Haacute que saber quando e co-
mo fazer as coisas da forma correcta
Para terminar recomendo uma olha- dela agraves
manpages da biblioteca standard de C jaacute utilizam const
abundantemente nota-se bem o seu valor como documenta-
ccedilatildeo dentro do coacutedigo Aleacutem deste aspecto da documentaccedilatildeo
a utilizaccedilatildeo de const leva agrave criaccedilatildeo de coacutedigo mais previsiacutevel
e seguro e serve tambeacutem como dica para possiacuteveis optimi-
zaccedilotildees feitas pelo compiladorUsem const Informem e enco-
rajem a utilizaccedilatildeo de const especialmente aos iniciados
porque vale a pena
PROGRAMACcedilAtildeO EM C CONST
1 const int i = 42 2 const int const ptr = ampi 3 4 ptr = 73 erro 5 ptr = NULL erro
AUTOR
Escrito por Antoacutenio Pedro Cunha (pwseo)
Meacutedico natural de Guimaratildees formado na Universidade do Minho
Programador autodidacta em parte dos tempos livres inscrito no foacuterum desde 2006
Website httppwseoalojnet
Ao contraacuterio do
que se possa pen-
sar utilizar const natildeo
cria uma constante
mas sim uma variaacutevel
soacute de leitura
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
18
Nesta ediccedilatildeo vamos propor ao leitor um olhar sobre um fa-
moso algoritmo da deacutecada de 70
O seu inventor John Horton Conway nasceu em Liverpool
em Dezembro de 1937 e eacute um dos matemaacuteticos mais conhe-
cidos da nossa era em todo o mundo Estudou na Universi-
dade de Cambridge e ainda hoje eacute uma mente ativa nas
mais variadas teorias como por exemplo a teoria dos coacutedigos
e a teoria com- binatoacuteria dos
jogos
Ilustraccedilatildeo 1 - John Conway
O algoritmo escolhido para esta ediccedilatildeo foi criado em 1970
por Conway ndash o Jogo da Vida ndash sendo este um jogo para
zero jogadores Este jogo tornou-se mundialmente famoso
atraveacutes de uma coluna na revista Scientific American Em
1971 foi tema de capa e tinha entatildeo relanccedilado uma aacuterea da
Matemaacutetica a dos autoacutematos celulares que satildeo estruturas
matemaacuteticas uacuteteis em simulaccedilotildees de processos fiacutesicos e
bioloacutegicos e que a um niacutevel teoacuterico podem comportar-se
como computadores
Um autoacutemato celular eacute um modelo discreto e cada autoacutemato
deste tipo eacute representado por uma grelha de ceacutelulas poden-
do essas ceacutelulas assumir um nuacutemero finito de estados que
variam de acordo com cada modelo Outra caracteriacutestica a
considerar eacute que o tempo de evoluccedilatildeo eacute tambeacutem discreto
por exemplo o estado de uma ceacutelula no tempo t eacute sempre
obtido tendo em consideraccedilatildeo o estado dessa mesma ceacutelula
(e respetiva vizinhanccedila) no tempo t-1 Cada vez que todas as
regras determiniacutesticas satildeo aplicadas a toda a grelha uma
nova geraccedilatildeo eacute produzida
Isto foi um dos motes de partida para que Conway criasse o
Jogo da Vida Este jogo eacute considerado um autoacutemato celular
bidimensional em que satildeo simulados processos de evoluccedilatildeo
de ceacutelulas bioloacutegicas Estudos jaacute efetuados provam que este
eacute um autoacutemato computacional universal isto eacute eacute capaz de
simular qualquer sistema evolucionaacuterio possiacutevel
(reprogramando as respetivas regras determiniacutesticas se isso
for necessaacuterio)
Jogo da Vida Devido agraves analogias com o aumento reduccedilatildeo e alteraccedilatildeo de
um sistema de supostos organismos vivos (as ceacutelulas) este
jogo pertence agrave classe dos ldquojogos de simulaccedilatildeordquo pois recriam
processos do mundo-real
Voltando de novo ao tema principal do nosso artigo eacute impor-
tante recordar ao leitor que este jogo eacute para zero jogadores
o utilizador eacute apenas responsaacutevel pelos valores de inicializa-
ccedilatildeo do sistema Depois desses valores serem introduzidos
as geraccedilotildees seguintes seratildeo sempre calculadas com base
nas regras determiniacutesticas do algoritmo
Neste jogo num dado instante cada ceacutelula tem dois estados
possiacuteveis ldquovivardquo ou ldquomortardquo
As regras do jogo da vida satildeo simples ora vejamos
Uma ceacutelula viva com menos de dois vizinhos vivos
morre por solidatildeo
Uma ceacutelula viva com mais de trecircs vizinhos vivos mor-
re por sobrepopulaccedilatildeo (por escassez de recursos)
Uma ceacutelula viva com exatamente dois ou trecircs vizinhos
vivos permanece viva
Uma ceacutelula morta com exatamente trecircs vizinhos vivos
torna-se viva
Ao contraacuterio do artigo anterior desta seacuterie a soluccedilatildeo propos-
ta para este problema (na linguagem C) propotildee-se a ser
algo extremamente simples escrita de forma quase elemen-
tar
Implementaccedilatildeo do Algoritmo
Para simular o sistema de jogo foi usada uma matriz e para
que o caacutelculo das regras fosse simples foi considerado que
todas as ceacutelulas dessa matriz teriam 8 vizinhos A forma
mais direta encontrada para isso foi inserir a matriz do utiliza-
dor (que neste artigo seraacute a matriz secundaacuteria) numa matriz
com dimensatildeo [linhas+2][colunas+2] (matriz principal) para
garantir que ateacute as ceacutelulas dos ldquocantosrdquo teriam os tais 8 vizi-
nhos
De forma a simplificar a leitura da nossa implementaccedilatildeo defi-
nimos que cada ceacutelula viva teraacute o valor 1 (representada pela
macro CELVIVA) e que cada ceacutelula morta teraacute o valor 0
(representada pela macro CELMORTA)
No inicio da funccedilatildeo jogo() satildeo pedidos ao utilizador os valo-
res para o nuacutemero de linhas e colunas do sistema de jogo e
o nuacutemero de geraccedilotildees a simular
Apoacutes termos esses valores eacute entatildeo criada a matriz principal
com todos os campos inicializados a -1 para que seja efetua-
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
19
da uma ldquolimpezardquo da memoacuteria utilizada Seguidamente e atra-
veacutes desses valores eacute inicializada dentro na matriz principal a
submatriz (matriz secundaacuteria) que eacute usada para calcular os
valores das ceacutelulas em cada geraccedilatildeo Neste caso eacute inicializa-
da a matriz com a dimensatildeo que o utilizador pediu com o valor
de CELMORTA em todos os campos
Apoacutes gerar a matriz secundaacuteria eacute perguntado ao utilizador
quantas ceacutelulas vivas pretende ter no jogo Seguidamente satildeo
pedidas as coordenadas dessas mesmas ceacutelulas Quando o
programa recebe esses valores (da linha e da coluna pretendi-
da) entatildeo a essas posiccedilotildees da matriz eacute atribuiacutedo o valor CEL-
VIVA
Recapitulando para representar uma ceacutelula viva eacute usado o
valor 1 e para representar uma ceacutelula morta eacute usado o valor 0
Todas as outras posiccedilotildees da matriz principal permanecem inal-
teradas com o valor -1
Assim o que o algoritmo faz eacute contabilizar quantas ceacutelulas
vivas estatildeo nos 8 vizinhos Ou seja por outras palavras para
cada posiccedilatildeo (ij) da matriz o programa vai verificar as posi-
ccedilotildees (i-1 j-1) (i-1 j) (i-1 j+1) (i j-1) (i j+1) (i+1 j-1) (i+1 j)
e (i+1 j+1) Caso o valor de cada uma dessas ceacutelulas seja
igual a 1 (CELVIVA ie ceacutelula viva) a variaacutevel de contagem
(cvivas) eacute incrementada uma unidade
Apoacutes a verificaccedilatildeo de todas as posiccedilotildees eacute verificado se a ceacutelu-
la da posiccedilatildeo (i j) eacute uma ceacutelula viva ou morta e satildeo verificadas
as regras do jogo para que se possa decidir se a ceacutelula (ij)
permanece viva ou se morre (tomando respetivamente o valor
CELVIVA e CELMORTA na submatriz)
Usando a variaacutevel i como auxiliar para as linhas e a variaacutevel j
como auxiliar para as colunas os caacutelculos iniciam-se na posi-
ccedilatildeo (11) da matriz principal pois eacute nestas coordenadas que se
inicia a matriz secundaacuteria (ie o sistema de jogo do utilizador)
Os caacutelculos satildeo feitos em todas as posiccedilotildees (ij) apenas da
matriz secundaacuteria daiacute que a condiccedilatildeo de execuccedilatildeo dos ciclos
for seja enquanto o i e o j forem menores que o valor das li-
nhas e das colunas introduzidas pelo utilizador Ou seja a ma-
triz principal natildeo eacute toda processada nos caacutelculos dos vizinhos
vivos para que natildeo sejam gastos recursos de computaccedilatildeo
desnecessariamente
Ilustraccedilatildeo 2 - Exemplo de verificaccedilatildeo de Ceacutelulas
Ceacutelula a ceacutelula a matriz atual eacute processada sendo que apoacutes
esse processamento o resultado do caacutelculo (se a ceacutelula vive
ou morre) eacute colocado na posiccedilatildeo correspondente na matriz
nova (que eacute uma matriz com as mesmas caracteriacutesticas da
matriz atual isto eacute tem tambeacutem uma matriz principal e uma
matriz secundaacuteria)
Apoacutes esse caacutelculo eacute mostrada no ecratilde a matriz secundaacuteria
da matriz nova e a informaccedilatildeo das ceacutelulas da matriz nova eacute
copiada para a matriz atual de forma a que na proacutexima itera-
ccedilatildeo do for principal (que executa o mesmo numero de vezes
quantas geraccedilotildees o utilizador peccedila ao programa) a informa-
ccedilatildeo volte a ser processada de forma anaacuteloga
Para que fosse mais simples ao utilizador o uso do nosso
programa foi tomada em consideraccedilatildeo para que natildeo se
tornasse aborrecido estar sempre a iniciar a execuccedilatildeo do
programa caso o utilizador quisesse continuar a jogar que o
programa apenas teraacute fim quando o utilizador escolher sair
do programa neste caso introduzindo o valor 0 no menu prin-
cipal do mesmo
Se o utilizador preferir jogar novamente entatildeo basta carregar
em 1 e o programa volta a gerar uma nova jogada gerando
um novo sistema de geraccedilotildees consoante os valores introdu-
zidos pelo utilizador Na nossa implementaccedilatildeo quando o
programa mostra o sistema de jogo as ceacutelulas vivas satildeo
representadas pelo siacutembolo
Coacutedigo do Programa
Este eacute apenas um excerto da funccedilatildeo que calcula a proacutexima
geraccedilatildeo tendo como base uma matriz que represente a gera-
ccedilatildeo anterior O coacutedigo completo poderaacute ser consultado no
foacuterum do PP
JOGO DA VIDA
void jogo(void) for (int g = 0 g lt geracoes g++) printf(nnGERACAO d g + 1) for (int i = 1 i lt= linhas i++) for (int j = 1 j lt= colunas j++) int cvivas = 0 if (matrizActual[i-1][j-1] == CELVIVA) cvivas++ if (matrizActual[i-1][j] == CELVIVA) cvivas++ if (matrizActual[i-1][j+1] == CELVIVA) cvivas++ if (matrizActual[i][j-1] == CELVIVA) cvivas++ if (matrizActual[i][j+1] == CELVIVA) cvivas++ if (matrizActual[i+1][j-1] == CELVIVA) cvivas++ if (matrizActual[i+1][j] == CELVIVA)
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
20
Como o leitor pode verificar nas linhas acima este eacute um algorit-
mo bastante simples e de raacutepida implementaccedilatildeo Eacute de referir
ainda que o coacutedigo do artigo desta ediccedilatildeo foi implementado
segundo o standard C99 (suportado pelos compiladores GCC
Clang e Pelles C) que nos permite programar de uma forma
portaacutevel e ainda assim confortaacutevel (comentaacuterios comeccedilados
com variable-length arrays tipo de dados bool entre outros)
Caso o leitor queira compilar o coacutedigo deste artigo em Linux
deve utilizar a linha de comando gcc -Wall -Wextra -std=c99 -
pedantic jogo-da-vida jogo-da-vidac
O objetivo principal deste algoritmo eacute entatildeo que o utilizador
possa decidir qual a sua populaccedilatildeo inicial e que apoacutes isso pos-
sa observar o comportamento do seu sistema Ao longo dos
anos muitas configuraccedilotildees foram testadas e experimentadas
com este jogo O jogo da vida convida a experimentar diversas
configuraccedilotildees sendo que agrave maior parte das configuraccedilotildees
iniciais escolhidas bastam apenas trecircs ou quatro geraccedilotildees
para a populaccedilatildeo desaparecer completamente Contudo haacute
algumas configuraccedilotildees jaacute conhecidas como configuraccedilotildees de
ldquoVida Eternardquo por haver sempre ceacutelulas vivas ao longo de mui-
tas geraccedilotildees (e ateacute mesmo de geraccedilotildees infinitas) como mostra
por exemplo imagem seguinte (obtida com a execuccedilatildeo do
nosso programa)
Ilustraccedilatildeo 3 - Exemplo configuraccedilatildeo Vida Eterna (Bloco)
Existem ainda diferentes configuraccedilotildees que podem ocorrer
no Jogo da Vida (configuraccedilotildees essas que o utilizador pode
facilmente encontrar na internet relativas a vaacuterios estudos jaacute
feitos sobre este algoritmo) Os exemplos mais simples satildeo
mostrados abaixo com as ceacutelulas vivas em preto e as ceacutelu-
las mortas em branco
Haacute configuraccedilotildees que satildeo alvo de vaacuterios estudos cientiacuteficos
por exemplo se dois gliders satildeo colocados em direccedilatildeo a um
bloco o bloco vai aproximar-se da fonte dos gliders mas por
outro lado se trecircs gliders satildeo colocados no mesmo lugar o
bloco vai afastar-se desses gliders Este facto eacute conhecido
como a ldquomemoacuteria de bloco deslizante e pode ser usada para
simular um contador
Eacute possiacutevel construir portas loacutegicas AND OR e NOT usando
gliders tal como eacute possiacutevel construir uma imagem que aja
como uma maacutequina de estado finito conectada a dois conta-
dores
O que significa que esta disposiccedilatildeo possui o mesmo poder
computacional de uma maacutequina de Turing universal ou seja
Jogo da Vida pode ser tatildeo poderoso quanto qualquer com-
putador com memoacuteria ilimitada dando origem ao Turing com-
pleto como jaacute vaacuterios estudos comprovam esse mesmo feito
Mais uma vez recordo ao leitor que pode experimentar sem
qualquer restriccedilatildeo as configuraccedilotildees iniciais que mais lhe
agradarem Este artigo eacute o terceiro de uma seacuterie de artigos
de programaccedilatildeo tendo como base principal a linguagem C
que esperamos que siga atentamente
JOGO DA VIDA
cvivas++ if (matrizActual[i+1][j+1] == CELVIVA) cvivas++ if (isAlive ampamp cvivas lt 2) DIE else if (isAlive ampamp cvivas gt 3) DIE else if (isAlive ampamp (cvivas == 2 || cvivas == 3)) LIVE else if (isDead ampamp cvivas == 3) LIVE else DIE
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
a matriz principal
natildeo eacute toda proces-
sada (hellip) para que natildeo
sejam gastos recur-
sos de computaccedilatildeo
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
21
Introduccedilatildeo
Atualmente a plataforma Java eacute uma das mais utilizadas no
mundo e muito disso se deve agrave capacidade da plataforma
suportar outras linguagens como por exemplo JRuby Groovy
e Scala Milhares de aplicativos para Web e Mobile satildeo de-
senvolvidos a cada mecircs utilizando esta plataforma como
base A plataforma Java mudou muito desde seu iniacutecio e
provavelmente vai continuar evoluindo nos proacuteximos anos
Em paralelo com essas mudanccedilas visualizamos os servido-
res de aplicaccedilatildeo que cada vez mais oferecem recursos de
alta complexidade como componentes de balanceamento
de carga inteligente implementaccedilatildeo de autenticaccedilatildeo (JAAS)
troca de mensagens assiacutencronas (JMS) controle de transa-
ccedilatildeo (JTA) persistecircncia de objetos (JPA) componentes para
criaccedilatildeo de aplicaccedilotildees distribuiacutedas e clusterizadas (EJB) API
Java para processamento de arquivos XML e Webservices
(JAX-WS e JAX-B) e muitas outras tecnologias facilitando o
desenvolvimento e padronizaccedilatildeo de aplicaccedilotildees Eles tam-
beacutem disponibilizam uma infraestrutura estaacutevel e escalonaacutevel
para aplicaccedilotildees de missatildeo criacutetica Um dos grandes desafios
dos servidores de aplicaccedilatildeo eacute acoplar serviccedilos de grande
complexidade deixando-os estaacuteveis e flexiacuteveis
Nas versotildees iniciais a plataforma ainda conhecida como
Java2EE natildeo estava madura e seus recursos nos servidores
de aplicaccedilatildeo eram carregados de forma hieraacuterquica consu-
mindo muitos recursos e tornando o startup altamente custo-
so
A arquitetura dos principais servidores de aplicaccedilatildeo foi rede-
senhada para que seus recursos possam ser iniciados de
modo concorrente ou sob demanda As melhorias tambeacutem
podem ser notadas no consumo de memoacuteria onde em uma
simples maacutequina desktop pode-se facilmente configurar
serviccedilos de alta disponibilidade e escalaacuteveis para realizaccedilatildeo
de testes em tempo de desenvolvimento
Se vocecirc deseja um ambiente com alta disponibilidade esca-
lonaacutevel e que seja independente de fabricante (de forma a
evitar o vendor lock-in) o Java EE e seus servidores de apli-
caccedilatildeo foram feitos para si
JBoss Application Server 7
JBoss Application Server 7 ou apenas JBoss AS 7 eacute um ser-
vidor de aplicaccedilatildeo de coacutedigo aberto que eacute 100 compatiacutevel
com a especificaccedilatildeo Java EE 6 Em versotildees anteriores do
Java EE mesmo utilizando somente algumas tecnologias
para o desenvolvimento da aplicaccedilatildeo eacuteramos obrigados a
lidar com todos os recursos implementados no servidor Para
resolver esse problema no Java EE 6 foi inserido o conceito
JBoss Aplication Server 7 de profile que tem como objetivo criar configuraccedilotildees com fins
especiacuteficos como por exemplo o Web Profile que possui tec-
nologias para o desenvolvimento web
Ateacute ao momento a versatildeo atual do JBoss AS foi baixada
mais de 150 mil vezes Para mais informaccedilotildees visite o site
do projeto httpwwwjbossorgjbossas
Recentemente o projeto recebeu um novo nome e futura-
mente se chamaraacute WildFly Mais informaccedilotildees podem ser
encontradas em httpwwwwildflyorgfaq
Requisitos
Como todo servidor de aplicaccedilatildeo o JBoss AS 7 requer um
ambiente com JDK 16JDK 17 devidamente configurado e
instalado O Java Development Kit (JDK) eacute um conjunto de
utilitaacuterios para criaccedilatildeo de softwares para plataforma Java
Existem vaacuterias implementaccedilotildees cada qual com a sua finali-
dade
Para baixar o JDK 7 navegue ateacute a paacutegina de download da
Oracle em httpwwworaclecomtechnetworkjavajavase
downloadsindexhtml e escolha a opccedilatildeo Java Platform
(JDK) Em seguida vocecirc seraacute direcionado para outra paacutegina
onde deveraacute aceitar a License Agreement Baixe a versatildeo
jdk-7u21-linux-x64rpm
Para instalar o JDK execute o seguinte comando
$ sudo rpm -Uvh jdk-7u21-linux-x64rpm
Execute o comando java --version para verificar se o JDK
estaacute instalado
$ java --version
java version 170_21
Java(TM) SE Runtime Environment (build 170_21-b11)
Java HotSpot(TM) 64-Bit Server VM (build 2321-b01 mixed
mode)
Duvidas na instalaccedilatildeo Consulte o link
httpdocsoraclecomjavase7docswebnotesinstall
indexhtml
Instalando o JBoss AS 7
O JBoss AS 7 pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgjbossasdownloads Para
instalar basta descompactar o arquivo jboss-as-
711Finalzip utilizando um utilitaacuterio de descompressatildeo
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
22
Boas Praacuteticas
Nunca inicie o JBoss utilizando o usuaacuterio root pois a platafor-
ma Java oferece APIs para execuccedilatildeo de coacutedigos nativos do
sistema operacional e mecanismos de gerenciamento remoto
No Linux crie um usuaacuterio com privileacutegios de root para iniciar o
serviccedilo do JBoss Jaacute no Windows crie um usuaacuterio com poderes
administrativos mas com privileacutegios reduzidos
Uma vez instalado eacute fortemente aconselhaacutevel iniciar o JBoss
AS para verificar se existe alguma incompatibilidade com a
arquitetura do JDK utilizado ou ateacute mesmo se a memoacuteria dispo-
nibilizada eacute suficiente
Execute uma simples instacircncia standalone e acesse a url http
localhost8080 para verificar se o JBoss foi iniciado correta-
mente
$ jboss-as-711Finalbinstandalonesh
Domain Mode x Standalone Mode
O JBoss AS 7 possui dois modelos de trabalho conhecidos
como Standalone Mode e Domain Mode No Standalone Mode
podemos trabalhar com uma uacutenica instacircncia muito semelhante
a versotildees anteriores do JBoss AS 5 e JBoss AS 6 Para utilizar
o Standalone mode basta iniciar o script JBOSS_HOME
standalonesh no Linux
Agora vocecirc deve estar se perguntando se eacute possiacutevel criar um
ambiente de alta disponibilidade utilizando o Standalone
Mode A resposta eacute Sim Eacute possiacutevel criar um ambiente com
recursos clusterizados replicaccedilatildeo de sessatildeo e tudo mais Se
vocecirc jaacute utilizou outras versotildees do JBoss deve estar pensan-
do em utilizar o famoso Farm Deployment onde a aplicaccedilatildeo
era replicada para todos os noacutes do cluster Esse recurso natildeo
existe no Standalone Mode pelo que vocecirc teraacute que realizar
o deploy em todos os noacutes um por um Isso natildeo eacute um proble-
ma se forem 3 ou 4 instacircncias mas imagine se forem umas
20 instacircncias
Uma soluccedilatildeo para esse problema seria a utilizaccedilatildeo de ferra-
mentas como o RHQ (httpwwwjbossorgrhq) para realiza-
ccedilatildeo do deploy em muacuteltiplas instacircncias o que acarretaria con-
sumo de mais recursos e tempo Para solucionar esse pro-
blema temos uma soluccedilatildeo bem simples jaacute embutida no servi-
dor de aplicaccedilatildeo o Domain Mode e eacute sobre isso que vamos
falar no proacuteximo toacutepico
Introduccedilatildeo ao Domain Mode
O Domain Mode permite iniciar vaacuterias instacircncias e tambeacutem
oferece uma maneira centralizada de gerenciamento dos
recursos facilitando a administraccedilatildeo das instacircncias JBoss O
Domain Mode pode ser visto como uma unidade de instacircn-
cias que compartilham recursos e configuraccedilotildees e satildeo admi-
nistradas por um processo chamado Domain Controller
Para iniciar o JBoss AS 7 de modo domain execute o script
JBOSS_HOMEdomainsh no Linux ou JBOSS_HOME
domainbat no Windows
Quando iniciamos o JBoss em Domain Mode na configura-
ccedilatildeo default temos no miacutenimo quatro processos um Host
Controller um Process Controller e dois Servers
Domain Controller Ele eacute quem controla o gerenciamento
do domain Nele estatildeo as configuraccedilotildees que satildeo comparti-
lhadas entre as instacircncias que estatildeo nesse domain
Process Controller Ele eacute de grande importacircncia pois ele eacute
responsaacutevel pela criaccedilatildeo das instacircncias e tambeacutem do Host
Controller que vamos falar a seguir O Process Controller
natildeo deve ser confundido com uma instacircncia ele eacute
simplesmente um processo na JVM
Host Controller Como Domain Controller o Host Controller
tambeacutem coordena as instacircncias do domain Ele eacute o
responsaacutevel por fazer algo semelhando ao Farm Deployment
(natildeo existe nessa versatildeo) ou seja ele distribui o arquivo
deployado para todas as instacircncias do domain
Servers Satildeo as instacircncias em si onde estatildeo as aplicaccedilotildees
deployadas Um ponto importante eacute que cada server eacute um
processo Java
Entre os benefiacutecios da utilizaccedilatildeo do Modo Domain que noacutes
podemos citar estatildeo
Gestatildeo Centralizada
JBOSS APLICATION SERVER 7
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
23
Configuraccedilatildeo Centralizada
Deploy Centralizado
Manutenccedilatildeo Centralizada
Preparando a Infra Estrutura
Nesse artigo estamos utilizando Trecircs servidores Dois deles
seratildeo utilizados pelas as instacircncias JBoss e Um seraacute utilizado
Pelo Domain Controller e Apache Web Server para realizar o
Balanceamento de carga
Crie um grupo e adicione um usuaacuterio para ser utilizado
pelo JBoss AS 7 em todos os servidores
$ sudo groupadd jboss
$ sudo useradd -s binbash -d homejboss -m -g jboss
jboss
Faccedila tambeacutem o download do JBoss AS 7 no diretoacuterio
tmp
$ cd tmp
$ wget httpdownloadjbossorgjbossas71jboss-as-
711Finaljboss-as-711Finalzip
Crie a estrutura de diretoacuterios para armazenar o JBoss
$ sudo mkdir usrlocaljboss
$ chown jbossjboss usrlocaljboss
$ su jboss
$ mkdir usrlocaljboss
$ cd usrlocaljboss
$ unzip tmpjboss-as-711Finalzip
Finalmente o JBoss AS 7 estaacute instalado em usr
localjbossjboss-as-711 Final em todos os servidores
Configurando Alta Disponibilidade
Para aplicaccedilotildees com muitas solicitaccedilotildees a busca pela
melhora do desempenho eacute quase constante Um dos
meios mais utilizados eacute o Balanceamento de Carga
que consiste em distribuir a carga das solicitaccedilotildees em
vaacuterios servidores ou instacircncias proporcionando a
melhora no tempo de reposta
O JBoss AS 7 possui um componente nativo
conhecido como mod_cluster que foi criado para
atender a mecanismos de balanceamento de carga
alinhados ao conceito de Cloud O Mod Cluster vem
com algoritmos de balanceamento de carga mais
avanccedilados que se baseiam na carga da aplicaccedilatildeo ou
seja quantidades de sessotildees conexotildees abertas
entre outros Ele pode ser customizado conforme a
necessidade da aplicaccedilatildeo visando um ambiente
elaacutestico Um das vantagens eacute tambeacutem o
descobrimento automaacutetico de novas instacircncias JBoss
(utilizando Multicast) natildeo havendo a necessidade de
configuraccedilotildees extras
As configuraccedilotildees do mod_cluster devem ser
realizadas no JBoss AS 7 e no Apache Web Server
que seraacute utilizado como Proxy reverso
Instalando Apache Web Server
No Servidor Balancer instale o Apache Web Server
Basta executar o seguinte comando
$ sudo yum install httpd -y
Inicie o serviccedilo e verifique se paacutegina de testes eacute
carregada
$ sudo service httpd start
Instalando Mod Cluster
Ainda no Servidor Balancer instale o Mod Cluster Ele
pode ser baixado gratuitamente no site da
comunidade httpwwwjbossorgmod_cluster
downloads1-2-0-Final Para instalar basta
JBOSS APLICATION SERVER 7
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
24
descompactar o arquivo mod_cluster-120Final-linux2-
x64-ssltargz utilizando um utilitaacuterio de descompressatildeo
e copiar os moacutedulos para o diretoacuterio de moacutedulos do
Apache Web Server
Para baixar e extrair o arquivo execute
$ cd tmp
$ wget httpdownloadsjbossorg
mod_cluster120Finalmod_cluster-120Final-
linux2-x64-ssltargz
$ tar -zxvf mod_cluster-120Final-linux2-x64-
ssltargz
Copie os moacutedulos para o Apache
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_advertiseso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_managerso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_proxy_clusterso etchttpdmodules
$ sudo cp tmpoptjbosshttpdlibhttpdmodules
mod_slotmemso etchttpdmodules
Edite o arquivo etchttpdconfhttpdconf e comente a
linha LoadModule proxy_balancer_module modules
mod_proxy_balancerso para natildeo ocorrer um conflito
com LoadModule proxy_cluster_module modules
mod_proxy_clusterso
LoadModule proxy_balancer_module modules
mod_proxy_balancerso
Crie o arquivo mod_clusterconf e adicione a seguinte
configuraccedilatildeo
$ sudo vim etchttpdconfdmod_clusterconf
Reinicie o Apache
$ sudo service httpd restart
Acesse o mod_cluster-manager e verifique se as
informaccedilotildees sobre a versatildeo do mod_cluster estatildeo
aparecendo
Arquitetura dos Servidores em Modo Domain
Para realizar os testes do balanceamento de carga
com o mod_cluster vamos subir o Domain Controller
e depois vamos conectar dois Hosts Controller com
uma Instacircncia JBoss em cada
Criando os Perfis dos Servidores JBoss
No Servidor Balancer crie o perfil chamado master
que seraacute o Domain Controller
$ cp -Rap usrlocaljbossjboss-as-711Final
domain usrlocaljbossjboss-as-711Finalmaster
JBOSS APLICATION SERVER 7
Content Mod Cluster LoadModule slotmem_module modules mod_slotmemso LoadModule manager_module modules mod_managerso LoadModule proxy_cluster_module modules mod_proxy_clusterso LoadModule advertise_module modules mod_advertiseso ltVirtualHost 80gt ltDirectory gt Order denyallow Allow from all ltDirectorygt KeepAliveTimeout 60 ManagerBalancerName mycluster MaxKeepAliveRequests 0 ServerAdvertise On EnableMCPMReceive On ltVirtualHostgt ltLocation mod_cluster-managergt SetHandler mod_cluster-manager Order denyallow Allow from all ltLocationgt
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
25
No Servidor Host-01 crie o perfil chamado host01 que
seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost01
No Servidor Host-02 crie o perfil chamado host02 que
tambeacutem seraacute um dos Hosts Controllers
$ cp -Rap usrlocaljbossjboss-as-711Finaldomain
usrlocaljbossjboss-as-711Finalhost02
Configurando Toda a Arquitetura
Como vimos anteriormente todas as configuraccedilotildees e
gerenciamento satildeo realizadas de forma centralizada no
Domain Controller Quando for necessaacuterio adicionar um
novo grupo de servidores configurar logs criar
datasources alterar portas entre outras coisas tudo
isso deveraacute ser feito no domainxml do Domain
Controller que nesse caso eacute chamado de master Sendo
assim todas as nossas instacircncias JBoss usufruiratildeo das
configuraccedilotildees realizadas para o Domain ou para o
Server Group em questatildeo
A primeira coisa a ser feita eacute definir qual o conjunto de
tecnologias (subsystems) seratildeo utilizadas na aplicaccedilatildeo
Isso pode variar conforme os requisitos de cada
sistema Um conjunto de tecnologias (subsystems) no
JBoss 7 eacute chamado de profile
ltprofile name=full-hagt
O JBoss AS 7 possui 4 profiles por padratildeo ldquodefaultrdquo
ldquofullrdquo ldquohardquo ldquofull-hardquo mas nada impede de noacutes
copiarmos qualquer um deles e renomeaacute-los conforme
nossos requisitos No Java EE 6 foi introduzido o
conceito de Profiles onde se pode criar um subconjunto
de tecnologias presentes na spec Java EE ou ateacute
mesmo adicionar novas definidas pela JCP (Java
Community Process)
Mais informaccedilotildees
httpscommunityjbossorgwiki
JavaEE6UtilizandoWebProfileOuFullProfileNoJBossAS7
Noacutes vamos utilizar o profile ha pois nele os recursos
para clusterizaccedilatildeo estatildeo disponiacuteveis
Depois de definir o profile o proacuteximo criar um Grupo de
Servidores Server Group Um server group nada mais eacute
que um agrupamento de instacircncias JBoss Nessa
arquitetura vamos utilizar apenas um server group Isso
pode ser definido na tag ltserver-groupsgt no domainxml
do master (Domain Controller)
Crie um Server Group chamado apps que utilize o
profile ha
$ vim usrlocaljbossjboss-as-711Finalmaster
configurationdomainxml
Os outros Server Groups podem ser removidos
No profile ha especificamente no subsystem web
adicione o atributo instance-id
O instance-id seraacute passado como paracircmetro na
inicializaccedilatildeo do Host Controller
O proacuteximo passo eacute configurar o atributo proxy list no
subsystem modcluster
Nesse atributo estaacute configurado o IP e porta do
Apache Web Server
No Servidor Host-01 edite o arquivo usrlocaljboss
jboss-as-711Finalhost01configurationhost-
slavexml para criar a instacircncia JBoss
Na tag ltserversgt eacute onde estatildeo de fato as nossas
instacircncias JBoss Quando criamos um novo ltservergt
estamos criando uma nova instacircncia JBoss
Conforme foi definido na arquitetura o Host Controller
01 conteraacute apenas uma instacircncia JBoss chamada
instance-one
Deixe o ltserversgt como abaixo
Definimos que a instacircncia JBoss instance-one faraacute
parte do Server Group apps
Para finalizar na tag lthostgt adicione o nome host01
lthost name=host01 xmlns=urnjbossdomain12gt
JBOSS APLICATION SERVER 7
ltserver-group name=apps profile=hagt ltjvm name=defaultgt ltheap size=1303m max-size=1303mgt ltpermgen max-size=256mgt ltjvmgt ltsocket-binding-group ref=ha-socketsgt ltserver-groupgt
ltsubsystem xmlns=urnjbossdomainweb12 de-fault-virtual-server=default-host instance- id=$jbossservername native=falsegt
ltsubsystem xmlns=urnjbossdomainmodcluster10gt ltmod-cluster-config advertise-socket=modcluster proxy-list=19216823818680gt ltdynamic-load-providergt ltload-metric type=busynessgt ltdynamic-load-providergt ltmod-cluster-configgt ltsubsystemgt
ltserversgt ltserver name=instance-one group=appsgt ltservergt ltserversgt
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
26
Repita os procedimentos realizados no servidor Host -01
em Host-02 alterando apenas o nome do servidor que
seraacute instance-two e do lthostgt que seraacute host02No
ambiente em que realizei os testes o sevidores possuem
os seguintes IPs
Domain Controller+Apache WebServer 192168238186
Host Controller 01 192168238187
Host Controller 02 192168238188
Inicie o Domain Controler (master) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalmaster
-Djbosshostdefaultconfig=host-masterxml -
Djbossbindaddress=192168238186 -
Djbossbindaddressmanagement=192168238186
Verifique o log
JBoss AS 711Final Brontes (Host Controller) started
in 15505ms - Started 11 of 11 services (0 services are
passive or on-demand)
O Domain Controller foi iniciado com sucesso Conecte
primeiro Host Controller 01 (Host-01) ao Master Inicie o
Perfil host01 utilizando os seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost01
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238187
-Djbossbindaddress=192168238187
-Djbossservername=host-01
Agora observe os logs no Domain Controller e perceba
que o Host Controller 01 se conectou ao Domain
JBAS010918 Registered remote slave host host01
JBoss AS 711Final Brontes
Observe tambeacutem o Mod Cluster Manager em
http192168238186mod_cluster-manager e veja que
a nossa primeira instacircncia jaacute apareceu
Inicie o Host Controller 02 (slave02) utilizando os
seguintes paracircmetros
usrlocaljbossjboss-as-711Finalbindomainsh
-Djbossdomainbasedir=usrlocaljbossjboss -as-
711Finalhost02
-Djbosshostdefaultconfig=host-slavexml
-Djbossdomainmasteraddress=192168238186
-Djbossbindaddressmanagement=192168238188
-Djbossbindaddress=192168238188
-Djbossservername=host-02
Observando novamente o log Domain Controller e
verifique que o Host Controller 02 se tambeacutem
conectou
JBAS010918 Registered remote slave host host02
JBoss AS 711Final Brontes
No Mod Cluster Manager em http192168238186
mod_cluster-manager jaacute estatildeo as duas instacircncias
Para testar o Balanceamento vamos fazer o deploy da
aplicaccedilatildeo SystemProps que pode ser baixada http
googlyjynK Para fazer o deploy conecte do domain
controller utilizando o CLI
[jbosslocalhost jboss]$ sudo jboss-as-711Final
binjboss-clish -c controller=1921682381869999
[domain1921682381869999 ] deploy tmp
systempropswar --server-groups=apps
A aplicaccedilatildeo foi deployada para as instacircncias do server
group apps Acesse a url do balanceador e verifique
se a aplicaccedilatildeo estaacute disponiacutevel
http192168238186systemprops
JBOSS APLICATION SERVER 7
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
27
Perceba que estamos na instance-one Entatildeo para
testarmos o funcionamento do balanceamento de carga
vamos parar a Instacircncia instance-one e quando
tentarmos um novo acesso seraacute redirecionado para o
instance-two
No CLI execute o seguinte comando para parar o
instance-one
[domain1921682381869999 ] host=host01server -
config=instance-onestop
outcome =gt success
result =gt STOPPING
Acesse novamente a aplicaccedilatildeo http192168238186
systemprops
Perceba que agora estamos no instance-two Concluiacutemos assim que o balanceamento de carga estaacute funcionando
Conclusatildeo
O JBoss AS 7 trouxe a evoluccedilatildeo arquitetural que era esperada como pode ser vista nesse artigo Carregamento de moacutedulos dinacircmico gerenciamento centralizado e tempo de startup reduzido satildeo apenas
algumas das inuacutemeras melhorias trazidas nessa versatildeo
Espera-se que a plataforma JBoss continue evoluindo
trazendo sempre mais benefiacutecios a todos que utilizam
os produtos desse ecossistema Cada membro da
comunidade tambeacutem pode fazer a sua parte seja
colaborando com artigos ou participando de
discussotildees para encontrar melhorias para a
plataforma Cabe a noacutes aceitar o convite de melhorar
cada vez mais essa tecnologia
JBOSS APLICATION SERVER 7
AUTOR Escrito por Mauricio Magnani Jr
Consultor JBoss com 6 anos de experiecircncia no mercado Trabalhou na RedHat como Engenheiro de Suporte JBoss atenden-
do clientes da Ameacuterica Latina e EUA Criador e mantenedor do blog httpsjbossdiverswordpresscom e membro ativo do
Grupo de Usuaacuterios JBoss do Brasil Hoje eacute Senior Java Software Engineer no Groupon Brasil Possui as certificaccedilotildees Red Hat
Certified JBoss Administrator on JBoss EAP 5 e JBoss EAP 6
Milhares de apli-
cativos para Web
e Mobile satildeo desenvol-
vidos a cada mecircs utili-
zando esta plataforma
como base A platafor-
ma Java mudou muito
desde seu iniacutecio e pro-
vavelmente vai conti-
nuar evoluindo nos
proacuteximos anos
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
28
Para o desenvolvimento de aplicaccedilotildees Web existem um sem
nuacutemero de frameworks gratuitas e mais ou menos bem con-
ceituadas Contudo temos vaacuterios problemas associados que
com o crescer de uma aplicaccedilatildeo podem trazer vaacuterios recuos
no seu desenvolvimento Um dos maiores eacute o oacutebvio satildeo
gratuitas e por isso mesmo o coacutedigo eacute lido por milhares de
pessoas em todo o mundo tornando as falhas de seguranccedila
bastante visiacuteveis e faacuteceis de explorar Outro grande proble-
ma eacute o facto de trazerem funcionalidades especiacuteficas em que
muitas vezes natildeo as usamos tornando-se em alguns casos
um ldquocanhatildeo para matar um mosquitordquo Pegando na aborda-
gem das correntes frameworks podemos noacutes proacuteprios cons-
truir algo soacutelido o suficiente para uma grande aplicaccedilatildeo
Vamos nesta seacuterie de trecircs artigos construir uma framework
passo-a-passo comeccedilando pelo baacutesico mas o mais importan-
te o routing
htaccess
Tirando partido do serviccedilo Apache delegamos o enclausura-
mento do nosso sistema de ficheiros agrave regras htaccess Natildeo
permitimos a listagem de ficheiros nem a execuccedilatildeo de outros
scripts PHP agrave excepccedilatildeo do indexphp sendo este o respon-
saacutevel pelo routing da framework Para garantirmos que estas
regras satildeo cumpridas e que o indexphp seja sempre chama-
do redireccionamos todos os pedidos de execuccedilatildeo de
scripts para o mesmo indexphp dando-lhe todos os argu-
mentos do URL originalmente fornecidos Desta forma o
utilizador natildeo sabe a que ficheiros ou pastas estaacute a aceder
A esta regra temos de adicionar uma excepccedilatildeo a pasta con-
tent onde temos todos os conteuacutedos como imagens ficheiros
CSS viacutedeos etc No fundo todos aqueles ficheiros que o
browser do utilizador vai descarregar Para mantermos o
enclausuramento da nossa aplicaccedilatildeo natildeo eacute aconselhado
natildeo colocarmos nessa pasta nenhum tipo de script visto que
pode ser executado arbitrariamente do exterior o contraacuterio
do que queremos
configphp
PHP Uma framework ldquofrom scratchrdquo (Parte 1) Usaremos este ficheiro como auxilio para definiccedilotildees de cami-
nhos para pastas e configuraccedilotildees por defeito
define(DS DIRECTORY_SEPARATOR)
Esta definiccedilatildeo eacute uma redundacircncia eacute definida simplesmente
por conveniecircncia na escrita do coacutedigo
define(BASE_PATHhttplocalhost)
Aqui definimos o caminho URL para a nossa aplicaccedilatildeo
define(DEFAULT_PAGEhello)
Esta eacute a nossa paacutegina por defeito caso nenhuma tenha sido
requirida
define(ROOT$_SERVER[DOCUMENT_ROOT])
Aqui eacute definido o caminho para a pasta da aplicaccedilatildeo
Uma vez definidas as configuraccedilotildees passamos agrave parte mais
importante o routing
Visto que temos todos os requests redireccionados para o
indexphp agora temos de fazer sentido dos argumentos
que satildeo passados pelo URL
Aqui separamos os argumentos em duas partes a paacutegina
que queremos aceder e os argumentos para esta paacutegina O
seguinte pedido
httplocalhosthellofoobar
resulta em
RewriteEngine on RewriteCond $1 ^(allowphp|indexphp|content) RewriteRule ^()$ indexphp$1 [L] ltFiles htaccessgt order allowdeny deny from all ltFilesgt
define(DS DIRECTORY_SEPARATOR) define(BASE_PATHhttplocalhost) define(DEFAULT_PAGEhello) define(ROOT$_SERVER[DOCUMENT_ROOT])
function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url
array (size=2) page =gt string hello (length=5) args =gt array (size=2) 0 =gt string foo (length=3) 1 =gt string bar (length=3)
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
A PROGRAMAR
29
(hellip)micro-
framework temos um
sistema de routing que
nos iraacute permitir nos
dois proacuteximos artigos
alargar os horizontes
passando a uma pro-
gramaccedilatildeo OOP e imple-
mentando MVC
De seguida encaminhamos para a paacutegina requerida
Aqui verificamos se a paacutegina que eacute pedida existe no case de
existir importamos o ficheiro caso contrario enviamos o header
de erro e terminamos a aplicaccedilatildeo
Indexphp
ROOT
Indexphp
Configphp
htaccess
Pages
Hellophp
Com esta micro-framework temos um sistema de routing que
nos iraacute permitir nos dois proacuteximos artigos alargar os horizon-
tes passando a uma programaccedilatildeo OOP e implementando
MVC Finalmente iremos implementar um pequeno driver
para MySQL e um debugger
Dependecircncias
Apache com mod_rewrite e PHP
P VS NP COMPREENDER O MAIOR PROBLEMA POR RESOLVER EM COMPUTACcedilAtildeO
function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
ltphp require_once (configphp) function routeURL() $urlArray = array() $urlArray = explode($_SERVER [REQUEST_URI]) array_shift($urlArray) $url = array() if (isset($urlArray[0]) || $urlArray[0]==) $url[page] = DEFAULT_PAGE $url[args] = array() else $url[page] = $urlArray[0] array_shift($urlArray) if(count($urlArray)gt0) $url[args] = $urlArray else $url[args] = array() return $url function callHook() $queryString = array() $url = routeURL() $page = $url[page]php if ( file_exists(pages DS $page) ) include_once(pages DS $page) else header(HTTP10 404 Not Found) exit
callHook() gt
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
COLUNAS C - Observable vs Task
Visual (Not) Basic - Operator Overloading
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
C
32
Nas ediccedilotildees anteriores vimos como transformar uma API
baseada assiacutencrona em eventos numa API baseada em ob-
servaacuteveis (observables) ou numa API baseada em tarefas
A questatildeo que se levanta eacute quando usar qual
Quando Usar Observaacuteveis
A programaccedilatildeo baseada em observaacuteveis eacute tambeacutem conheci-
da como programaccedilatildeo reativa e comeccedilou a ser usada como
alternativa a assiacutencrona baseada em eventos porque a pro-
gramaccedilatildeo assiacutencrona baseada em tarefas ainda natildeo estava
disponiacutevel (ou natildeo estava disponiacutevel em todas as platafor-
mas)
Na verdade o campo de batalha da programaccedilatildeo reativa
satildeo as correntes de eventos (event streams) Eacute aqui que a
utilizaccedilatildeo de eventos se torna tambeacutem mais natural
Uma API baseada em eventos em que o evento apenas eacute
disparado uma vez eacute na verdade uma API baseada em
chamadas de resposta (callback) O facto de ser implemen-
tada com o mecanismo de eventos da plataforma NET natildeo
faz dela uma API baseada em eventos
A existecircncia da necessidade de combinar vaacuterias correntes de
eventos e relacionaacute-los entre si eacute tambeacutem uma boa indicaccedilatildeo
para a utilizaccedilatildeo de observaacuteveis
Quando Usar Tarefas
Como o nome indica uma tarefa eacute algo que tem um iniacutecio e
um fim Assim sendo todas as API assiacutencronoas baseadas
num mecanismo de chamada de resposta (callback) satildeo
candidatadas a ser transformadas numa API assiacutencrona
baseada em tarefas Mesmo que o mecanismo de chamada
de resposta sejam eventos NET
Matriz De Aplicabilidade
Baseando-nos nas consideraccedilotildees anteriores e porque nem
sempre tudo eacute assiacutencrono chegamos agrave seguinte matriz de
aplicabilidade
Conclusatildeo
No final natildeo existe uma resposta maacutegica O que numa situa-
ccedilatildeo pode ser um observaacutevel noutra pode ser uma tarefa
Recursos
O GeoCoordinateWatcher Como Um Serviccedilo Reativo - Re-
vista PROGRAMAR - 39ordf Ediccedilatildeo - Fevereiro 2013
Trazendo Async E Await ao Serviccedilo de Contactos do Win-
dows Phone - Revista PROGRAMAR - 40ordf Ediccedilatildeo - Abril
2013
Extensotildees Reativas (Rx)
Programaccedilatildeo assiacutencrona com async e await (C e Visual
Basic)
C - OBSERVABLE VS TASK
Siacutencrono Assiacutencrono
Um uacutenico valor - Tarefa
Muacuteltiplos valo-
res
Enumeraacutevel Observaacutevel
AUTOR
Escrito por Paulo Morgado
Bacharel em Engenharia Electroacutenica e Telecomunicaccedilotildees (Sistemas Digitais) pelo Instituto Superior de Engenharia de Lisboa
e Licenciado em Engenharia Informaacutetica pela Faculdade de Ciecircncias e Tecnologia da Universidade Nova de Lisboa exerce
variadas funccedilotildees relacionadas com o desenvolvimento distribuiccedilatildeo e manutenccedilatildeo de software haacute mais de 10 anos Participa
em diversas comunidades nacionais e internacionais (pontoNETpt NetPonto SharePointPT SQLPort Portugal-a-Programar
CodeProject CodePlex etc) Pelo seu contributo para com estas comunidades a Microsoft premeia-o com o preacutemio MVP
(C) desde 2003 Eacute ainda co-autor do livro ldquoLINQ Com Crdquo da FCA httpPauloMorgadoNET - PauloMorgado
o campo de bata-
lha da programaccedilatildeo re-
ativa satildeo as correntes
de eventos (event stre-
ams)
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
VISUAL (NOT) BASIC
33
ldquoNatildeo podes somar batatas com elefantesrdquo
Frases como a anterior ou semelhantes jaacute vos passaram
por a consideraccedilatildeo em alguma altura da vossa vida Quer
tenha sido nos vossos primeiros passos a matemaacutetica ou
ainda na semana passada em qualquer implementaccedilatildeo de
software mais rebuscada algueacutem algures transmitiu dessa
forma que natildeo eacute possiacutevel operar aquelas duas variaacuteveis
De facto batatas e elefantes natildeo satildeo tipicamente operaacuteveis
a menos que a resposta de que estamos agrave procura seja dife-
rente
Saber como operar
A soluccedilatildeo da soma de batatas com elefantes reside precisa-
mente na resposta que procuramos obter
Eu posso dizer que Elefante + Batata eacute igual a 4 se for es-
pecificado que a soma de seres-vivos opera aritmeticamente
o nuacutemero de pernas do ser Natildeo posso Claro que posso
Soacute precisamos de definir que os seres-vivos satildeo operaacuteveis
assim e de que forma Eacute aqui que entra o ldquooverloadrdquo de ope-
radores
Operadores
Operadores sim Quando se falam de operadores referem-
se todos aqueles que estatildeo provavelmente a passar-vos na
cabeccedila agora tanto unaacuterios como binaacuterios mas nem todos
Unaacuterios + - Not IsTrue IsFalse CType
Binaacuterios + - amp Like Mod And Or Xor ^ ltlt
gtgt = ltgt gt lt gt= lt=
Estes operadores fazem sentido nos usos comuns onde jaacute
sabemos para que servem e que resultados vatildeo surtir
Agrave luz da especificaccedilatildeo anterior podemos afirmar com segu-
ranccedila que Elefante gt Batata porque uma batata natildeo tem
pernas e porque conhecemos o operador gt (maior que)
A implementaccedilatildeo do operador pode basear-se em qualquer
aspecto dos seus operandos mas natildeo eacute boa ideia contradi-
zer a loacutegica do operador que se estaacute a definir Por razotildees
oacutebvias natildeo eacute boa ideia por exemplo implementar overloads
de tal forma que Batata - Elefante = -4 ao mesmo tempo que
Batata gt Elefante = TRUE Natildeo faz sentido porque natildeo esta-
mos a usar o mesmo criteacuterio Se Batata ndash Elefante eacute menor
que zero a Batata deveria ser menor que o Elefante e natildeo o
contraacuterio
Natildeo eacute que seja impossiacutevel mas vai tornar o coacutedigo muito
mais difiacutecil de ler o que vai contra a facilidade do overload
de operadores
Overload
A ideia natildeo eacute inventar novos operadores O que queremos
realmente indicar eacute qual o procedimento a seguir para conse-
guir aplicar o anaacutelogo do operador para determinado tipo ou
determinados tipos Assim o operador + por exemplo teraacute
de continuar a fazer sentido na aritmeacutetica ao mesmo tempo
que faz sentido na soma de seres-vivos se tentarmos somar
nuacutemeros entra o operador aritmeacutetico se tentarmos somar
batatas com elefantes entra a nossa implementaccedilatildeo do ope-
rador
Portanto e em tom de resumo da mesma forma que defini-
mos overloads de meacutetodos tambeacutem se definem overloads
de operadores com base na sua assinatura
Jaacute chega de elefantes e batatas natildeo
Efectivamente jaacute Natildeo conveacutem esticar a analogia ateacute porque
nem todos os operadores fazem sentido com uma classe de
seres vivos As coisas comeccedilam a ficar mais claras com
exemplos de implementaccedilatildeo
Vamos considerar a seguinte classe para exemplificar
Como seraacute de esperar se tentarmos por exemplo comparar
instacircncias desta classe o Visual Basic natildeo saberaacute o que
fazer para comparar Eacute um tipo composto que compreende
OPERATOR OVERLOADING
Public Class Veiculo Public Enum TipoVeiculo AUTOMOVEL MOTO PESADO End Enum Public Enum TipoCombustivel GASOLINA GASOLEO HIBRIDO ELECTRICO GPL End Enum Public Property Tipo As TipoVeiculo Public Property Marca As String Public Property Modelo As String Public Property Cilindrada As Integer Public Property Combustivel As TipoCombustivel Public Property NumeroPortas As Short Sub New(Tipo As TipoVeiculo Marca As String Modelo As String Cilindrada As Integer Combustivel As TipoCombustivel NumeroPortas As Short) _Tipo = Tipo _Marca = Marca _Modelo = Modelo _Cilindrada = Cilindrada _Combustivel = Combustivel _NumeroPortas = NumeroPortas End Sub End Class
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
VISUAL (NOT) BASIC
34
membros que noacutes mesmos criamos e seria impossiacutevel perce-
ber automaticamente quais as caracteriacutesticas a comparar
Este coacutedigo natildeo compila com dois erros em Carro1 = Carro2
e Carro2 = Carro3
Operator = is not defined for types OperatorOverloadVeicu-
lo and OperatorOverloadVeiculo
E tem toda a razatildeo O operador igual (=) natildeo estaacute nem im-
plementado na classe nem tem nenhum overload que im-
plique uma operaccedilatildeo binaacuteria com dois tipos Veiculo
Vamos entatildeo implementar um operador para o igual (=) que
consiga determinar se estamos na presenccedila do mesmo
veiacuteculo ou natildeo Vamos considerar que a cilindrada natildeo eacute um
factor para distinguir dois carros
Basta acrescentar os seguintes meacutetodos na classe Veiculo
Algumas implementaccedilotildees de operadores implicam que se
implementem tambeacutem a sua negaccedilatildeo No caso do operador
igual (=) eacute necessaacuterio natildeo soacute especificar o que eacute consider-
ado igual mas tambeacutem o que eacute considerado diferente
Assim o coacutedigo anterior jaacute eacute correctamente compilado e
produz o seguinte output
Carro1 = Carro2 False
Carro2 = Carro3 True
O que eacute verdade Como operaccedilotildees aritmeacuteticas natildeo faziam
muito sentido com uma classe a representar um veiacuteculo
vamos considerar esta nova classe
Esta classe representa um vector tridimensional Manteacutem um
valor para X para Y e para Z Natildeo adianta realizar
operaccedilotildees aritmeacuteticas com o Vector uma vez que novamen-
te o Visual Basic natildeo saberia o que fazer com ele
Vamos entatildeo acrescentar alguns operadores
Assim jaacute eacute possiacutevel efectuar algumas operaccedilotildees com esta
classe
OPERADOR LIKE
Public Shared Operator =(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return False If V1Combustivel ltgt V2Combustivel Then Return False If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return False If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return False If V1NumeroPortas ltgt V2NumeroPortas Then Return False Return True End Operator Public Shared Operator ltgt(V1 As Veiculo V2 As Veiculo) If V1Tipo ltgt V2Tipo Then Return True If V1Combustivel ltgt V2Combustivel Then Return True If Not V1MarcaToLowerEquals (V2MarcaToLower) Then Return True If Not V1ModeloToLowerEquals (V2ModeloToLower) Then Return True If V1NumeroPortas ltgt V2NumeroPortas Then Return True Return False End Operator
Public Class Vector3 Public Property X As Decimal Public Property Y As Decimal Public Property Z As Decimal Sub New(X As Decimal Y As Decimal Z As Decimal) _X = X _Y = Y _Z = Z End Sub Public Overrides Function ToString() As String Return StringFormat((012) _X _Y _Z) End Function End Class
Public Shared Operator +(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X + V1X V2Y + V1Y V2Z + V1Z) End Operator Public Shared Operator -(V1 As Vector3 V2 As Vector3) Return New Vector3(V2X - V1X V2Y - V1Y V2Z - V1Z) End Operator Public Shared Operator (V1 As Vector3 V2 As Vector3) Return (V2X V1X) + (V2Y V1Y) + (V2Z V1Z) End Operator Public Shared Operator (V1 As Vector3 E1 As Decimal) Return New Vector3(E1 V1X E1 V1Y E1 V1Z) End Operator Public Shared Operator amp(S1 As String V1 As Vector3) Return S1 amp V1ToString End Operator
Dim V1 As New Vector3(3 2 1) Dim V2 As New Vector3(1 2 3) DebugWriteLine(Adiccedilatildeo amp (V1 + V2)) DebugWriteLine(Subtraccedilatildeo amp (V1 - V2)) DebugWriteLine(Produto escalar amp (V1 V2)) DebugWriteLine(Multiplicaccedilatildeo com escalar amp (V2 3))
Dim Carro1 As New Veiculo(AUTOMOVEL Ford Ka 1249 GASOLINA 3) Dim Carro2 As New Veiculo(AUTOMOVEL Ford Ka 1250 GASOLEO 3) Dim Carro3 As New Veiculo(AUTOMOVEL Ford Ka 1251 GASOLEO 3) DebugWriteLine(Carro1 = Carro2 amp (Carro1 = Carro2)) DebugWriteLine(Carro2 = Carro3 amp (Carro2 = Carro3))
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
VISUAL (NOT) BASIC
35
O que produz
Adiccedilatildeo (444)
Subtraccedilatildeo (-202)
Produto escalar 10
Multiplicaccedilatildeo com escalar (369)
Foi necessaacuterio especificar o operador de concatenaccedilatildeo para
que o Visual Basic saiba como tratar a concatenaccedilatildeo de uma
String com o resultado de uma outra operaccedilatildeo com a mesma
classe
Neste caso estamos apenas a concatenar a String com a
representaccedilatildeo String da classe que definimos anteriormen-
te Ao analisar os operadores podemos verificar que existem
dois overloads para a multiplicaccedilatildeo
Um implica dois vectores e o outro um vector e um decimal
A nossa implementaccedilatildeo dita que se forem fornecidos dois
vectores o resultado seraacute o produto escalar dos dois vec-
tores
Se for fornecido apenas um vector e um valor escalar o re-
sultado seraacute outro vector que representa o produto desse
vector com um escalar
Existe com certeza aplicaccedilotildees matemaacuteticas (e natildeo soacute) mais
interessantes mas as apresentadas demonstram a facilidade
com que implementamos os nossos proacuteprios comportamen-
tos de operadores
Conclusatildeo
Operator overloading permite uma notaccedilatildeo mais proacutexima do
domiacutenio alvo o que promove a legibilidade e dissipa duacutevidas
de interpretaccedilatildeo Esta eacute a sua maior vantagem
No entanto se as implementaccedilotildees natildeo forem de encontro ao
sentido natural dos operadores o efeito poderaacute ser o perfeito
contraacuterio
Eacute um caso tiacutepico de melhor amigo ou pior inimigo Natildeo haacute
meio-termo
OPERADOR LIKE
AUTOR
Escrito por Seacutergio Ribeiro
Curioso e autodidata com uma enorme paixatildeo por tecnologias de informaccedilatildeo e uma saudaacutevel relaccedilatildeo com a NET Fra-
mework Moderador global na comunidade PortugalProgramar desde Setembro de 2009 Alguns frutos do seu trabalho
podem ser encontrados em httpwwwsergioribeirocom
Operator overlo-
ading permite uma no-
taccedilatildeo mais proacutexima do
domiacutenio alvo
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
Media Partners da Revista PROGRAMAR
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
EVENTOS
37
No passado dia 25 de Maio de 2013 realizou-se na Microsoft
Portugal no Parque das Naccedilotildees o 1ordm evento presencial da
comunidade Portugal a Programar Ainda antes das 9h come-
ccedilaram a chegar os participantes crescia o entusiasmo envolto
em todo o evento e pouco a pouco todos noacutes fomos dando
cara aos nicks a que nos habituaacutemos ao longo dos anos
Pontualmente a organizaccedilatildeo deu iniacutecio ao evento PROGRA-
MAR 2013 com Jorge Paulino David Pintassilgo e Rui Gon-
ccedilalves a abrir o evento Brevemente foi-nos dada a conhecer
a comunidade PP assim como os quatro pontos-chave que
a caracterizam
Foacuterum PP
Wiki
Portal de Downloads
Revista Programar
Parafraseando o anfitriatildeo Jorge Paulino ldquoeste foi um projeto
que se iniciou a 28 de Maio de 2005 para dar resposta agrave ne-
cessidade de partilhar informaccedilatildeo e experiecircncias nesta aacutereardquo
Apoacutes a apresentaccedilatildeo do evento e da comunidade seguiu-se
um discurso inspirador de um dos oradores Rui Delgado
acerca da necessidade de se empreender em Portugal
Com o limite de inscriccedilotildees a ser atingido em apenas trecircs dias
o 1ordm evento do PP contou com a presenccedila de 19 oradores
voluntaacuterios que deram origem a 18 apresentaccedilotildees teacutecnicas e
a 2 workshops praacuteticos Cerca de 250 participantes estiveram
presentes no edifiacutecio da Microsoft Lisbon Experience
EVENTO PROGRAMAR 2013
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
EVENTOS
38
Pelas diversas salas do evento partilharam-se experiecircncias e
conhecimento As apresentaccedilotildees decorreram 3 em simultacirc-
neo e foram as seguintes
Apresentaccedilatildeo das novidades de Java EE 7 (Ernest
Duarte)
As novidades do C 50 (Paulo Morgado)
ASPNET SignalR ndash Comunicaccedilatildeo em real-time sim-
ples e para todo mundo (Glauco Godoi)
Conquistar o mundo com aplicaccedilotildees feitas agrave velocida-
de da luz (Ricardo Marques)
CRM Como escolher De raiz ou sistema jaacute desen-
volvido (Pedro Azevedo)
Desenvolvimento de Aplicaccedilotildees em Windows Phone 8
(Nuno Silva)
Desenvolvimento em SharePoint por onde comeccedilar
(Rodrigo Pinto)
Desenvolvimento raacutepido de siacutetios web com personali-
zaccedilatildeo de Joomla ( Rui Guimaratildees )
DMVs ndash Conhece o teu SQL Server (Vitor Pombeiro)
Empreendedorismo em TI (Fernando Martins)
HTML5 e CSS3 ndash raacutepido e eficaz para o presente
(Seacutergio Laranjeira)
Introduccedilatildeo ao Cloud Computing e ao Windows Azure
(Vitor Tomaz)
Microsoft Kinect SDK (Rui Simatildeo)
Plataforma de desenvolvimento para Windows Store
Apps (Nuno Silva)
Powershell agrave minha maneira (Bruno Lopes)
O desenvolvimento de aplicaccedilotildees moacuteveis antes da 1ordf
linha de coacutedigo (Alberto Silva)
SEO ndash A importacircncia do Search Engine Optimization
(Miguel Lobato)
SQL Server ndash Performance e Tunning (Pedro Martins)
E ainda os workshops praacuteticos
Workshop ndash Integraccedilatildeo de CRM Dynamics com Java
e NET (Pedro Azevedo)
Workshop ndash Web em Realtime (Seacutergio Costa)
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
EVENTOS
39
Durante o decorrer das sessotildees houve ainda oferta de brindes
(gentilmente oferecidos pelos patrocinadores) aos participan-
tes
Outro ponto que marcou este PROGRAMAR 2013 foi o con-
curso de aplicaccedilotildees Windows Phone e Windows 8 vencido
por Jorge Costa com o jogo ldquoLittle Bitsrdquo sendo o segundo
lugar atribuiacutedo a Mauro Castro pela aplicaccedilatildeo ldquoPortugalrsquos Eve-
ningsrdquo
Houve ainda demostraccedilotildees do Microsoft Kinect (Rui Simatildeo) e
do Leap Motion (Diniz Vieira) a todos os participantes interes-
sados e todo o dia foi passado num espiacuterito descontraiacutedo e
animado aumentando assim os laccedilos entre toda a comunida-
de
A toda a organizaccedilatildeo e a todos os oradores envolvidos dei-
xamos um agradecimento especial agradecendo tambeacutem a
todos os patrocinadores nomeadamente a Microsoft Portugal
ESET Portugal FCA Editora Rumos e Truewind-Chiron Nun-
ca deixando de referir tambeacutem os Media Parters que ajuda-
ram a toda a divulgaccedilatildeo deste evento
A todos os elementos da comunidade que fazem com que a
Portugal-a-Programar seja cada vez mais conhecida no nosso
paiacutes e aleacutem-fronteiras a todos deixamos um ldquoMuito Obriga-
dordquo relembrando mais uma vez que este eacute um projeto de to-
dos e para todos e que a mais pequena accedilatildeo pode fazer a
diferenccedila
Eacute com satisfaccedilatildeo e orgulho que podemos afirmar que o 1ordm
Evento Presencial do PP foi um sucesso pois mesmo apoacutes
as sessotildees terem terminado houve ainda quem se mantives-
se no local partilhando experiecircncias de um dia cheio de emo-
ccedilotildees
E citando um dos oradores do evento Rui Delgado ldquoOh Yes
Muito Bomrdquohellip Venha o PROGRAMAR 2014
Paacutegina do evento httpeventoportugal-a-programarpt
(hellip) a mais peque-
na accedilatildeo pode fazer a
diferenccedila
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
Anaacutelises Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
C 50 com Visual Studio 2012
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
Review
41
Tiacutetulo Android ndash Introduccedilatildeo ao Desenvol-
vimento de Aplicaccedilotildees
Autor Ricardo Queiroacutes
Editora FCA
Paacuteginas 224
ISBN 978-972-722-763-1
O Android tornou-se na plataforma de dispositivos moacuteveis
mais usada no mundo e como tal existe um interesse cres-
cente dos programadores em criarem soluccedilotildees para esse
mercado Para quem queira dar aquele 1ordm passo no desen-
volvimento de aplicaccedilatildeo em Android o livro ldquoAndroid - Intro-
duccedilatildeo ao desenvolvimento de aplicaccedilotildeesrdquo de Ricardo Quei-
roacutes eacute uma boa escolha
Conteacutem passo a passo desde a configuraccedilatildeo do ambiente
de desenvolvimento ateacute agrave concepccedilatildeo de uma aplicaccedilatildeo para
Android na sua iacutentegra Destaca exemplos muito uacuteteis que
podem ser reaproveitados noutra aplicaccedilatildeo pois contempla
o desenho de uma interface graacutefica a gestatildeo de dados da
aplicaccedilatildeo atraveacutes de gestatildeo de ficheiros ou bases de dados
utilizaccedilatildeo de APIs de localizaccedilatildeo mapas e sensores e a
criaccedilatildeo do jogo do galo
Durante a sua leitura pode-se constatar que eacute um livro rico
em imagens explicativas e exemplificativas que nos ajudam
a perceber o que devemos fazer e o que devemos alcanccedilar
com a construccedilatildeo de todo o coacutedigo escrito
Infelizmente jaacute eacute habitual que nos sejam apresentados os
tiacutepicos tons acinzentados das ilustraccedilotildees e a ausecircncia de
qualquer tipo de realce de sintaxe no coacutedigo-exemplo o que
por vezes pode-se tornar cansativo ao olhar
Um factor alheio ao autor do livro mas que a editora em
causa deveria ter em consideraccedilatildeo por forma a facilitar a
leitura
ldquoAndroid ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildeesrdquo
de Ricardo Queiroacutes eacute um bom livro para quem jaacute tenha algu-
ma experiecircncia em programaccedilatildeo Java e que queira explorar
as potencialidades do Android
Android ndash Introduccedilatildeo ao Desenvolvimento de Aplicaccedilotildees
AUTOR
Escrito por Joseacute Marques
Natural de Coruche formado em Gestatildeo e programaccedilatildeo de sistemas informaacuteticos e teacutecnico especialista de gestatildeo de redes
Membro do PP desde Abril de 2013
(hellip) destaca exem-
plos muito uacuteteis que
podem ser reaproveita-
dos noutra aplicaccedilatildeo
(hellip)
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
Review
42
Tiacutetulo C 50 com Visual Studio 2012
Autor Henrique Loureiro
Editora FCA
Paacuteginas 608
ISBN 978-972-722-752-5
Elementos de programaccedilatildeo
Abordam-se os temas de programaccedilatildeo mais elementar com
referecircncias agrave programaccedilatildeo iterativa passando pela orientada
a objecto O texto estaacute nitidamente orientado para um puacutebli-
co que tem noccedilotildees baacutesicas de programaccedilatildeo explicando a
loacutegica de uma funccedilatildeo ateacute agrave heranccedila de classes Tenta de
uma forma sucinta demonstrar na praacutetica ou seja com code-
snipets como construir de uma forma coerente uma aplica-
ccedilatildeo em C recorrendo ao Visual Studio
Usabilidade - Eacute tambeacutem abordada a importacircncia da usabili-
dade do user-interface numa qualquer aplicaccedilatildeo Satildeo de-
monstrados os conceitos baacutesicos de Interaccedilatildeo Homem-
Maacutequina e como aplica-los aos Windows Forms Este tema
serve de ponte para um tema bem mais extensivo Windows
Forms e programaccedilatildeo orientada agrave GUI detalhando alguns
dos componentes que a NET traz buit-in Explica a funciona-
lidade e a interecccedilatildeo com os componentes mais genericas e
mais usuais para uma aplicaccedilatildeo que se use de um sistema
de janelas como GUI A explicaccedilatildeo embora limitada a pou-
cos elementos eacute bastante completa dando ecircnfase aos
events associados a este tipo de modulos explicando assim
a programaccedilatildeo assiacutencrona em Windows Forms
Modelaccedilatildeo de dados e LINQ - Temos uma explicaccedilatildeo
bottom-to-top da noccedilatildeo de modelaccedilatildeo de dados Sendo nes-
te tema um pouco mais extenso explicando toda a noccedilatildeo da
Modelaccedilatildeo e das Formas Normais Recorre-se ao SQL Ser-
ver para fazer toda a explicaccedilatildeo na praacutetica dos conceitos
sendo bastante ilustrativo com diagramas e screenshots de
um processo de criaccedilatildeo e normalizaccedilatildeo de uma base de
dados Tendo a base de dados criada no SQL Sever passa
agrave explicaccedilatildeo do que eacute o LINQ e sua sintaxe em C Aqui eacute
feita mais uma vez a ponte com Windows Froms utilizando
componentes anteriormente demonstrados mapeando tabe-
las e manipulaccedilotildees baacutesicas Outra vez grande ecircnfase aos
events
C 50 com Visual Studio 2012
AUTOR
Escrito por Ricardo Perre
Estuda Eng da Computaccedilatildeo Graacutefica e Multimeacutedia no Instituto Politeacutecnico de Viana do Castelo eacute programador focado em
web tendo bastante experiencia em PHP Foca-se em aplicaccedilotildees e escalonamento das mesmas Caso se resumisse seria
descobrir inventar e fazer
Sistema Operativo e Input Output Comeccedilando pela base
expotildee passo-a-passo como manipular as Tarefas e Proces-
sos do Windows explicando tambeacutem como colmatar as dife-
renccedilas entre versotildees do sistema operativo Daacute exemplos de
como manipular ficheiros de texto dando uma introduccedilatildeo agrave
encriptaccedilatildeo que vem built-in na NET Mostra como se usa o
Graphics da NET explicando os seus conceitos base dese-
nho e animaccedilatildeo chegando a agrave impressatildeo destes mesmos
graacuteficos desenhados Com este tema aprofunda a explicaccedilatildeo
dos Windows Forms fazendo a ponte para WPF
WPF XML e XAML - Tendo explicado Windows Forms pas-
sa agrave explicaccedilatildeo das diferenccedilas e semelhanccedilas do mesmo
com WPF dando tambeacutem a sua opiniatildeo sobre o futuro das
mesmas dando a entender que WPF iraacute substituir Windows
Forms eventualmente Para o efeito comeccedila por explicar o
que eacute XML dando exemplos de aplicaccedilotildees em C NET para
manipulaccedilatildeo deste tipo de dados passando para um niacutevel
acima o XAML Exemplo atraacutes de exemplo demonstra como
usar as potencialidade do WPF mostrando como usar
Graphics com a sintaxe XAML incluindo animaccedilatildeo
WebViews views modelares e navegaccedilatildeo entre diferentes
ecratildes numa soacute janela
Integraccedilatildeo com Microsoft Office e Windows Store - Eacute
tambeacutem mostrada a facilidade com que se integra uma apli-
caccedilatildeo feita em C comas a principais ferramentas do MS
Office Word Excel PowerPoint Access e Outlook Demons-
tra agrave semelhanccedila de outras ferramentas Microsoft que haacute
sempre uma Class buit-in na NET para criar e manipular
este tipo de documentos da famiacutelia Microsoft No caso da
Windows Store daacute exemplos vocacionados para Windows 8
e como tirar partido do conceito visual Metro e seus layouts
geneacutericos fazendo aplicaccedilotildees como uma calculadora e uma
WebView
Opiniatildeo pessoal - Na minha opiniatildeo este livro eacute ideal no
mundo acadeacutemico servindo perfeitamente como suporte a
um professor para leccionar uma cadeira de programaccedilatildeo
OOP ou ateacute para programaccedilatildeo 2D Tambeacutem natildeo acharia
descabido servir como suporte a um aluno para evoluir da
programaccedilatildeo iterativa para OOP visto que o livro estaacute repleto
de exemplos e exerciacutecios tendo ateacute no final 3 projectos from
scratch de aplicaccedilotildees completas explicando todo o processo
loacutegico na elaboraccedilatildeo de todos os aspectos da mesma de
base de dados normalizada interacccedilatildeo Homem-Maacutequina a
comercializaccedilatildeo na Windows Store
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
COMUNIDADES Comunidade NetPonto mdash Telerik RadControls - Raacutepida implementaccedilatildeo da
paacutegina Sobre para Windows Phone Apps
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
COMUNIDADE NETPONTO
44
httpnetpontoorg
Introduccedilatildeo
A Telerik RadControls disponibiliza um projeto template que
permite escolher um conjunto de funcionalidade que seratildeo
incluida no projeto aquando da sua criaccedilatildeo A paacutegina
Sobre eacute uma delas
Truque A Telerik oferece uma versatildeo de teste que permite
explorar os controlos O programa Nokia Premium Developer
permite aos seus membros terem uma licenccedila vaacutelida destes
Ecratildes
Para compreender melhor o que iremos fazer primeiro
iremos criar a paacutegina Sobre que eacute fornecida pelo projeto
template da Telerik cujo resultado eacute
Paacutegina Sobre gerada por omissatildeo pelo projeto template da Telerik
Depois iremos customizar a paacutegina para que esta tenha a
sua proacutepria informaccedilatildeo o resultado seraacute
Customizaccedilatildeo da paacutegina Sobre
Criaccedilatildeo do projeto
Para comeccedilar o projeto eacute recomendado que se instale os
Telerik RadControls (versatildeo de teste)
1 Seleccedilatildeo do projeto que se iraacute criar
Criando o projeto
2 A Telerik tem uma interface para a seleccedilatildeo inicial
Selecione a plataforma e referecircncias da Telerik que
queremos
Selecionando a plataforma e as referecircncias
3 Seleccedilatildeo da funcionalidade paacutegina Sobre
Quando o projeto eacute criado iremos obter a paacutegina por omissatildeo
podemos ver nos ecratildes
TELERIK RADCONTROLS - RAacutePIDA IMPLEMENTACcedilAtildeO DA PAacuteGINA SOBRE PARA WINDOWS PHONE APPS
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
COMUNIDADE NETPONTO
45
httpnetpontoorg
O resultado da estrutura do projeto seraacute
Customizaccedilatildeo
Comecemos por analisar a paacutegina Home Page
Cujo XAML eacute
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleMainPage xmlns=http schemasmicrosoftcomwinfx2006xaml presentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg
markup-compatibility2006 xmlnsphone= clr-namespaceMicrosoftPhone Controlsassembly=MicrosoftPhone xmlnsshell= clr-namespaceMicrosoft PhoneShellassembly=MicrosoftPhone FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation=Portrait SupportedOrientations=Portrait shellSystemTrayIsVisible=True mcIgnorable=dgt lt-- LayoutRoot is the root grid where all page content is placed --gt ltGrid xName=LayoutRoot Background=Transparentgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt lt-- LOCALIZATION NOTE To localize the displayed strings copy their val-ues to appropriately named keys in the apps neutral language resource file (AppResourcesresx) then replace the hard-coded text value between the attributes quotation marks with the binding clause whose path points to that string name For example Text=Binding Path=LocalizedResourcesApplicationTitle Source=StaticResource LocalizedStrings This binding points to the templates string resource named ApplicationTitle Adding supported languages in the Project Properties tab will create a new resx file per language that can
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
COMUNIDADE NETPONTO
46
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
carry the translated values of your UI strings The binding in these examples will cause the value of the attributes to be drawn from the resx file that matches the CurrentUICulture of the app at run time --gt lt-- TitlePanel contains the name of the application and page title --gt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=MY APPLICATION gt ltTextBlock xName=PageTitle Margin=9-700 Style=StaticResource PhoneTextTitle1Style Text=page name gt ltStackPanelgt lt-- ContentPanel - place additional content here --gt ltGrid xName=ContentPanel GridRow=1 Margin=120120gt ltListBox Margin=140-120 FontFamily=StaticResource PhoneFontFamilySemiLight FontSize=StaticResource PhoneFontSizeExtraLargegt ltListBoxItem Content=About Tap=GoToAbout gt ltListBoxgt ltGridgt lt-- Uncomment to see an alignment grid to help ensure your controls are aligned on common bound-aries The image has a top margin of -32px to account for the System Tray Set this to 0 (or remove the margin altogether) if the System Tray is hidden Before shipping remove this XAML and the image itself--gt lt-- ltImage Source=AssetsAlignmentGridpng VerticalAlignment=Top Height=800 Width=480 Margin=0 GridRow=0 GridRowSpan=2 IsHit-TestVisible=False gt --gt ltGridgt lt-- Sample code showing usage of ApplicationBar -
-gt ltphonePhoneApplicationPageApplicationBargt ltshellApplicationBar IsMenuEnabled=True IsVisible=Truegt ltshellApplicationBarIconButton IconUri=Imagesappbar_button1png Text=Button 1 gt ltshellApplicationBarIconButton IconUri=Imagesappbar_button2png Text=Button 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBarMenuItem Text=MenuItem 1 gt ltshellApplicationBarMenuItem Text=MenuItem 2 gt ltshellApplicationBarMenuItemsgt ltshellApplicationBargt ltphonePhoneApplicationPageApplicationBargt ltphonePhoneApplicationPagegt Para navegar para a paacutegina Sobre eacute necessaacuterio clicar na palavra About (tap gesture) o coacutedigo referente eacute ltListBoxItem Content=About Tap=GoToAbout gt E em code behind iremos ter ltsummarygt Navigates to about page ltsummarygt private void GoToAbout(object sender GestureEventArgs e) thisNavigationServiceNavigate(new Uri(Aboutxaml UriKindRelativeOrAbsolute)) Por fim a paacutegina AboutPage seraacute O coacutedigo XAML seraacute ltphonePhoneApplicationPage xClass=NokiaDevRadControlsSampleAbout xmlns=httpschemasmicrosoftcomwinfx2006xamlpresentation xmlnsx=http schemasmicrosoftcomwinfx2006xaml xmlnsd=http schemasmicrosoftcomexpressionblend2008 xmlnsmc=http schemasopenxmlformatsorg markup-compatibility2006 xmlnsphone=clr-namespace MicrosoftPhoneControlsassembly=MicrosoftPhone xmlnsshell=clr-namespace
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
COMUNIDADE NETPONTO
47
httpnetpontoorg
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
E o code behind
MicrosoftPhoneShellassembly=MicrosoftPhone xmlnsviewModels=clr-namespace NokiaDevRadControlsSampleViewModels Name=Root FontFamily= StaticResource PhoneFontFamilyNormal FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneForegroundBrush Orientation= Portrait SupportedOrientations=Portrait dDesignHeight=768 dDesignWidth=480 shellSystemTrayIsVisible=True mcIgnorable=dgt ltGrid xName=LayoutRoot Background=Transparentgt ltGridDataContextgt ltviewModelsCommandSampleViewModel gt ltGridDataContextgt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height= gt ltGridRowDefinitionsgt ltStackPanel xName=TitlePanel GridRow=0 Margin=1217028gt ltTextBlock xName=ApplicationTitle Style=StaticResource PhoneTextNormalStyle Text=APP TITLE gt ltTextBlock xName=PageTitle Margin=9-700 Style= StaticResource PhoneTextTitle1Style Text=about gt ltStackPanelgt ltGrid xName=ContentPanel GridRowSpan=2 Margin=12160121gt ltGridRowDefinitionsgt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition Height=Auto gt ltRowDefinition gt ltGridRowDefinitionsgt ltStackPanelgt ltTextBlock Margin=120120 FontFamily= StaticResource PhoneFontFamilySemiBold FontSize= StaticResource PhoneFontSizeLarge Text=Binding ApplicationName ElementName=Root gt ltStackPanel Orientation=Horizontalgt ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Version number gt
ltTextBlock Margin=120120 FontSize= StaticResource PhoneFontSizeNormal Text=Binding Version ElementName =Root gt ltStackPanelgt ltStackPanelgt ltTextBlock GridRow=1 Margin=12241224 FontSize=StaticResource PhoneFontSizeNormal Foreground=StaticResource PhoneSubtleBrush TextWrapping=Wrapgt This application show an About page sample for Windows Phone applications ltLineBreak gt See more about it please see the following referenceampquot ltTextBlockgt ltHyperlinkButton GridRow=2 Margin=01200 HorizontalAlignment=Left Command=Binding SendAnEmailCommand Content=technical supportfeedback email FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltHyperlinkButton GridRow=3 Margin=01200 HorizontalAlignment=Left Command=Binding RateThisAppCommand Content=rate this app FontSize= StaticResource PhoneFontSizeNormal Foreground= StaticResource PhoneAccentBrush gt ltStackPanel GridRow=4 Margin=1201250 VerticalAlignment= Bottomgt ltImage HorizontalAlignment=Left Source=Images CompanyLogopng Stretch=None gt ltTextBlock Margin=01200 FontSize= StaticResource PhoneFontSizeNormal Text=Copyright (c) 2013 Nokia Developer Wiki gt ltTextBlock FontSize= StaticResource PhoneFontSizeNormal Text=Nokia gt ltStackPanelgt ltGridgt ltGridgt ltphonePhoneApplicationPagegt
public partial class About INotifyPropertyChanged
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
COMUNIDADE NETPONTO
48
httpnetpontoorg
Nota O exemplo natildeo implementa o padratildeo MVVM mas
poderia
Usa a classe ApplicationManifest do (Cimbalino toolkit - cujo
coacutedigo fornte eacute este)
Usa a classe SendAnEmailCommand que eacute a implementaccedilatildeo
do ICommand e tem como finalidade enviar emails Sendo
utilizado na opccedilatildeo de suporte feedback
Usa a classe RateThisAppCommand que eacute a implementaccedilatildeo
do ICommand e serve para avaliar a aplicaccedilatildeo
Truque Se pretende um exemplo mais avanccedilado consulte o
artigo Paacutegina avanccedilada Sobre para aplicaccedilotildees de Windows
Phone
Referecircncias
Online Help ou download CHM (ZIP 14MB) ()
Telerik Examples - Windows Phone Application ()
Telerik RadControls for Windows Phone ()
Join Nokia Premium Developer Program and get RadControls
for free ()
() Artigos disponiacuteveis apenas em Inglecircs
Em conclusatildeo podemos concluir que existe vaacuterias formas de
implementar numa aplicaccedilatildeo da Windows Phone uma
paacutegina ldquoSobrerdquo ou ldquoAcercardquo sendo um processo que se pode
minimizar e enriquece a aplicaccedilatildeo
Este artigo foi originalmente escrito para a comunidade
Nokia Developer mais especificamente para a Wiki Paacutegina
Acerca de para aplicaccedilotildees de Windows Phone
PAacuteGINA AVANCcedilADA ldquoSOBRErdquo PARA APLICACcedilOtildeES DE WINDOWS PHONE
ltsummarygt The application manifest ltsummarygt private readonly ApplicationManifest _applicationManifest ltsummarygt Initializes a new instance of the ltsee cref=Aboutgt class ltsummarygt public About() InitializeComponent() class that helps to get the application name and version (that is defined in manifest) var applicationManifestService = new ApplicationManifestService() _applicationManifest = applicationManifestService GetApplicationManifest() ltsummarygt The property changed ltsummarygt public event PropertyChangedEventHandler PropertyChanged ltsummarygt Gets the application name ltsummarygt public string ApplicationName get if (_applicationManifest = null) return _applicationManifestAppTitle return ND ltsummarygt Gets the version ltsummarygt public string Version get if (_applicationManifest = null) return _applicationManifestAppVersion return ND ltsummarygt
The on property changed ltsummarygt ltparam name=propertyNamegt The property name ltparamgt protected virtual void OnPropertyChanged ([CallerMemberName] string propertyName = null) var handler = PropertyChanged if (handler = null) handler(this new PropertyChangedEventArgs(propertyName))
AUTOR
Escrito Por Sara Silva
eacute licenciada em Matemaacutetica ndash Especialidade em Computaccedilatildeo pela Universidade de Coimbra e eacute Microsoft Certified Pro-
fissional Developer Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps O
seu Blog eacute wwwsaramgsilvacom e o twitter eacute saramgsilva
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
No Code Game Salad
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
No Code
50
ldquoNuma altura em que as aplicaccedilotildees estatildeo a dominar em
forccedila torna-se imperativo saber programarhelliprdquo E o leitor
tambeacutem tem esta opiniatildeo
Ora neste artigo esta eacute uma ideia que vamos deixar por
terra Se o leitor eacute algueacutem que gosta e se interessa pelo
mundo dos pequenos jogos e por novas tecnologias mas que
natildeo se sente agrave vontade no mundo da programaccedilatildeo pode (e
deve) experimentar o GameSalad Mas por outro lado
mesmo sendo um programador experiente o uso desta
ferramenta pode tambeacutem ajudar bastante
A GameSalad Inc eacute uma empresa norte-americana que
desenvolve ferramentas web para a criaccedilatildeo de pequenos
jogos Fundada em 2007 com o nome de Gendai Games em
2009 lanccedilou o GameSalad Creator e em 2010 mudou
oficialmente o seu nome passando chamar-se GameSalad
O importante para os criadores desta tecnologia eacute a
conceccedilatildeo de uma ideia O Game Salad Creator eacute
principalmente direcionado aos utilizadores que natildeo tecircm
bases em programaccedilatildeo permitindo que qualquer pessoa
possa fazer o seu proacuteprio jogo 2D para plataformas moacuteveis
IOS Android ou jogos HTLM5 para browsers Com uma
interface limpa e relativamente simples este software utiliza
o sistema ldquodrag-and-droprdquo para desenvolver os seus jogos
ou seja desde que tenhamos uma ideia em mente podemos
facilmente pocirc-la em praacutetica arrastando os componentes da
mesma para o ldquopalco de jogordquo
Assim facilmente o leitor pode definir as imagens de fundo
das vaacuterias cenas que compotildeem o jogo e todos os
intervenientes dessas cenas satildeo chamados ldquoAtoresrdquo em que
o comportamento destes ldquoAtoresrdquo eacute definido por regras de
jogo (eventos) que o proacuteprio utilizador define Eacute tudo uma
questatildeo de loacutegica e eacute o utilizador que define essa loacutegica Por
exemplo podemos definir eventos especiacuteficos como colisotildees
e definir o que o ldquoatorrdquo deve fazer quando ocorre uma
colisatildeo isto eacute se deve mudar de rumo e perder pontos ou se
deve ser destruiacutedo perdendo uma vida por exemplo Tudo
se baseia na nossa escolha
Podemos tambeacutem adicionar a banda sonora a nosso gosto e
para verificar o comportamento real da nossa aplicaccedilatildeo
basta-nos apenas recorrer ao simulador que o GameSalad
Creator nos disponibiliza Natildeo precisamos de ter o
equipamento real para o qual estamos a projetar o nosso
jogo
O site principal deste projeto wwwgamesaladcom em pouco
tempo atingiu milhares de utilizadores um pouco por todo o
mundo Inicialmente projetado para desenvolver aplicaccedilotildees
apenas para dispositivos Apple hoje em dia eacute tambeacutem
possiacutevel fazer o download da versatildeo Windows A versatildeo
base eacute gratuita e permite a qualquer interessado publicar os
seus jogos para a versatildeo web e para a versatildeo MAC Caso
prefira a versatildeo paga o GameSalad Creator Pro permite tudo
isto e tambeacutem publicar os seus projetos para a plataforma
Android e para o Windows 8 aleacutem de outros extras Caso
opte por ter uma conta premium pode ainda publicar no
mercado de aplicaccedilotildees escolhendo se quer disponibilizar
gratuitamente o seu jogo ou natildeo Caso opte disponibilizar
uma versatildeo paga do jogo que desenvolveu o utilizador tem
direito a 70 do ganho obtido pelo seu jogo
Este projeto tem tambeacutem atraveacutes do proacuteprio site uma grande
comunidade de utilizadores que partilham ideias e
experiecircncias ajudando-se mutuamente em vaacuterios projetos
Tem uma ideia para um jogo Entatildeo estaacute na altura de a por
em praacutetica Saber programar deixou de ser um requisito com
a ajuda do GameSalad Creator aproveite e decirc largas agrave
imaginaccedilatildeo
Game Salad
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco licenciou-se em Engenharia Informaacutetica pela Universidade da Beira Interior Membro do PP
desde Janeiro de 2010
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
Elege o melhor artigo desta ediccedilatildeo
Revista PROGRAMAR httptinyccProgramarED41_V
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
No Code
52
Esta foi a aplicaccedilatildeo vencedora do concurso de aplicaccedilotildees
que se realizou no 1ordm Evento Presencial da Comunidade
Portugal-a-Programar Trata-se de um jogo para Windows
Phone 7x e 8 bastante interessante e ateacute ldquovicianterdquo para
quem gosta de jogos do tipo puzzle
Os pequenos Bits estatildeo em perigo e soacute vocecirc pode ajudaacute-los
Bits satildeo uma espeacutecie muito especial de aves encontradas
em uma ilha remota E eles precisam chegar ao seu ninho
a fim de criar seus filhos Mas os bits das Trevas estatildeo com
ciuacutemes e vatildeo tentar tudo ao seu alcance para impedir os Bits
de chegar ao ninho
Bits eacute um jogo de quebra-cabeccedilas fantaacutestico onde vocecirc tem
de combinar habilidade com sorte para ajudar os Bits a
sobreviver Combine trecircs Bits da mesma cor para ganhar
pontos enquanto os Bits prestos ldquoevilrdquo tentam detecirc-los Os
ldquoAnjos Bitsrdquo (brancos) podem salvar os Bits de cor destruindo
os Bits Pretos proacuteximos
PROJECTO EM DESTAQUE NA COMUNIDADE PP LITTLE BITS
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
PASSATEMPO
DESENVOLVIMENTO
WINDOWS 8
A comunidade Portugal a Programar com o apoio da Microsoft estaacute a criar um passatempo de desen-
volvimento de aplicaccedilotildees para Windows 8 exclusivamente para membros registados na comunidade
Desenvolve uma ou mais aplicaccedilotildees para o Windows 8 e ganha fantaacutesticos preacutemios
1 MOCHILA APP ME UP PARA TODOS os que publiquem uma App na Windows 8 Store
2 TELEFONES NOKIA LUMIA 820 (Dev Edition) para os primeiros 2 a publicarem 3 Apps na
Windows 8 Store
1 TABLET ASUS ME400C para a melhor App publicada e 1 NOKIA LUMIA 820 para a segun-
da melhor aplicaccedilatildeo
Satildeo vaacutelidas apenas aplicaccedilotildees publicadas entre 1 e 30 de Junho de 2013
Todos os estudantes tecircm acesso gratuito agrave Windows Store atraveacutes do programa DreamSpark e por is-
so natildeo haacute motivos para natildeo concorrer Mais informaccedilotildees e candidaturas atraveacutes do email passatem-
posportugal-a-programarpt
Alguns recursos interessantes para iniciar
Windows 8 Store Apps - Do sonho agrave realidade (revista PROGRAMAR)
Microsoft DreamSpark Windows 8 Apps development
Windows App (MSDN)
O staff da comunidade seraacute o juacuteri que iraacute escolher a melhor aplicaccedilatildeo a concurso e o vencedor seraacute divul-
gado na primeira quinzena de Julho Para atribuiccedilatildeo do Tablet Asus ME400C eacute necessaacuterio existirem no
miacutenimo 3 aplicaccedilotildees a concurso Qualquer caso omisso seraacute resolvido pelo staff da comunidade natildeo sen-
do passiacutevel de recurso e o juri iraacute rever e validar todas as aplicaccedilotildees de modo a que tenham um minimo de
qualidade e originalidade
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13
Veja tambeacutem as ediccedilotildees anteriores da Revista PROGRAMAR
e muito mais em hellip wwwrevista-programarinfo
34
ordf Ed
iccedilatilde
o - A
bril 2
01
2
35
ordf Ed
iccedilatilde
o - J
un
ho
201
2
36
ordf Ed
iccedilatilde
o - A
go
sto
20
12
37
ordf Ed
iccedilatilde
o - O
utu
bro
20
12
38
ordf Ed
iccedilatilde
o - D
ezem
bro
20
12
39
ordf Ed
iccedilatilde
o - F
eve
reiro
20
13