Você está na página 1de 53

EDITORIAL

EQUIPA PROGRAMAR

Coordenador
Antnio Pedro Cunha Santos

Editor
Antnio Pedro Cunha Santos

Design
Srgio Alves
Twitter: @scorpion_blood
Ilustrao
Sara F. Santos
Redaco
Antnio Santos
Fernando Cesar
Nelson Silva
Nuno Santos
Nuno Silva
Paulo Afonso Pereira Junior
Sara Paiva
Sara Silva
Sara F. Santos
Srgio Ildefonso

Staff
Antnio Pedro Cunha Santos
Rita Peres
Rui Gonalves
Sara F. Santos
Contacto
revistaprogramar@portugal-aprogramar.org
Website
http://www.revista-programar.info
ISSN
1 647-071 0

Lorem ipsum
Os anos passam, mais um ano termina, e esta edio a ultima do ano, com
toda a nostalgia que isso possa trazer. No obstante, o passar do tempo, significa
que se evoluiu, se cresceu, se acrescentou algo, se viveu, se aprendeu, se mudou,
sem esquecer de onde se veio.
Nesta edio escolhi para titulo o Lorem ipsum, pelo contexto histrico do
texto normalmente conhecido por Lorem ipsum, mais concretamente o seu contexto
ligado tecnologia. H algumas geraes atrs, um dos mais conhecidos softwares
de desktop publishing, disponvel para Macintosh e Windows, chamado PageMaker,
da
Aldus Corporation, fazia as delcias de jornalistas, escritores, autores,
entusiastas e demais pblico, que vivia fascinado com o grande salto tecnolgico
que se vivia na dcada de oitenta do sculo passado, apresentava como texto
padro para alinhamento e formatao: o Loren ipsum. Este texto no mais do que
um misturar de palavras em grego, de um texto do sculo primeiro antes de Cristo,
intitulado Finibus Bonorum et Malorum (A Origem do Bem e do Mal), escrito por
Ccero, adaptado por Richard McClintock, como resultado de uma pesquisa que fez,
de uma das palavras mais obscuras do latim (consectetur), criando um texto que no
faa sentido algum, seja ele sintctico ou gramatical. Este texto ainda nos dias de
hoje usado como texto padro para ajuste de dimenses durante as fazes de
paginao de obras de diversos tipos.
Saindo um pouco do contexto histrico do tratado de onde vem o comum
Lorem ipsum, esta escolha prendeu-se com uma sincera falta de inspirao para
escrever o editorial! Poder ser uma branca, poder ser uma falha, poder ser um
milho de coisas que no vos sei explicar, mas certamente que todos ns
programadores, autores, redactores, Humanos, passamos por este tipo de brancas
de vez em quando, como se perdessemos os apontadores, ou os ndices de uma
tabela de alocao e deixassemos por momentos de conseguir escrever.
Nessa falta de inspirao pensei o que escrever e para no deixar literalmente o
texto: Neque porro quisquam est qui dolorem ipsum quia dolor sit amet
consectetur adipisci velit escrevo este breve editorial recordando o texto padro,
e a tecnologia que o imortalizou e que agora parte da histria comum de todos
ns (a histria da informtica).
Sendo o texto original de Ccero, um tratado muito usado na renascena, na
pesquisa do saber do conhecimento, da inovao, da busca de novos horizontes e
conhecimentos e em virtude de ser quase final de ano, aproveito para desejar a
todos os que lem, participam, colaboram, trabalham, nesta nossa e vossa
publicao que a Revista PROGRAMAR, os votos de um feliz criativo 2015, cheio
de tudo aquilo de bom que nos querido, de inovaes e alegrias, de evoluo e
conhecimento, na busca de todos que a Felicidade!

At prxima edio.

Antnio Santos

A revista PROGRAMAR um projecto voluntrio sem fins lucrativos. Todos os artigos so da responsabilidade dos autores, no
podendo a revista ou a comunidade ser responsvel por alguma impreciso ou erro.
Para qualquer dvida ou esclarecimento poder sempre contactar-nos.

NDICE
TEMA
7

DE CAPA
Integrar a Cortana numa aplicao Windows Phone - (Sara Silva)

A PROGRAMAR
13

Estruturas de Dados (EDs) Genricas - (Paulo Afonso Pereira Jnior)

19

Sencha Touch - Parte I - (Nelson Silva)

22

Registo de todos os comandos executados num Sistema Informtico - (Fernando Csar)

27

Como suportar diferentes idiomas numa App Android - (Nuno Santos)

31

Sande Castlle Help File Builder - (Srgio Ildefonso)

ANLISES
36

Desenvolvimento de Aplicaes Profissionais em Android - (Sara Paiva)

38

Projetos de POO em JAVA - (Antnio Santos)

NO CODE
41

Windows 10: A Nova Gerao Windows - (Nuno Silva)

45

Xamarim: Sem Custos para Estudantes - (Sara Silva)

47

Que tipo de BD s tu - (Sara Santos)

49

Xamarin Store App: Ganha a tua t-shirt C# ou F# - (Sara Silva)

50

Projecto em Destaque na Comunidade p@p: IRIS NOS Control Panel

EVENTOS
2 a 6 de Maro 2015 SET Semana Empresarial e Tecnolgica, Instituto Superior Tcnico
Para mais informaes/eventos: http://bit.ly/PAP_Eventos. Divulga os teus eventos para o email eventos@portugal-a-programar.pt

NOTICIAS
App

des () como mapas offline com os pontos de interesse assinalados ou uma short version dos contedos escritos", referiu
ao TeK Alexandre Pinto, CEO da iClio, empresa de Coimbra
especializada na conceo e edio de contedos nas reas
da Histria, Patrimnio e Cultura responsvel pelo guia turstico.

portuguesa JiTT guia turistas


em todo o mundo
Paris, Viena, Boston, Los Angeles, Nova Iorque, Pequim, Rio
de Janeiro ou So Paulo fazem parte do grupo de 18 cidades
que pode visitar com a ajuda do JiTT, um guia turstico made
in Portugal pensado para quem conhecer os quatro cantos do
mundo.
Neste momento, s na App Store da Apple o JiTT tem 57 aplicaes, mas at ao final do ano iro superar uma centena,
graas disponibilizao das verses para Android. Cada
aplicao corresponde a um binmio cidade/idioma.

A aplicao tem depois contedos premium que podem ser


adquiridos (in app) que do acesso, entre outras coisas, ao
udio e ao planeador de percursos (Route Planner).
At ao final de 2014 devero estar disponveis guias JiTT para
18 cidades mundiais em cinco idiomas diferentes na App Store, na Google Play, na Aptoide e nas 11 maiores lojas Android
na China.
Em meados de novembro as aplicaes JiTT tinham "dezenas
de milhar de downloads", segundo o responsvel. "Atendendo
ao facto de que estamos em plena fase de publicao de novas cidades em diferentes idiomas apenas na App Store, fase
que inicimos no final de setembro, deixa-nos muito confiantes para futuro".
A primeira cidade a ser lanada com o JiTT foi Barcelona, em
fevereiro de 2011 tendo muito recentemente sido fechado um
acordo na China com vista ao desenvolvimento de um guia
medida para a cidade de Guilin.
"Os mercados norte-americano e chins so os dois principais
mercados naturais do JiTT, mas igualmente a Europa assume
grande relevncia na nossa estratgia", sublinha Alexandre
Pinto. "As cidades que elegemos como prioritrias na nossa
estratgia so selecionadas, de grosso modo, com base na
anlise dos fluxos mundiais de turistas. A anlise um pouco
mais profunda e contempla anlises mais verticais em segmentos de mercado que, para ns, so fundamentais".
Depois de cidades como Londres, Barcelona, Paris, Munique,
Berlim, Roma, Berlim, Viena, So Francisco, Boston, Los Angeles, Nova Iorque, Pequim, Rio de Janeiro ou So Paulo,
Alexandre Pinto garante que existem locais no top das cidades mais visitadas que o guia turstico vai integrar no futuro.
"Tquio e Seoul so imediatamente percebidas, mas mais
esto na 'mira' do JiTT".
O CEO da iClio garante que a mais valia do JiTT face a aplicaes do mesmo gnero o facto de os contedos serem
originais, "escritos por historiadores que, para lhe introduzir
particularidades diferenciadoras, procedem a uma pesquisa
prvia em cada cidade para conhecer aspetos novos ou algo
que est na moda".
Escrito ao abrigo do novo Acordo Ortogrfico

JiTT Paris
"As nossas aplicaes so de instalao gratuita e na verso
gratuita entregam ao utilizador um conjunto de funcionalida-

In Sapo Tek

NOTICIAS
A primeira delas a integrao da Cortana no Windows 10,
com a assistente digital a assumir a funo de interface de
pesquisa no novo sistema operativo, respondendo a comandos de texto e de voz. Para j, tudo muito similar verso
do Windows Phone, mas muito provvel que a verso final
ainda venha a sofrer alteraes.
A outra grande novidade a app para Xbox, que parece funcionar como uma espcie de porta de entrada para todo o ecossistema Xbox, incluindo listas de amigos, feeds de atividades
e loja.
Alm disso, a Windows Store tambm sofreu algumas alteraes, pelo que a msica e os filmes/programas de televiso
estaro localizados junto aos jogos e s apps algo que poder indicar que a Microsoft poder adicionar os contedos de
udio e de vdeo das lojas da Xbox Windows Store, passando a disponibilizar toda a sua oferta a partir de um nico local.

Co

corre graas a prteses impressas em 3D


Em ROCK HILL, Carolina do Sul, 16 de Dezembro de 2014
A 3D Systems anunciou hoje que as prteses 3D serviram
com sucesso ao co Derby, possibilitando-lhe correr ao longo
da rua pela primeira vez. Derby nasceu com uma deformao
congenital caracterizada por braos encurtados e ausncia de
patas dianteiras. Apesar de sempre alegre, at agora o Derby
apenas podia andar em superfcies macias. As superfcies
duras como passeios, causavam abrases severas s suas
extremidades dianteiras.
Tendo adotado Derby atravs de um grupo de resgate de
ces, Tara Anderson decidiu ajudar. Tara, funcionria da 3D
Systems, sabia que a impresso 3D permitia um nvel inigualvel de liberdade de design, funcionalidade e rapidez. Utilizando a tecnologia 3D, ela sabia que seria possvel desenhar
e construir rapidamente prteses personalizadas para a morfologia do Derby.
Com a ajuda de Derrick Campana, Ortopedista, e dos designers 3D Kevin Atkins e Dave DiPinto, dados das patas de
Derby e scans 3D do design de um copo, criados por Campana, foram utilizados para criar o design 3D. A equipa utilizou o
Geomagic Freedom, uma plataforma de escultura digital 3D,
que lhes permitiu criar formas orgnicas perfeitas e curvas
suaves para a forma de Derby.
A ProJet 5500X produz material variado de impresso 3D
numa construo nica. Assim Tara e os designers puderam
construir prteses completas com adaptaes confortveis em
borracha e bases rgidas. Prontas em apenas algumas horas,
as prteses foram enviadas para Derby para teste.()
Atravs do poder do 3D, o Derby pode agora correr a acompanhar e por vezes ultrapassar os seus recentes donos adotivos Sherri e Dom Portanova.()
In 3dsystems.com

In Exame Informtica

Midos portugueses vencem concurso de programao da Microsoft


Gonalo e Matias tm seis e sete anos e conquistaram o primeiro lugar na categoria Conquerors na Final Europeia do
Kodu Kup, uma competio de programao organizada pela
Microsoft.
A Kodu Kup reuniu mais de 20 alunos, dos seis aos 16 anos,
em Bruxelas para estimular os primeiros passos no mundo da
programao e da criao de jogos digitais. A Comisso Europeia reconhece a competio como uma das melhores prticas para desenvolvimento de competncias digitais.
Gonalo Caladas e Matias Fareleira criaram um jogo chamado Water Planet sobre a importncia da gua e da biodiversidade e que retrata os perigos da poluio e destruio do
ecossistema, encarnados em peixes rob e polvos mecnicos. O jogo foi desenvolvido nas salas de aula do Colgio
Monte Flor, em Carnaxide, usando o Kodu, a ferramenta pedaggica de programao visual da Microsoft.
Rui Lima, o professor que acompanhou o projeto, explica que
isto mostra-nos a importncia que as tecnologias de informao assumem enquanto ferramentas pedaggicas, que estimulam o conhecimento e o potencial de cada aluno. A integrao de ferramentas tecnolgicas j uma realidade no Colgio Monte Flor e tem sido muito gratificante ver o impacto no
sucesso escolar dos alunos e na criao de projetos desta
natureza e na sua distino escala global, ctia o comunicado da Microsoft.
O Kodu Kup Europe da responsabilidade da Microsoft Europe e desenvolvido em parceria com o Centro de Inovao da
Microsoft em Bruxelas.

Traduo: Sara Santos

Windows 10 para o mercado de consumo vai integrar de raiz a Cortana


A Microsoft est a preparar um evento para janeiro, no qual
vai dar a conhecer as novidades presentes no Windows 10
para o mercado de consumo depois de o ter feito para o
segmento empresarial no final de setembro. O The Verge,
teve acesso a uma fuga de informao sobre o que vai ser
divulgado e revela as duas principais novidades.

In Exame Informatica

TEMA DE CAPA
Integrar a Cortana numa aplicao Windows Phone

TEMA DA CAPA

Integrar a Cortana numa aplicao Windows Phone


no, tais como I am hungry, I want to eat and I want
to drink.

Integrar a Cortana numa aplicao Windows Phone


Este artigo tem como objetivo apresentar um exemplo de

Como foi mencionado anteriormente a Cortana no est disponvel em todas as lnguas e atualmente no possvel
interagir com a Cortana em portugus, por esta razo se
est a usar expresses em ingls.

como integrar a Cortana com uma aplicao de Windows


Phone.

De seguida iremos ver um exemplo de um VCD, que estar


definido para ingls. No entanto, possvel definir para outras lnguas que a Cortana suporte.

Introduo
Uma das funcionalidades interessantes no Windows Phone
8.1 a Cortana. A Cortana no mais do que uma assistente pessoal, que ajuda os utilizadores em tarefas bsicas, tais
como ligar a um amigo, marcar na agenda um acontecimento
e outras tarefas.

<?xml version="1.0" encoding="utf-8"?>


<!Be sure to use the new v1.1 namespace to utilize
the new PhraseTopic feature -->
<VoiceCommands xmlns="http://schemas.microsoft.com/
voicecommands/1.1">
<!The CommandSet Name is used to programmatically
access the CommandSet -->
<CommandSet xml:lang="
en-us" Name="englishCommands">
<!-- The CommandPrefix provides
an alternative to your full app
name for invocation -->
<CommandPrefix>Menu</CommandPrefix>
<!-- The CommandSet Example appears
in the global help alongside your app name -->
<Example> I am hungry </Example>

Atualmente no est disponvel para todas as lnguas, por


esta razo muitos utilizadores que no so nativos na lngua
inglesa mudaram as definies do seu dispositivo para que
este suporte esta funcionalidade, como o caso de muitos
portugueses. Para os interessados que ainda no o tenham
feito, recomendado que alterem as definies para Ingls e
para Estados Unidos, para mais informaes consultar
o artigo.
De suporte ao artigo iremos usar o exemplo Menu
App criado no Windows AppStudio.
Integrando a Cortana

<Command Name="ShowCommand">
<Example> Show Mains </Example>
<ListenFor> Show {dictatedShowTerms}
</ListenFor>
<Feedback> Showing in Menu ...
</Feedback>
<Navigate Target="MainPage.xaml" />
</Command>

A Cortana ir usar comandos de voz para interagir com as


aplicaes. Para isso esses comandos de voz tem que ser
instalados por cada aplicao (cada vez que a aplicao
inicia), para que a Cortana saiba como poder interagir com
cada aplicao.
Desta forma, o primeiro passo para integrar com a Cortana,
na Menu App, passa por definir um ficheiro Voice Command
Definition (VCD), este ficheiro no mais do que um ficheiro
xml com os vrios comandos que a Cortana ir reconhecer e
por sua vez permitir fazer a ligao com a aplicao.

<Command Name="NaturalLanguageCommand">
<Example> I want to eat </Example>
<ListenFor> {naturalLanguage}
</ListenFor>
<Feedback> Starting Menu ...
</Feedback>
<Navigate Target="MainPage.xaml" />
</Command>

Para a Menu App, iremos definir "Menu" como o nome que a


Cortana ir usar para iniciar a aplicao e iremos definir dois
comandos:

"Show Command" - ir ser o comando para apresentar ecrs especficos da aplicao, para a Menu
App poder ser os ecrs Beverages, Starters, Mains,
Desserts and Special Offers;

"Natural Language Command" - ir permitir que a


Cortana reconhea expresses comuns do ser huma-

<PhraseTopic Label="dictatedShowTerms"
Scenario="Search">
<Subject> Starters </Subject>
<Subject> Mains </Subject>
<Subject> Desserts </Subject>
<Subject> Beverages </Subject>
<Subject> Special Offers </Subject>
</PhraseTopic>
<PhraseTopic Label="naturalLanguage"
Scenario="Natural Language">
<Subject> I want to eat </Subject>

TEMA DA CAPA
INTEGRAR A CORTANA NUMA APLICAO WINDOWS PHONE

App seja concretizada. Portanto, quando a Cortana identifica


um comando de voz para a
Menu App o mtodo OnActivated ser chamado e ir enviar como parmetro
um SpeechRecognitionResult que nos permite obter o comando de voz e o texto reconhecido pela Cortana.

<Subject> I want to drink </Subject>


<Subject> I am hungry </Subject>
</PhraseTopic>
</CommandSet>
</VoiceCommands>
De salientar que

CommandSet - define os comandos para cada lngua

CommandPrefix - define o nome com que


a Cortana ir reconhecer a aplicao, neste caso
"Menu"

Example - define um exemplo de como usar


a Cortana para interagir com a Menu App,

Command - define o comando de voz suportado

PhraseTopic - define possveis expresses que


a Cortana poder identificar para iniciar o comando
de voz

protected override void OnActivated


(IActivatedEventArgs args)
{
base.OnActivated(args);
if (args.Kind == ActivationKind.
VoiceCommand)
{
var commandArgs = args as
VoiceCommandActivatedEventArgs;
if (commandArgs != null)
{
SpeechRecognitionResult
speechRecognitionResult = commandArgs.Result;
var voiceCommandName =
speechRecognitionResult.RulePath[0];
var textSpoken =
speechRecognitionResult.Text;

Para mais detalhes consulte o artigo


Voice Command Definition (VCD) elements and attributes

switch (voiceCommandName)
{
case "ShowCommand":
if (textSpoken.ToLower()
.Contains("starters"))
{
RootFrame.Navigate
(typeof (StartersPage));
}
if (textSpoken.ToLower()
.Contains("mains"))
{
RootFrame.Navigate
(typeof(Main1Page));
}
if (textSpoken.ToLower()
.Contains("desserts"))
{
RootFrame.Navigate
(typeof(DessertsPage));
}
if (textSpoken.ToLower()
.Contains("beverages"))
{
RootFrame.Navigate
(typeof(BeveragesPage));
}
if (textSpoken.ToLower()
.Contains("special") ||
textSpoken.ToLower()
.Contains("offer"))
{
RootFrame.Navigate
(typeof(MainPage), "SpecialOffers");
}
break;
case "NaturalLanguageCommand
":
if (textSpoken.ToLower()
.Contains("eat") ||
textSpoken.ToLower()
.Contains("hungry"))
{
RootFrame.Navigate
(typeof(Main1Page));

Nota: No ficheiro Manifest necessrio selecionar a capacidade de "Microphone".


Neste momento temos o ficheiro VCD definido e portanto
temos que o instalar no dispositivo (e cada vez que a aplicao inicia). Para isso iremos criar o seguinte mtodo:
private async Task InstallVoiceCommandsAsync()
{
var storageFile = await StorageFile.
GetFileFromApplicationUriAsync(new
Uri("ms-appx:///Cortana.xml"));
await VoiceCommandManager.
InstallCommandSetsFromStorageFileAsync
(storageFile);
}
De seguida devemos chamar este mtodo no mtodo OnNavigationTo da MainPage, da seguinte forma:
protected override async void OnNavigatedTo
(NavigationEventArgs e)
{
_dataTransferManager = DataTransferManager
.GetForCurrentView();
_dataTransferManager.DataRequested +=
OnDataRequested;
_navigationHelper.OnNavigatedTo(e);
await MainViewModel.LoadDataAsync();
if (e.NavigationMode == NavigationMode.
New)
{
await InstallVoiceCommandsAsync();
}
}
Por fim, temos que alterar o mtodo OnActivated no
App.xaml.cs para que a interao da Cortana com a Menu

TEMA DA CAPA
INTEGRAR A CORTANA NUMA APLICAO WINDOWS PHONE

E ao clicar em "see more" (ver mais) iremos obter os ecrs:

}
if (textSpoken.ToLower()
.Contains("drink"))
{
RootFrame.Navigate
(typeof (BeveragesPage));
}
if (textSpoken.ToLower()
.Contains("special"))
{
RootFrame.Navigate
(typeof (MainPage), "SpecialOffers");
}
break;
}
}
}
Window.Current.Activate();
}

Para cada comando de voz definido no ficheiro VCD devemos definir qual a informao que iremos apresentar. Por
exemplo, quando o utilizador diz "I want to drink" ir ser apresentado o ecr BeveragesPage.xaml que ir apresentar as
bebidas disponveis.

Os quais iro ajudar a perceber de que forma podemos usar


a Cortana assim com interagir com ela. Clicando na Menu
App iremos ver mais exemplos (que foram definidos no ficheiro VCD).

Para quem tiver interesse em alterar dinamicamente o ficheiro Voice Command Definition (VCD) recomendado a leitura
deste artigo.
Usando a Cortana
Antes de usarmos a Cortana, temos que instalar e correr
a Menu App no dispositivo, para que o ficheiro VCD seja
instalado e depois disto podemos usar a Cortana para interagir com a Menu App.
Quando iniciamos a aplicao Cortana no Windows Phone,
iremos ver o seguinte ecr:

Voltando ao ecr inicial da Cortana e introduzindo o texto ou


usando a voz para dizer Menu I am hungry iremos obter o
ecr:

TEMA DA CAPA
INTEGRAR A CORTANA NUMA APLICAO WINDOWS PHONE
Por sua vez a Cortana ir inicializar a Menu App:

Por sua vez a Cortana ir inicializar a Menu App:

E ento ser apresentado o ecr das bebidas:

Sendo ento apresentado o ecr dos pratos principais:

Quando mencionamos Menu I want to drink iremos ter o


ecr:

Quando mencionamos Menu Show offers


ecr:

10

iremos ter o

TEMA DA CAPA
INTEGRAR A CORTANA NUMA APLICAO WINDOWS PHONE
Que por sua vez a Cortana ir inicializar a Menu App:
Concluso
Podemos concluir que a interao com a Cortana relativamente simples, sendo possvel fornecer exemplos ao utilizador para facilitar a interao. possvel definir casos em que
sero apresentados ecrs especficos e claro ser possvel
usar uma linguagem natural para podermos satisfazer os
pedidos do utilizador recorrendo a expresses comuns.

Ser ento apresentado o ecr das ofertas especiais:

AUTOR
Escrito Por Sara Silva
Licenciada em Matemtica Especialidade em Computao, pela Universidade de Coimbra e Microsoft Certified Profissional Developer. Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps. O seu Blog
www.saramgsilva.com e o twitter @saramgsilva.

11

A PROGRAMAR
Estruturas de Dados (EDs) Genricas
Sencha Touch Parte I
Registo de Todos os comandos executados num Sistema Informtico
Como Suportar diferentes idiomas numa App Android
Sandcastlle Help File Builder

A PROGRAMAR

Estruturas de Dados (EDs) Genricas


Introduo
Quando cursamos disciplinas de Algoritmos e Estruturas de
Dados nos cursos de computao e reas afins, em geral,
aprendemos a criar Estruturas de Dados (EDs) bsicas,
como listas, pilhas, filas, capazes de trabalharem apenas
com nmeros inteiros. Isto no essencialmente um
problema, uma vez que o intuito destas disciplinas
apresentar os principais tipos de EDs, as operaes
relacionadas a elas, bem como as formas de uso (aplicao)
das mesmas; o que no depende do tipo de dados
armazenado pela estrutura.
Contudo, quando vamos para a prtica do desenvolvimento
e utilizao destas EDs, seja num trabalho prtico da
disciplina ou em outro tipo de aplicao, o nosso desejo
trabalhar com EDs capazes de armazenar qualquer tipo de
elemento e no apenas de nmeros inteiros. Por exemplo,
nosso interesse pode ser criar uma lista de alunos ou uma
fila de processos a serem atendidos por um determinado
sistema operacional, entre outros. Obviamente, alunos e
processos so entidades complexas (por exemplo, o registro
de um aluno pode conter nome, matrcula, data de
nascimento, entre outros dados), uma vez que so
compostas por outros tipos de dados mais simples, e no
pertencem aos tipos primitivos de qualquer linguagem de
programao de propsito geral.
Neste sentido, como podemos trabalhar com estruturas de
dados para esses tipos complexos? Uma forma seria
implementar uma verso da estrutura de dados especfica
para cada tipo de dados que desejamos armazenar, isto ,
uma implementao de lista especfica para trabalhar com
alunos, outra para processos, outra para inteiros e assim
sucessivamente. Contudo, podemos perceber que esta no
uma abordagem muito interessante, uma vez que: i)
aumenta o volume de trabalho do programador, que dever
reimplementar as estruturas para cada tipo de dado de
interesse; ii) aumenta a quantidade de cdigo duplicado,
uma vez que o cdigo fonte de funes comuns a um
mesmo tipo de estrutura, como por exemplo, inserir no final
de uma lista deveria ser duplicado para cada novo tipo de
dado; iii) aumentaria muito a probabilidade de o programador
cometer erros, comprometendo a qualidade do software
como um todo; entre outros.
Enfim, so muitas as razes para no adotarmos a
estratgia apresentada anteriormente. Outra opo seria
implementarmos estruturas genricas, isto , estruturas de
dados que trabalham de forma transparente para o usurio
final (programador), independentemente do tipo de dado que
est sendo manipulado por ela. Sendo assim, o correto seria

13

criarmos uma ED denominada Lista, por exemplo, que


encapsula o cdigo necessrio para manipulao dos itens
de uma lista, no importando que tipo de item seja este. Em
outras palavras, teramos uma nica implementao do tipo
Lista, que pode armazenar e tratar desde nmeros inteiros,
strings, at estruturas complexas como alunos, processos,
produtos, entre outros.
Esta a estratgia utilizada pela maioria das bibliotecas de
estruturas de dados das linguagens de programao
modernas, como Java, C++, entre outros. Por exemplo, em
Java existe a implementao ArrayList, que representa uma
lista implementada por meio de vetores. Ao criarmos um
objeto do tipo ArrayList, podemos informar que tipo de dados
iremos armazenar na ED, por exemplo ArrayList<Aluno>, e
ela estar preparada para lidar com itens deste tipo, sem
precisarmos conhecer, muito menos alterar, o cdigo fonte
desta estrutura de dados.
Uma linguagem de programao bastante utilizada em
disciplinas iniciais de programao e estruturas de dados a
linguagem C. Apesar de muitos livros j abordarem o ensino
de ED com linguagens orientadas a objetos, como C++ e
Java, ainda h livros que tratam do assunto utilizando esta
linguagem procedimental.
Quanto s linguagens de programao Java e C++, muitos
livros exploram a construo de estruturas de dados
genricas, tendo em conta que o paradigma de Orientao a
Objetos facilita bastante este trabalho, por meio dos robustos
mecanismos de generalizao existentes nativamente nestas
linguagens, como herana e polimorfismo. Quanto
linguagem C, no entanto, difcil encontrar material didtico
sobre o desenvolvimento de estruturas genricas para tal
linguagem. Isto tem feito com que muitos alunos encontrem
dificuldades ao aplicarem os conhecimentos tericos obtidos
nas disciplinas que abordam o tema estruturas de dados em
situaes prticas. Neste sentido, este artigo tem como
objetivo apresentar o desenvolvimento de uma estrutura de
dados conhecida como pilha de forma genrica, isto , de
forma que ela seja capaz de armazenar qualquer tipo de
elemento especificado pelo utilizador, sem exigir que seu
cdigo seja modificado.
A Pilha
Antes de iniciarmos a implementao de nossa estrutura de
dados genrica, importante explicarmos sucintamente do
que se trata a ED conhecida como pilha.
Uma das EDs mais simples, mas no menos importantes do
que as demais, a pilha. Possivelmente por essa razo,
uma das EDs mais utilizada em programao, sendo

A PROGRAMAR
ESTRUTURAS DE DADOS (EDS) GENRICAS
inclusive implementada diretamente pelo hardware da maioria
das mquinas modernas.
A ideia fundamental da pilha que todo o acesso aos seus
elementos feito por meio do seu topo. Assim, quando um
elemento novo introduzido na pilha, ele passa a ser o
elemento do topo e o nico elemento que pode ser
removido ou acessado da pilha o do topo. Isto faz com
que os elementos da pilha sejam retirados na ordem inversa
ordem em que foram introduzidos: o primeiro elemento a sair
da pilha o ltimo que entrou.
A sigla LIFO Last in, First out (O ltimo a entrar o primeiro a
sair) usada para descrever esta estratgia.
Para entendermos o funcionamento de uma pilha, podemos
fazer uma analogia com uma pilha de pratos. Se quisermos
adicionar um prato na pilha, o colocaremos no topo. Se
quisermos retirar um prato da pilha, retiraremos o prato do
topo. Assim, para termos acesso ao segundo prato da pilha,
precisaremos retirar o prato do topo.

Na computao, o exemplo de utilizao de pilha mais


comum a prpria pilha de execuo de um programa.
Neste caso, as variveis locais das funes so dispostas
em uma pilha e uma funo s tem acesso s variveis que
esto no topo, ou seja, no possvel aceder a variveis de
outras funes.
Implementando uma Pilha
H vrias maneiras de se implementar uma ED e cada
implementao apresenta vantagens e desvantagens
particulares. As duas principais maneiras de se implementar
uma ED so:

Utilizando alocao
vetores); e

Utilizando alocao no sequencial dinmica (com


ponteiros).

sequencial

esttica

(com

A ED pilha funciona de maneira anloga. Existem trs


operaes bsicas que devem ser implementadas em uma
pilha:

Neste artigo, adotaremos a implementao com vetores (que


o tipo de implementao utilizado pelo ArrayList do Java).
Mais detalhes sobre as vantagens e desvantagens desta
estratgia de implementao so apresentados na Seo 5
deste artigo.

A estrutura de pilha implementada neste artigo contm:

a operao para empilhar um novo elemento, inserindoo no topo;

a operao para desempilhar um elemento, removendoo do topo; e

a operao para consultar o elemento do topo, sem


remov-lo.

comum nos referirmos a essas operaes pelos termos em


ingls push (empilhar), pop (desempilhar) e top (obter elemento
do topo). A Figura 1 apresenta graficamente o comportamento
das funes push e pop trs funes [1].

um vetor de inteiros, denominado itens, que


armazena, em posies contguas da memria, os
elementos da pilha;

uma varivel inteira, denominada topo, que


armazena a posio onde o prximo elemento da
pilha ser inserido, ou seja, o topo da pilha; e

uma constante, TAM_MAX, que define a quantidade


mxima de elementos suportada pela pilha.

Os passos para implementao desta ED so apresentados


abaixo:
Passo 1: definir a estrutura da pilha. A Listagem 1 apresenta
o cdigo do arquivo Pilha.h, responsvel pela definio das
estruturas fundamentais da pilha, bem como do prottipo de
suas funes. A constante TAM_MAX (linha 3) define a
capacidade do vetor de itens, isto , da quantidade mxima
de itens que podem ser adicionados pilha. A estrutura
struct Pilha (linhas 4 7) contm os elementos necessrios
para armazenamento e manipulao dos dados na pilha.
#ifndef PILHA_H
#define PILHA_H
#define TAM_MAX 10
typedef struct {
int itens[TAM_MAX];
int topo;
} PilhaVet;
#endif

Listagem 1. Estrutura de uma pilha.

Figura 1. Ilustrao do funcionamento de uma ED do


tipo pilha.

14

A PROGRAMAR
ESTRUTURAS DE DADOS (EDS) GENRICAS
Passo 2: o segundo passo consiste na definio dos

Ressalta-se ainda a necessidade de se importar dois


arquivos de cabealho: i) o stdlib.h, que permite utilizao de
funes para gerenciamento dinmico de memria, como
malloc, free, entre outros; e ii) o Pilha.h, que define as
estruturas e funes oferecidas pela pilha.

prottipos das funes a serem oferecidas pela pilha. Tais


funes so:

Criar Pilha: aloca e retorna uma pilha vazia para o


utilizador.

Liberar Pilha: libera a memria alocada para a pilha.

Verificar Pilha Vazia: verifica se a pilha est vazia.

Verificar Pilha Cheia: verifica se a pilha est cheia.

Empilhar: insere um novo elemento no topo da pilha.

Desempilhar: remover e retorna o elemento do topo


da pilha.

Obter Topo: retorna o elemento do topo da pilha,


sem remov-lo.

A implementao das demais funes apresentada na


Listagem 4. Foge ao escopo deste artigo descrever o
funcionamento detalhado destas funes; mais informaes
sobre a estrutura pilha, seu funcionamento e implementao
podem ser encontrados em [1].
void liberarPilha(Pilha* pilha) {
if (pilha != NULL) free(pilha);
}
int estahCheia(Pilha* pilha) {
if (pilha->topo == TAM_MAX) return TRUE;
else return FALSE;
}
int estahVazia(Pilha* pilha) {
if (pilha->topo == 0) return TRUE;
else return FALSE;
}

Os prottipos das funes descritas acima devem ser


includos no arquivo Pilha.h, conforme apresentado na
Listagem 2. possvel perceber tambm a declarao de
mais duas constantes, a saber TRUE e FALSE, que sero
utilizadas pelas funes estahVazia e estahCheia. Como a
linguagem C no possui nativamente um tipo especfico para
dados booleanos, esta uma forma de representar esse tipo
de informao de forma mais legvel no cdigo fonte do
programa. Alguns trechos de cdigo j apresentados na
Listagem 1 foram omitidos na Listagem 2.

void empilhar(int item, Pilha* pilha) {


if (!estahCheia(pilha)) {
pilha->itens[pilha->topo] = item;
pilha->topo++;
} else printf("Pilha cheia!\n");
}
int desempilhar(Pilha* pilha) {
if (!estahVazia(pilha)) {
int elementoTopo = pilha->itens[pilha->
topo - 1];
pilha->topo--;
return elementoTopo;
} else printf("Pilha vazia!\n");
}

...
#define TRUE 1
#define FALSE 0
...
Pilha* criarPilha();
void liberarPilha(Pilha* pilha);
int estahVazia(Pilha* pilha);
int estahCheia(Pilha* pilha);
void empilhar(int item, Pilha* pilha);
int desempilhar(Pilha* pilha);
int obterTopo(Pilha* pilha);
...

int obterTopo(Pilha* pilha) {


if (!estahVazia(pilha)) {
int elementoTopo = pilha->itens[pilha->
topo - 1];
return elementoTopo;
} else printf("Pilha vazia!\n");
}

Listagem 2. Prottipos das funes de uma pilha.

Listagem 4. Implementao das demais funes da pilha.

A implementao da funo criarPilha deve ser realizada em


um arquivo denominado Pilha.c. A implementao desta
funo encontra-se na Listagem 3. Conforme pode ser visto,
o procedimento para criar uma pilha : (i) instanciar
dinamicamente a pilha (linha 5); (ii) atribuir o valor 0 (zero)
varivel topo, uma vez que a pilha encontra-se vazia no
incio (linha 6); e (iii) retornar a pilha criada dinamicamente
(linha 7).

A Listagem 5 apresenta um cdigo simples para criao e


manipulao de uma pilha.
#include "Pilha.h"
void imprimirPilha(Pilha* pilha) {
while(!estahVazia(pilha)) printf("%d\n",
desempilhar(pilha));
}
int main() {
Pilha* minhaPilha = criarPilha();
empilhar(1, minhaPilha); empilhar(2,
minhaPilha); empilhar(3, minhaPilha);
desempilhar(minhaPilha);
empilhar(4, minhaPilha);
imprimirPilha(minhaPilha);
return 0;
}

#include<stdlib.h>
#include "Pilha.h"
PilhaVet* criarPilha() {
PilhaVet* pilha = (Pilha*) malloc(sizeof
(Pilha));
pilha->topo = 0;
return pilha;
}

Listagem 5. Cdigo fonte para utilizao da estrutura pilha.

Listagem 3. Implementao da funo criarPilha.

15

A PROGRAMAR
ESTRUTURAS DE DADOS (EDS) GENRICAS
Inicialmente, este programa insere os elementos 1, 2 e 3 na
pilha (linha 7); assim o elemento 3 passa o topo da pilha.
Posteriormente, o elemento do topo removido (linha 8) e o
elemento 2 passa a ser o topo. Na linha 9, o elemento 4
inserido na pilha, passando a ser o topo da mesma e, por fim, a
funo imprimirPilha (linha 10) invocada e o resultado da
execuo desta funo apresentado na Figura 2.

Figura 2. Resultado da execuo da funo imprimirPilha.

void (void*), na verdade, retorna um ponteiro que pode ser


convertido via casting explcito para qualquer outro tipo
existente na linguagem C ou at mesmo para tipos definidos
pelo prprio utilizador.
Este recurso utilizado em algumas funes de bibliotecas
da linguagem C, como por exemplo, a funo malloc. Se
observarmos a documentao desta funo [2], sua
assinatura void* malloc (size_t size); essa funo aloca um
determinado espao de memria do tamanho especificado
pelo utilizador e retorna um ponteiro para o bloco de
memria reservado. Esse ponteiro, por sua vez, pode ser
convertido em um ponteiro para qualquer outro tipo de dado.
Por exemplo, pode-se alocar uma varivel inteira
dinamicamente por meio do trecho de cdigo da Listagem 6.
int* meuInt = (int*) malloc(sizeof(int));

O que nos chama a ateno nos trechos de cdigo


apresentados anteriormente que esta pilha funciona
adequadamente, porm, apenas para nmeros inteiros. Ou
seja, no conseguiramos armazenar, recuperar ou remover
outros tipos de dados nesta estrutura, como strings ou tipos
complexos, como structs, por exemplo Aluno, Processo,
Disciplina, entre outros.

Listagem 6. Utilizao da funo malloc.


A primeira alterao realizada no cdigo fonte da nossa
estrutura de dados encontra-se no arquivo de cabealho,
Pilha.h, conforme mostrado na Listagem 7.

Se quisssemos atingir tal objetivo, teramos que modificar


alguns trechos de cdigo da implementao da estrutura, como
por exemplo, a linha 5 da Listagem 1, que descreve o tipo de
elementos do vetor itens ou as funes empilhar e
desempilhar, da Listagem 4, uma vez que o tipo de item
recebido pela funo empilhar e o tipo de retorno da funo
desempilhar seriam diferentes.
importante ressaltar que esse cdigo poderia ser melhorado
com a adio de um tipo de dados especfico para encapsular
o item de uma estrutura de dados. Assim, a mudana ficaria
concentrada na alterao de um nico tipo de estrutura,
contudo ainda assim seria necessrio modificar o cdigo da
estrutura de dados, o que no uma tarefa trivial e muito
menos recomendada, por diversos motivos j comentados no
incio deste artigo.

typedef struct {
void* itens[TAM_MAX];
int tamItem;
int topo;
} Pilha;
Listagem 7. Estrutura Pilha modificada.
Neste caso, a struct Pilha no contm mais um vetor de
inteiros, mas sim um vetor de ponteiros para o tipo genrico
void. Em outras palavras, tem-se um vetor capaz de conter
elementos de qualquer tipo de dado. Outra mudana o
acrscimo da varivel tamItem na estrutura Pilha. Ela ser
utilizada nas funes desempilhar e obterTopo, nas quais
ser preciso conhecer o tamanho do item que est sendo
manipulado pela pilha para que seja possvel realizar uma
cpia deste item antes de retorn-lo ao utilizador.
No caso das outras funes da pilha, as modificaes
realizadas so apresentadas na Listagem 8 (as funes que
no sofreram modificaes foram omitidas). Como pode ser
observado, a nica mudana realizada na funo criarPilha
encontra-se nas linhas 1 e 4, nas quais o tamanho do item a
ser armazenado na pilha passado como parmetro para
esta funo e posteriormente copiado para a varivel
tamItem da estrutura pilha, respectivamente.

Para amenizar estes problemas, uma soluo mais elegante


a construo de estruturas genricas, que permitem ao
programador especificar, no momento da criao da estrutura
de dados, qual o tipo de elemento que ser mantido por ela e
partir da, todo o trabalho realizado pela ED fica transparente
para o programador e nenhum cdigo desta estrutura precisar
de ser modificado.

Pilha* criarPilha(int tamItem) {


Pilha* pilha = (Pilha*) malloc(sizeof(Pilha));
pilha->topo = 0;
pilha->tamItem = tamItem;
return pilha;
}
void* desempilhar(Pilha* pilha) {
if (!estahVazia(pilha)) {
void* elRemovido = malloc(pilha->tamItem);
memcpy(elRemovido, pilha->itens[pilha->
topo - 1], pilha->tamItem);
pilha->topo--;
return elRemovido;
} else return NULL;

Criando uma Pilha Genrica


Um recurso a ser utilizado para confeco da pilha genrica
o tipo void da linguagem C. Muitos devem saber que void
uma palavra reservada da linguagem C, utilizada, por exemplo,
para especificar que uma funo no possui um tipo de
retorno. O que nem todos devem saber que esse recurso
tambm utilizado para especificar tipos genricos em C. Por
exemplo, uma funo que retorna um ponteiro para um tipo

16

A PROGRAMAR
ESTRUTURAS DE DADOS (EDS) GENRICAS
}

adicionarElementoInt(1, minhaPilhaInt);
adicionarElementoInt(2, minhaPilhaInt);
adicionarElementoInt(3, minhaPilhaInt);
desempilhar(minhaPilhaInt);
adicionarElementoInt(4, minhaPilhaInt);
imprimirPilhaInt(minhaPilhaInt);

void* obterTopo(Pilha* pilha) {


if (!estahVazia(pilha)) {
void* elTopo = malloc(pilha->tamItem);
memcpy(elTopo, pilha->itens[pilha->topo - 1],
pilha->tamItem);
return elTopo;
} else return NULL;
}

printf("\n\n");
adicionarElementoStr("A", minhaPilhaStr);
adicionarElementoStr("B", minhaPilhaStr);
adicionarElementoStr("C", minhaPilhaStr);
desempilhar(minhaPilhaStr);
adicionarElementoStr("D", minhaPilhaStr);
imprimirPilhaStr(minhaPilhaStr);

Listagem 8. Demais funes da pilha modificadas.


Quanto s funes desempilhar e obterTopo, as principais
mudanas esto nas linhas 9 10 e 17 18, respectivamente.
Nestes casos, antes de retornar o elemento do topo da pilha
para o utilizador, uma cpia do mesmo realizada. Para que
isso seja possvel, utilizou-se a funo memcpy (acrnimo de
memory copy), da biblioteca stdlib.h. Esta funo copia os
valores da regio apontada pelo topo da pilha para uma nova
regio de memria, apontada por elRemovido. O ponteiro
elRemovido genrico e aponta para uma regio de memria
instanciada dinamicamente por meio da funo malloc. Neste
ponto, possvel identificar onde a varivel tamItem utilizada.
Para que uma cpia do elemento do topo da pilha seja feita,
antes, necessrio saber o tamanho deste item para que
possa ser alocado um espao de memria compatvel para
receber a cpia.
Com essas poucas mudanas, nossa estrutura de dados j
suporta diferentes tipos de dados. A Listagem 9 apresenta
duas formas de uso desta estrutura, uma capaz de armazenar
nmeros inteiros na pilha e outra capaz de armazenar strings.

return 0;
}
Listagem 9. Cdigo fonte para utilizao da estrutura pilha
modificado.
possvel observar que as funes que so especficas para
o tipo de item da pilha, como a funo que imprime os
elementos de uma pilha, possuem duas verses, uma para
nmeros inteiros (imprimirPilhaInt) e outra para strings
(imprimirPilhaStr). Isso aceitvel, uma vez que para
imprimir um elemento, deve-se conhecer como esse
elemento formado. Imaginemos por exemplo, que temos
uma lista de registros de alunos; a forma de impresso de
um registro como esse bastante especfica. Alm disso,
esse um mtodo que no faz parte da implementao da
pilha, ou seja, de responsabilidade do programador que
est a manipular a estrutura.
As demais funes, que dizem respeito estrutura da pilha
em si, como empilhar, desempilhar, verificar se est vazia ou
se est cheia no precisam de ser modificados. Basta invoc
-las passando como parmetro o ponteiro para a lista
desejada e o comportamento da funo ser executado com
sucesso, independentemente do tipo de objeto armazenado
por ela. Entretanto, uma questo que devemos pensar : e
se quisssemos adicionar uma funo estrutura da pilha,
que fosse capaz de desempilhar todos os elementos at
encontrar um determinado elemento desejado. Por exemplo,
suponha que a pilha seja composta pelos elementos 1, 2 e 3,
sendo 3 o topo da mesma. Se invocssemos esta funo
passando o item 1 como parmetro, os elementos 2 e 3
seriam removidos e a pilha ficaria com apenas um elemento.

#include "Pilha.h"
typedef struct {
int info;
} ItemInt;
typedef struct {
char info[255];
} ItemStr;
void imprimirPilhaInt(Pilha* pilha) {
while(!estahVazia(pilha)) printf("%d\n",
((ItemInt*)esempilhar(pilha))->info);
}
void imprimirPilhaStr(Pilha* pilha) {
while(!estahVazia(pilha)) printf("%s\n",
((ItemStr*)desempilhar(pilha))->info);
}
void adicionarElementoInt(int v, Pilha* p) {
ItemInt* i = (ItemInt*) malloc(sizeof
(ItemInt));
i->info = v; empilhar(i, p);
}
void adicionarElementoStr(char s[], Pilha* p) {
ItemStr* i = (ItemStr*) malloc(sizeof
(ItemStr));
strcpy(i->info, s); empilhar(i, p);
}

O impasse aqui o seguinte: como a funo saber como


comparar os itens da pilha, uma vez que ela no conhece o
seu tipo, a priori. Mesmo sabendo qual o tipo de dado, em
alguns casos, no seria possvel compar-los; por exemplo,
quando o tipo de dado uma estrutura complexa criada pelo
prprio desenvolvedor, como uma struct para armazenar os
dados de um aluno, entre outros.

int main() {
Pilha* minhaPilhaInt = criarPilha(sizeof
(ItemInt));
Pilha* minhaPilhaStr = criarPilha(sizeof
(ItemStr));

Para resolver este problema, precisamos de utilizar outro


recurso da linguagem C, conhecido como funes callback.
Este tipo de funo tira proveito do fato de que a linguagem
C trabalha com ponteiros para funes, isto , podemos

17

A PROGRAMAR
ESTRUTURAS DE DADOS (EDS) GENRICAS
passar como parmetro para uma funo, um ponteiro que
aponta para o bloco da memria onde est localizada outra
funo do sistema (ou at mesmo ela mesma). Isto permite
que uma determinada funo realize chamadas de outra
funo, sem mesmo saber que funo esta. Mas este ser
um assunto para um prximo artigo.
Consideraes finais
Este artigo apresentou a implementao de uma pilha
genrica, isto , uma estrutura de dados capaz de lidar com
elementos de qualquer tipo de dado, como inteiros, strings,
entre outros. Inicialmente, destacou a motivao para
construo deste tipo de estrutura; posteriormente, apresentouse a implementao de uma pilha especfica para lidar com
nmeros inteiros. Por fim, mostrou-se como evoluir esta
estrutura para torn-la genrica.
Uma das limitaes da implementao apresentada neste
artigo que a capacidade da pilha limitada, ou seja, uma vez
atingida a capacidade mxima desta estrutura, no se pode
mais inserir elementos na mesma. Na prtica, isso no muito
comum. O que ocorre, mesmo em estruturas implementadas

com vetores, que um novo vetor com maior capacidade


alocado, caso seja possvel, e os elementos do vetor antigo
so transferidos para o novo vetor.
Nos prximos artigos, pretende-se apresentar uma
alternativa para resoluo do problema anterior, bem como
apresentar o desenvolvimento de funes para a pilha que
dependem do tipo de item manipulado por ela para ser
executada.
Alm
disso,
pretende-se
abordar
a
implementao de outras estruturas de dados genricas,
como listas, filas, rvores, entre outras.
Referncias
Celes, W.; Rangel, J. L. Apostila de Estruturas de Dados.
Disponvel em: http://www-usr.inf.ufsm.br/~juvizzotto/
elc1067-2013b/estrut-dados-pucrio.pdf. Acedido em:
Agosto/2014.
Documentao da funo malloc. Disponvel em: http://
www.cplusplus.com/reference/
cstdlib/malloc/. Acedido em: Agosto/2014.

AUTOR
Escrito por Paulo Afonso Parreira Jnior
Atualmente professor do curso de Bacharelado em Cincia da Computao da Universidade Federal de Gois (Campus
Jata). aluno de doutorado do Programa de Ps-Graduao em Cincia da Computao (PPG-CC) da Universidade Federal
de So Carlos (UFSCar), na rea de Engenharia de Software. mestre em Engenharia de Software pelo Departamento de
Computao da UFSCar (2011). integrante do Advanced Research Group on Software Engineering (AdvanSE) do
Departamento de Computao da Universidade Federal de So Carlos e do Grupo de Pesquisa e Desenvolvimento de Jogos
Educacionais Digitais (GrupJED) do Curso de Cincia da Computao da Universidade Federal de Gois (Regional Jata).
Tem experincia na rea de Cincia da Computao, com nfase em Engenharia de Software, atuando principalmente nos
seguintes temas: Manuteno de Software, Desenvolvimento de Software Orientado a Objetos, Desenvolvimento de Software
Orientado a Aspectos e Informtica na Educao.

18

A PROGRAMAR

Sencha Touch Parte I

Actualmente, como todos ns sabemos, o universo dos


smartphones e das aplicaes mveis vieram para ficar. O
mercado das apps est em constante evoluo e todos os dias
aumenta o seu nmero nas diversas stores existentes. O problema existente que cada fabricante obriga a uma linguagem
de programao. Se queremos desenvolver uma aplicao
para IOS, temos que programar em Objective-C, para Android,
o Java, e Windows Phone somos obrigados a usar o C#, por
exemplo. Ora, programar em todas estas linguagens bastante complicado.

Sencha generate app pop ..//pop


No browser basta aceder ao endereo do webserver http://
localhost/pop/.
A aplicao criada por defeito, trs j algumas funcionalidades que podemos aproveitar para o nosso desenvolvimento.

A soluo para esta questo passa pela utilizao de uma framework hbrida. Este tipo de frameworks permitem ao programador desenvolver uma aplicao em HTML5 e Javascript
capaz de ser executada em qualquer sistema operativo mvel
com o look and feel de uma aplicao nativa.
Exemplo deste tipo de frameworks o Sencha Touch. Com
esta framework to simples desenvolver uma aplicao com
um design atrativo e cross-plataform. importante referir que
esta framework totalmente gratuita e open-source.
Nesta introduo ser demonstrado como preparar o ambiente
de desenvolvimento, assim como um pequeno exemplo das
capacidades desta poderosa framework.
Aps o pequeno exemplo estar completo, ser ainda explicado
como iremos encapsular a app HTML5/Javascript numa aplicao nativa, utilizando o apache cordova.
Para criar o ambiente de desenvolvimento ser necessrio
realizar o download da framework do seu site oficial: http://
www.sencha.com/products/touch/download/.
Ser necessrio terem instalado um servidor web apache, como por exemplo o WAMP ou XAMPP.
Finalmente, preciso efectuar o download do Sencha Touch
CMD, para criar a aplicao via linha de comandos (http://
developer.sencha.com/pathway/sencha-cmd-3).
Terminados todos os downloads, tempo de criar o ambiente.
1.

Unzip da framework dentro do servidor web.

2.

Executar o seguinte comando para criar a aplicao Sencha Touch:


a.

Navegar para a pasta onde extraram o


sdk e executar o comando:

Sencha generate
[caminho]

app

[nome

aplicacao]

Depois de criada a aplicao, basta aceder pelo browser ao


local onde criar a app. Por exemplo:

19

Figura 1: Exemplo APP inicial


Em seguida, ser apresentada a arquitectura da framework,
de forma a perceber melhor como est funciona.
O Sencha Touch est organizado segundo a arquitectura
MVC (Model-View-Controller) onde os componentes visuais
esto separados do modelo de negcio. Alm desta componente, possui uma estrutura de pastas que ajuda ao programador a organizar o seu cdigo.
Tal como possvel verificar na figura 2, a estrutura de pastas de um projecto Sencha Touch est muito bem organizada, o que facilita o desenvolvimento. A pasta mais importante
de referir neste momento, a pasta App. Dentro da App est
o modelo MVC da nossa aplicao e ainda as pastas
FORM,STORE e PROFILE.

A PROGRAMAR
SENCHA TOUCH PARTE I
Antes de comear a desenvolver, necessrio entender todos

Declarar Models:

estes pequenos conceitos da framework de forma a tirar todo o


partido desta.

models: [Cliente]

A pasta da STORE muito importante no desenvolvimento


desta framework. Tal como o nome indica, a store ser onde
iremos armazenar dados da aplicao. Contudo, apenas um
auxiliar ao armazenamento dos dados, uma vez que o que
ser guardado nas stores sero dados volteis, isto , apenas
sero guardados enquanto a aplicao estiver a ser executada.
Podem-se encarar as stores como um auxiliar ao armazenamento dos dados, uma vez que toda a informao armazenada numa base de dados SQLlite. As stores so bastante teis
para carregar os dados provenientes da base de dados, e para
efectuar operaes sobre eles, como ordenaes, filtros, etc.
O Sencha Touch bastante simples de utilizar depois de entendido estes conceitos. Vrios objectos visuais do Sencha
Touch esto j preparados para consumirem stores. Exemplos
destes objectos visuais so as listas por exemplo.
Criando uma lista com base numa store bastante simples.
Criar modelo para a store: O modelo comparado a uma classe no JAVA, por exemplo. esse modelo que ir representar a
tabela na base de dados. Imagine-se que temos na base de
dados uma tabela Cliente com os campos ID, NOME e MORADA. Temos que replicar essa informao num ficheiro dentro
da pasta MODEL, tal como o seguinte exemplo:
Ext.define('pop.model.Cliente', {
extend: 'Ext.data.Model',
config: {
idProperty: 'ID',
fields: [
{ name: 'ID', type: 'string' },
{ name: 'NOME', type: 'string' },
{ name: 'MORADA', type: 'string' }
]
}
});

Declarar Stores:
stores:[Cliente]
Declarar Controllers:
controllers:[RegistaCliente]
Depois de criado o modelo para o Cliente e a respectiva store, apresentar uma lista com os clientes bastante simples.
Basta utilizar o componente ST EXT.LIST.
Ext.define(pop.view.ListaCliente', {
extend: 'Ext.List',
xtype: 'listaclientes',
config: {
autoDestroy: true,
store: 'Cliente',
grouped: true,
itemTpl : '<table>' +
'<tr >' +
'<td style="font-size:16px;color:#37899E;">' +
'<b>{NOME}</b>' +
'</td>' +
'<tr>' +
'<td>' +
'<b style="font-size:14px;
color:#37899E;">MORADA:</b><b style=
"font-size:14px;"> {MORADA}</b>' +
'</td>' +
'</tr>' +
'</tr>' +
'</table>'
}
});
Desta forma ser apresentada uma lista com o nome e morada dos clientes. Esta lista populada com os dados provenientes na store, atravs do uso da sua propriedade store:
'Cliente'.

Depois de o modelo estar criado, temos que indicar que temos


uma store com esse mesmo modelo. Assim, basta criar um
novo ficheiro dentro da pasta STORE e apontar para o modelo
CLIENTE.
Ext.define('pop.store.Cliente', {
extend: 'Ext.data.Store',
config: {
storeId: 'cliente',
model: 'pop.model.Cliente'
}
})

A forma como a lista apresentada fica ao critrio de cada


um. Usando a propriedade itemTpl pode-se definir um HTML
para criar o corpo de cada item da lista.
importante referir que todos os ficheiros criados devem
iniciar-se da seguinte forma:
Ext.define([nome do ficheiro], {
A propriedade Extend indica que tipo o objecto que estamos a criar. Pode ser um container, um panel, uma lista, etc.

Todos os ficheiros criados quer sejam modelos, stores, view ou


controllers devem ser referidos no ficheiro app.js

Outra propriedade importante de referir o xtype. Este um


identificador nico do componente visual que ser utilizado
quando necessitarmos de instanciar esse mesmo objecto.
Pelo que podem analisar at agora, os conceitos existentes
no Sencha Touch tm uma curva de aprendizagem bastante
reduzida, sendo bastante fcil desenvolver com esta framework.

Declarar views:
views: [Menu,ListaCliente];

Na prxima edio ser demonstrado um exemplo prtico de

20

A PROGRAMAR
SENCHA TOUCH PARTE I
uma aplicao com todos estes conceitos aplicados.

Ser ainda demonstrado como converter a aplicao Sencha


Touch para uma aplicao nativa android e publicao na play
store.

AUTOR
Escrito por Nelson Silva

LicenciadoemEngenhariaInform capelaUniversidadedeTrsosMonteseAltoDouro.Afrequentarmes
tradoemEng.Inform capeloISEP.TrabalhaprofissionalmenteemempresadeTInareadasade.Funda
dordapginadofacebook:Androidparatots.

21

A PROGRAMAR

Registo de Todos os Comandos Executados num Sistema Informtico

RESUMO
Este relatrio descreve a anlise efetuada a quatro ferramentas que permitem o registo de todos os comandos efetuados
num sistema informtico. Nota-se, mais uma vez, que no existe segurana absoluta, por um lado, e por outro, que as ferramentas que possibilitam maiores nveis de segurana so
igualmente as que tm maiores custos, a nvel de trabalho humano e computacional.
Descrio do Assunto e Categorias
D.4.6 [Segurana e Proteo]
Assunto Geral
Segurana
Tpicos fulcrais
registo, comandos, performance, custos humanos
INTRODUO
O objetivo principal deste projeto estudar, de um ponto de
vista da segurana do sistema, a possibilidade de registar (log)
todos os comandos executados por um utilizador. A segurana
(correspondendo ao ingls security e no safety) ser abordada quer pela perspetiva de um ataque intencional ao sistema,
quer pela possibilidade de uma utilizao negligente poder
permitir explorar vulnerabilidades existentes ou criar novas.
Objetivos e motivao
A primeira questo que se poder colocar, de um ponto de
vista da segurana de todo o sistema, se faz sentido fazer
um registo exaustivo de todos comandos executados, por oposio ao registo de apenas alguns comandos, ou de alguns
utilizadores. Este trabalho no vai aprofundar esta questo,
dado que fica muito alm do seu escopo analisar a melhor forma de implementar toda a segurana de um sistema informtico.
Bastar assim como motivao para estudar o registo de todos
os comandos um regra prtica da segurana informtica e a
abordagem que foi acima descrita, que engloba quer um ataque intencional, quer uma atuao negligente. Se num ataque
intencional ainda se poder (pelo menos em teoria) pretender
ter uma lista das atuaes potencialmente importantes a registar, na vertente de uma atuao negligente, essa possibilidade
por natureza no existe, pois a prpria definio de uma atuao negligente (mais ou menos grosseira) pressupe a respetiva aleatoriedade resultante de ser uma atuao no planeada
ou imprevista.
Software analisado

22

A lista de software que permite realizar o objetivo deste estudo no extensa. Contudo, com uma exceo, nenhum se
destina especificamente a esta tarefa, tendo aplicabilidades
mais vasta. Naturalmente, dado o mbito deste estudo, apenas iremos focar a possibilidade de registar os comandos
executados.
grsecurity
O grsecurity um conjunto de patches para o kernel Linux
que visa melhorar globalmente toda a segurana do sistema.
As suas funcionalidades so mltiplas e abrangem reas
muito distintas. Citando apenas as mais relevantes, podemos
encontrar: Role Based Access Control, PAX (que implementa
algumas tcnicas para impedir a execuo de cdigo arbitrrio, como a marcao de pginas de memria somente para
leitura quando contenham cdigo (read only), ou a randomizao do espao de endereamento da memria), limitaes
de acesso a parte do sistema de ficheiros e proteo de executveis, rede e kernel. Entre esta mirade de possibilidades,
existe igualmente a opo de registar todos os comandos
executados.
Este registo efetuado a partir de cdigo que adicionado
ao prprio kernel, de modo a registar as chamadas efetuadas funo de sistema execve.
Linux Auditing System
O Linux Auditing System uma ferramenta desenvolvida e
mantida pela Red Hat e que se encontra presente no kernel
do Linux desde a verso 2.6. O objetivo do LAuS registar
todas as chamadas de sistema (system calls) realizadas. No
entanto, pode ser configurado para registar apenas a chamadas execve, de modo a cumprir os objetivos previstos neste
projeto.
Esta ferramenta tem dois mdulos, normalmente designados
por servidor e cliente. O servidor foi a parte includo no Linux
Kernel v.2.6, enquanto a parte cliente pode ser usada para
configurao e acesso aos dados.
O funcionamento desta ferramenta muito fcil de explicar:
dado que parte do cdigo executado dentro kernel, o LAuS
consegue registar todas as chamadas de sistema efetuadas.
The GNU Accounting Utilities
As GNU Accounting Utilities so um conjunto de ferramentas
criadas h vrios anos, num momento em que o tempo de
processamento era um bem raro. O objetivo inicial era apenas saber quem estava a usar o tempo de processamento do
(nico) computador disponvel e o que estava a fazer com o
mesmo.

A PROGRAMAR
REGISTO DE TODOS OS COMANDOS EXECUTADOS NUM SISTEMA INFORMTICO
Entre as cerca de 6 (seis) ferramentas disponveis encontra-se
o lastcomm que permite listar os comandos executados.
Snoopy Logger e outras ferramentas
O Snoopy Logger uma ferramenta open source destinada
especificamente a registar todos os comandos executados. No
entanto, de acordo com as instrues dos autores (e no s),
no uma ferramenta que vise a rea da segurana, sendo
um dos motivos o facto de no ser difcil escapar ao respetivo
registo (como veremos).
Esta ferramenta funciona como um wrapper da funo execve
que, alm de chamar a mesma, regista os argumentos dessa
chamada.
Existem outras ferramentas open source que permitem igualmente registar todos os comandos executados numa shell,
sendo dois exemplos o sudosh e o rootsh. Estas no sero
analisadas, pois alm da sua menor divulgao e documentao, tm uma aplicabilidade bastante mais limitada, no permitindo registar todos comandos executados num sistema, mas
apenas no sistema de shell, que ter de ser substitudo por
estar verso com a funcionalidade adicional de registar os comandos do utilizador. Este tipo de ferramentas alm de apresentarem um campo de aplicao mais limitado, reduzem as
opes de shell disponveis (e logo, as opes disponibilizadas
aos utilizadores) e criam ainda uma vulnerabilidade adicional,
resultante da eventual possibilidade de o atacante conseguir
correr outra shell.
Os testes realizados
Alm do estudo do funcionamento e documentao das ferramentas selecionadas, foram realizados alguns testes com vista
a aferir, por um lado, da respetiva segurana ou fiabilidade, e
por outro, das perdas em termos de desempenho que o sistema sofre com a operao adicional de registo.
Os testes foram todos realizados numa mquina i5 760, a
2.8Gh, com 8 Gb de RAM, a correr a verso 7 do Debian
(Wheezy).
Os testes de fiabilidade

medirias. Assim, dentro do cliente de correio eletrnico de


linha de comandos Alpine foi invocado o editor de texto vi
para a elaborao de uma nova mensagem. Foi ento utilizada a funcionalidade do vi para executar um comando de
shell e retornar o resultado para dentro deste editor.
Os testes de desempenho
Dadas as ferramentas selecionadas terem modos de funcionamentos algo distintos, e de modo a fazer uma avaliao
correta do desempenho do sistema foram elaborados 3 (trs)
testes bastantes distintos:

Compilao de software
Optou-se, em razo do tempo de compilao e estabilidade do cdigo, pelo openssh-client v.1.6.0.

Sequncia de vrios comandos de utilizao corrente


por qualquer utilizador normal

Para este teste foi especificamente elaborado um


pequeno script em bash:

#! /bin/bash
mkdir teste
cd teste
for dir in d1 d2 d3 d4 d5
do
echo -e "\n** Making dir ${dir}"
mkdir $dir
cd $dir
for file in f1 f2 f3 f4 f5
do
echo -e "\n Making file ${file}"
dd if=/dev/
urandom of=${file} count=1M bs=1 > /dev/null
done
ls -lA > /dev/null
cd ..
done
echo -e "\n Cating all files"
cat $(find -type f) > /dev/null
cd ..
echo -e "\n Compressing"
tar cf compressed.tar teste
rm -r teste

Dado que a maioria das ferramentas selecionadas se encontram em produo h vrios anos e sendo todas open source,
no houve a pretenso de encontrar falhas de segurana bvias, principalmente num trabalho com as limitaes temporais
e objetivos que o presente texto apresenta. No entanto, foram
feitas algumas verificaes de situaes limite. Desde simples
utilizao de alias para chamar executveis e que todas as
ferramentas ultrapassaram, facilmente registando o executvel
realmente chamado, at utilizao de sudo para mudar de
um utilizador normal (user) para administrador (root), facto que
permitiu esconder a algumas aplicaes a verdadeira identidade de quem invocou certo comando.

Este teste foi efetuado com recurso a um outro projeto pessoal que realiza a anlise de um ficheiro de dados numricos, imprimindo no ecr o resultado. A anlise consiste em
variados clculos que a aplicao distribui por todos os cores
disponveis na mquina. Pretendeu-se, ao utilizar especificamente esta aplicao, obter resultados mais fiveis nos atuais ambientes multicore.

Foi igualmente investigado se seria possvel ocultar um comando ou o respetivo utilizador, pela utilizao de aplicaes inter-

Anlise

c)

Por fim, foi efetuado um teste de processamento intensivo.

Os testes de desempenho foram todos realizados com um


utilizador normal, sem privilgios especiais.

A segurana de um sistema , regra geral, o resultado de um

23

A PROGRAMAR
REGISTO DE TODOS OS COMANDOS EXECUTADOS NUM SISTEMA INFORMTICO
conjunto de opes de ponderao entre segurana e custo.

Aspetos formais

Na anlise deste binmio considerou-se que seria relevante,


alm dos custos de processamento de anlise mais quantificvel realizar igualmente uma anlise mais subjetiva, sobre a
facilidade ou dificuldade de configurao e utilizao do software. A ferramenta mais segura, mas cuja instalao exija um
tcnico especializado s ser acessvel a um pequeno pblico
e foi, por isso, considerado que este aspeto, embora no sendo to facilmente mesurvel como a diminuio de desempenho, devia ser tido em considerao.

Localizao
Os registos criados nem sempre foram criados onde seria de
esperar. Embora sempre de acordo com a Filesystem Hierarchy Standard () a pasta escolhida seja /var/log, o Snoopy
Logger gera os seus relatrios dentro do ficheiro auth.log e o
gsecurity dentro do syslog. Embora tal no seja, partida um
problema, no foi fcil encontrar tal aspeto na documentao.

Para esta avaliao foi utilizada uma escala igualmente menos


quantitativa que pode ser vista na Tabela 1.

Formatos

grsecu
rity

LAuS

GNUAU

SL

exceo das GNU Accounting Utilities, todas as ferramentas guardam os relatrios em formato de texto, facilmente
acessvel. As Accounting Utilities incluem as aplicaes necessrias para aceder ao formato binrio que lhes especfico.

Facilidadede
Configurao

Legibilidade

Documentao

Tabela 1 Anlise de aspetos administrativos

Facilidadede
Instalao

Instalao, configurao, utilizao e documentao


Todas as ferramentas, com exceo do grsecurity, foram instaladas atravs do repositrio oficial Debian e no apresentam
qualquer dificuldade na respetiva instalao. O grsecurity, dado
que consiste num conjunto de patches ao kernel, requer conhecimentos avanadas para ser instalado. No caso do Debian
(e outras distribuies nas mesmas condies) o kernel recebe
j alguns patches, pelo que no possvel aplicar os patches
do grsecurity diretamente, sendo necessrio aplic-los verso original do kernel, compil-lo e instal-lo.
As dificuldades no grsecurity transmitem-se igualmente configurao, que necessrio fazer no momento da configurao
do kernel, atravs das ferramentas disponveis para tal.

As GNU Accounting Utilities disponibilizam, de longe, o contedo mais legvel e fcil de interpretar. Todos as outras ferramentas registam demasiada informao para que possam
ter uma leitura fcil. Isto no deve ser visto como um aspeto
negativo. Trata-se to somente de uma consequncia do
volume de informao que registado.
Embora o facto de os registos serem demasiado verbosos
possa ser visto como potenciador de alguma insegurana, no
sentido que ao dificultarem a leitura iro impedir a respetiva
consulta e diminuir a respetiva utilidade, tanto o grsecurity
como o LAuS, esto conscientes desse problema e fornecem
ferramentas que permitem filtrar a informao relevante. O
Snoopy Logger uma exceo neste caso.
Aspetos de Contedo
O contedo dos registos bastante varivel, em consonncia com o que atrs ficou dito, relativamente legibilidade.
Os registos mais legveis, das GNU Accounting Utilities, so
igualmente os mais incompletos, listando apenas a data, o
comando, o nome do utilizador, a consola em que o comando foi executado e uma indicao adicional com informaes
de sistema. Um elemento com bastante importncia, e que
omitido, so os parmetros (ou argumentos) com que o comando foi executado.

O LAuS est vastamente documentado e selecionar a opo


para registar todos os comandos executados requer adicionar
apenas duas linhas aos ficheiros de configurao. No entanto,
dado o enorme leque de possibilidades que esta ferramenta
oferece, descobrir as opes corretas requer algum investimento na leitura da documentao e conhecimentos tcnicos
avanados.
No extremo opostos, quer as GNU Accounting Utilities, quer o
Snoopy Logger no requerem qualquer configurao. Pelo que
foi possvel perceber, numa distribuio menos pr-ativa que
o Debian, alm da instalao apenas seria necessrio executar
os comandos para iniciar as respetivas ferramentas procedimento que, em ambos os casos, se encontra devidamente documentado.

Tanto o Snoopy Logger como o LAuS registam bastante


mais informao, nomeadamente ID e GID (group ID). As
GNU Accounting Utilities so alis nicas no aspeto em que
apresentam o nome do utilizador e no apenas um nmero.
O grsecurity apresenta o maior volume de informao, tornando-se quase ininteligvel numa primeira abordagem. Para
este estudo interessa-nos especialmente que tanto o grsecurity como o LAuS conseguem manter o registo do utilizador
mesmo que ele altere a sua identificao, nomeadamente
usando o comando sudo. O LAuS, utiliza um elemento que
designa por AUID (abreviatura de audit uid) e que permite

A utilizao fundamental destas aplicaes passa pela consulta dos registos realizados, que ser objeto de anlise no prximo ponto.
Os registos (logs)

24

A PROGRAMAR
REGISTO DE TODOS OS COMANDOS EXECUTADOS NUM SISTEMA INFORMTICO
identificar um utilizador que nas GNU Accounting Utilities surge
apenas como root. Esta uma possibilidade sem paralelo nas
restantes duas ferramentas e que d uma vantagem indiscutvel grsecurity e LAuS, principalmente em casos de negligncia, onde possvel, mesmo que vrias pessoas tenham
acesso a uma consola administrativa (onde possam utilizar o
comando sudo) identificar quem realizou determinada tarefa
(ou, neste caso, quem executou quais comandos).
O Snoopy Logger regista um SID (Session ID) que pode ser
usado com o mesmo efeito, no entanto os seus resultados no
so to fidedignos, at porque resultam de cada sesso que
iniciada, ao contrrio do AUID.
Outro aspeto essencial desta feita, em que todos as ferramentas conseguiram alcanar um bom resultado a capacidade para no serem induzidas em erro pela utilizao de outras aplicaes (intermdias) para chamar os comandos. Nenhuma das ferramentas foi enganada por este ardil, registando corretamente a aplicao e o utilizador.
Acesso aos registos
Todas as ferramentas estudadas utilizam exclusivamente o
sistema de ficheiros como proteo para limitar o acesso aos
ficheiros de registos. O LAuS apenas permite a leitura e escrita
ao administrador (root), sendo que as restantes ferramentas
permitem igualmente a leitura ao grupo administrador.
Tempo
original

grsecurity

LAuS

GNU
Accounting
Utilities

zer tudo o que um administrador legtimo tambm pode fazer


().
Contornar o registo
Dado que as trs primeiras ferramentas funcionam com base
em cdigo que j existe (ou necessrio adicionar) no kernel
do sistema, no ser uma tarefa nada fcil conseguir escapar ao respetivo registo. Potenciais vulnerabilidades existentes s estaro ao alcance de algum com conhecimentos
tcnicos muito avanados.
A exceo, como alis j tinha ficado indiciado, o Snoppy
Logger. Ao utilizar somente um wrapper para uma biblioteca,
permite a existncia de vrias estratgias para contornar os
registos que realiza ().
Eficincia e perdas de performance
Como se poder verificar no grfico de desempenho e na
tabela de valores apresentados (contabilizadas com base
nos valores totais), as diferenas de desempenho so, respetivamente de 8%, 3%, 0,1% e 3%, pra o grsecurity, o
LAuS, as GNU Accounting Utilities e o Snoppy Logger. Tal
como esperado, uma maior produo de contedos tem como contrapartida um maior impacto no desempenho geral do
sistema.

Snoopy
Logger

a) compilao

59,831

53,98

60,2

59,96

63,93

b) script

55,882

74,386

60,7

55,808

57,28

c) computao
intensiva

58,426

60,892

58,8

58,579

58,84

Tabela 2 Tempo em segundos dos testes de desempenho


Esta opo, quando usada para registar potenciais ataques e
nomeadamente ataques bem sucedidos com privilegie escalation (ou seja, em termos grosseiros, qualquer exploit que permita a um utilizador comum fazer sudo) elimina qualquer fiabilidade concedida a estes registos. Na prtica, para a situao mais
perigosa, e talvez aquela que faria todo o sentido manter um
registo: quanto um atacante consegue ter acesso incondicional
a uma mquina, as ferramentas estudadas revelam-se completamente ineficientes.
A alternativa neste tipo de situaes , numa abordagem clssica, ter um sistema de registo externo prpria mquina, presumindo-se que o atacante no conseguir ser bem sucedido
no ataque a ambas as mquinas simultaneamente. Esta estratgia tem por fito atingir um dos objetivos principais de um registo seguro: a sua inalterabilidade (incluindo a respetiva eliminao). No entanto, o atacante poder a qualquer momento
cessar a produo de registos. Este parece ser um problema
verdadeiramente insolvel, uma vez que a partir de determinado ponto, um atacante com suficientes permisses poder fa-

25

Como panormica geral, no se retiram aqui mais concluses que as que resultam do estudo global da Segurana de
Sistemas Informticos: h sempre um equilbrio a considerar
entre a segurana e o custo, que neste caso refletido quer
em tempo de configurao e instalao, quer em performance. A soluo com mais dados, que, tal como ficou exposto a
propsito do objetivo deste trabalho se presumir que seja a
mais completa, ou mais segura (independentemente do contributo que tenha na segurana global do sistema, que como
j mencionado, no cabe aqui analisar) igualmente a que
tem os maiores custos.

A PROGRAMAR
REGISTO DE TODOS OS COMANDOS EXECUTADOS NUM SISTEMA INFORMTICO
Concluses

Snoppy Logger website https://github.com/a2o/snoopy

Este projeto procurou identificar um conjunto de solues para


um problema muito especfico, a saber, o registo de todos os
comandos executados num sistema informtico. Aps alguma
investigao e teste de vrias ferramentas que foram selecionadas por disponibilizarem tal funcionalidade, acabou por se
concluir que existe sempre uma situao, em que o atacante
obtm permisses administrativa, em que nenhuma ferramenta
se mostrou capaz de minorar os danos. Nos restantes casos
existe um equilbrio entre a informao registada e os custos
de utilizao da ferramenta. Como mera opinio pessoal, parece-nos que o LAuS a opo mais equilibrada (entre custo e
benefcio). No entanto, como em qualquer questo de segurana, a opo correta exclusivamente a opo correta para o
sistema em anlise, pelo que cada Administrador de Sistemas
ter de fazer a sua prpria opo com base nos respetivos
requisitos de segurana.

Documentao oficial das GNU Accounting Utilities http://


www.gnu.org/software/acct

REFERNCIAS
Schneier, Bruce, and Kelsey, John, Secure Audit Logs to Support Computer Forensics, ACM Transactions on Information
and System Security, v. 1, n. 3, 1999 , disponvel online em
https://www.schneier.com/paper-auditlogs.html

AUTOR
Escrito por Fernando Csar

26

Documentao oficial do grsecurity http://en.wikibooks.org/


wiki/Grsecurity
Man page das ferramentas do LAuS: http://goo.gl/82ugh2
(auditd) http://goo.gl/AMSFOY
(auditctl) e http://goo.gl/sm042M
Todas as referncias para pginas web foram consultado por
ltimo a 8/11/2014.
1http://www.pathname.com/fhs/
2 Para

um estudo bastante interessante sobre a possibilidade


de uma mquina apenas garantir a inalterabilidade dos
seus registos ver [Schneier and Kelsey]. Notar, no entanto,
que mesmo os autores acabam por concluir por algumas
vulnerabilidades no modelo proposto dir-se-ia inerentes a
tentar guardar um objeto do seu prprio possuidor (legtimo
ou ilegtimo).

A PROGRAMAR

Como Suportar Diferentes Idiomas numa App Android

O mundo das aplicaes mveis cada vez mais abrangente,


fazendo j parte do dia-a-dia de qualquer um dos mortais com
smartphone. Esta fragmentao e abrangncia na utilizao de
aplicaes mveis torna complicada a tarefa de ter um pblicoalvo bem definido, pois geralmente as aplicaes esto disponveis para a globalidade dos utilizadores e no limitadas a
regies.
Esta situao torna a definio dos idiomas para o pblico-alvo
da aplicao um requisito fundamental para o correto desenvolvimento de uma aplicao. Neste pequeno tutorial irei dar a
conhecer uma forma de implementar o suporte a mltiplos idiomas numa aplicao Android.
No irei dar destaque instalao e configurao do ambiente
de desenvolvimento, partindo do princpio que todo o ambiente
est corretamente instalado e configurado.
1 Passo: Criar um Android Application Project

Aps a criao do projeto vamos ento dar incio construo da nossa view, basicamente construo do aspeto
grfico que neste exemplo concreto ter apenas uma view,
ou seja uma activity.
Para este exemplo iremos apenas criar um button e colocalo numa qualquer posio do ecr nossa escolha, como
demonstrado na imagem acima.
De seguida e se olharmos para o cdigo no ficheiro
activity_main.xml teremos a seguinte estrutura:
<RelativeLayout xmlns:android="http://
schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/
tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/
activity_vertical_margin"
android:paddingLeft="@dimen/
activity_horizontal_margin"
android:paddingRight="@dimen/
activity_horizontal_margin"
android:paddingTop="@dimen/
activity_vertical_margin"
tools:context="com.nuno.multilinguaapp.
MainActivity" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="120dp"
android:text="Button"
android:onClick="actionMethod" />
</RelativeLayout>

Neste primeiro passo iremos criar um Android Application Project, onde definimos o nome da App, nome do Projeto, assim
como as verses Android suportadas. ainda criada uma
Main Activity que ser a nossa view principal neste tutorial.

Ser ento aqui que comearo as alteraes com vista a


tornarmos a nossa aplicao com suporte para mltiplos
idiomas.
Vamos agora dar ateno seguinte linha:

2 Passo: Desenhar a view

android:text="Button"
Esta linha responsvel por definir o nome a apresentar no
button e que neste caso Button. Para podermos ter
acesso posterior e permisso para alterarmos dinamicamente o contedo a apresentar como nome do button termos
de mudar para o seguinte:
android:text="@string/button_pt"
Com esta linha iremos ento fazer com que o contedo a
apresentar como nome do button seja fornecido por uma
string que ir estar alojada na pasta res/values, ficheiro

27

A PROGRAMAR
COMO SUPORTAR DIFERENTES IDIOMAS NUMA APP ANDROID
strings.
Temos ainda de adicionar a seguinte linha para que mais tarde
possamos aceder ao mtodo click do nosso button:

4 Passo: Criar um novo ficheiro strings.xml na pasta


values-en

android:onClick="actionMethod" />
Olhando agora para o ficheiro strings que est presente na
pasta res/values ele dever ter uma estrutura semelhante
apresentada abaixo:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MultiLinguaApp</string>
<string name="action_settings">Settings
</string>
<string name="button_pt">Lingua Portuguesa
</string>
<string name="mensagem">Mensagem em
Portugus!!!</string>
</resources>
Aqui as duas linhas importantes so as seguintes:
<string name="button_pt">Lingua
Portuguesa</string>
<string name="mensagem">Mensagem em
Portugus!!!</string>
A primeira linha a responsvel pelo contedo do nome do
button, a segunda linha ser a mensagem definida que ser
apresentada no momento em que o button for clicado.

Agora com a criao deste novo ficheiro que vamos realmente dar suporte ao novo idioma, sendo que este novo
ficheiro strings.xml dever ter uma estrutura idntica ao
ficheiro strings.xml padro.

3 Passo: Criar uma nova pasta values para o novo idioma

Para que possamos ento dar o suporte a mltiplos idiomas


nossa aplicao teremos de criar uma nova pasta values,
mas desta vez com uma alterao devido a este ter de ser diferenciada para o novo idioma, como por exemplo values-en.
Neste exemplo eu defini o idioma base como Portugus e o
idioma secundrio o Ingls e por esse mesmo motivo estou a
usar a pasta values-en. Podero ter acesso a todos os cdigos de idiomas suportados pelo Android aqui:

Ao escolhermos a criao do novo ficheiro xml, devemos ter


em ateno alguns aspetos, tais como o Resource Type
que dever ser do tipo values como mostra a imagem acima.

http://developer.android.com/reference/java/util/Locale.html

Logo de seguida seremos presenteados com mais algumas


opes, sobre as quais devemos selecionar Country Code,
e escolher o identificador, neste caso o en referente

28

A PROGRAMAR
COMO SUPORTAR DIFERENTES IDIOMAS NUMA APP ANDROID
lngua Inglesa.

adicionaremos o seguinte mtodo no final:


//Mtodo ActionMethod
public void actionMethod(View v){
String msg = (String)getText
(R.string.mensagem); //Acesso string
//alojada no ficheiro "strings"
Toast.makeText(getBaseContext(), msg,
Toast.LENGTH_LONG).show(); //Apresntao
//da mensagem no ecr
}
Este mtodo ir ser chamado cada vez que o button for
clicado, apresentando ento a mensagem definida.
6 Passo: Alterao do Idioma no Sistema Operativo e
Respetivo Teste

Se tudo correu como o previsto a nossa aplicao estar


agora preparada para lidar com dois idiomas, mas para isso
iremos testar e verificar se tudo correu como o que desejvamos.
Antes de mais supomos que o idioma definido pelo Sistema
Operativo o Portugus, e assim sendo a aplicao deveria apresentar o seguinte resultado:

Tal como havia dito acima a estrutura deste novo ficheiro


strings ser em tudo muito semelhante ao ficheiro strings
padro, pelo que dever copiar todo o contedo do ficheiro
strings padro para este novo ficheiro strings, alterando
apenas o contedo de duas linhas.
A estrutura deste novo ficheiro dever ser a seguinte:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MultiLinguaApp</string>
<string name="action_settings">Settings
</string>
<string name="button_pt">English Language
</string>
<string name="mensagem">English Message!!!
</string>
</resources>
Como percetvel a estrutura do ficheiro em tudo semelhante
ao ficheiro padro, tendo sido apenas alteradas as linhas que
possuam o contedo do nome do button e da mensagem.
5 Passo: Definir
MainActivity.java

mtodo

actionMethod

no

Depois de termos definido os contedos referentes aos dois


idiomas vamos agora definir o mtodo que nos permitir fazer
o click no button e nos ser apresentada a mensagem definida.
Para isso devemos navegar at pasta src/
nome_package e abrir o ficheiro MainActivity.java ao qual

29

Agora necessitamos de alterar o idioma do Sistema Operativo para Ingls de modo a que possamos testar se tudo est
como o previsto. Para alterar o idioma deveremos aceder ao
Menu Definies, Idioma e entrada, Idioma escolhendo
ento o Ingls.

A PROGRAMAR
COMO SUPORTAR DIFERENTES IDIOMAS NUMA APP ANDROID
Definido o idioma para Ingls o resultado da aplicao dever
ser o seguinte:

Se tudo correu como o esperado, ambos os idiomas estaro


disponveis na aplicao, sendo que a aplicao ir sempre
verificar qual o idioma definido pelo Sistema Operativo
para ento depois escolher o idioma a utilizar.
Para suporte a mais idiomas seria necessrio apenas repetir
o processo, para os idiomas pretendidos.
Existem outras formas de dotar as apps Android com suporte a mltiplos idiomas, algumas delas recorrendo a tradutores. Neste pequeno tutorial o objetivo era apenas demonstrar
uma forma simples de adicionar suporte a mltiplos idiomas
ao desenvolvimento de uma aplicao Android.

AUTOR
Escrito por Nuno Santos
Curioso e autodidacta com uma grande paixo pela programao e robtica, frequnta o curso de Engenharia Informtica na
UTAD alimentando o sonho de ainda vir a ser um bom Engenheiro Informtico. Estudante, Blogger, e moderador no frum
Lusorobtica so algumas das suas actividades. Os seus projectos podem ser encontrados em: http://
omundodaprogramacao.com/

30

A PROGRAMAR
XXXXX

SANDCASTLLE HELP FILE BUILDER


Passo 4: Executar o instalador SandcastleInstaller.exe

Introduo
Este manual explica como instalar e utilizar a aplicao
SandCastle Help File Builder de modo a gerar documentao
das assemblies que geramos.
O que esta aplicao faz pegar numa DLL e pegar no XML
dos comentrios associados aos mtodos, classes, namespaces e propriedades, e coloca-lo num repositrio user-friendly.
Instalao
Passo
1:
Aceder
ao
site
http://shfb.codeplex.com/
documentation e escolher o link Latest Release.

Passo 5: Caso o Microsoft Help 2 compiler no esteja instalado, prosseguir com a instalao.

Passo 2: Fazer download do pacote de instalao com a ltima


verso.

Passo 6: Instalar o SHFB

Passo 3: Extrair o contedo do ficheiro .ZIP e abrir a pasta.

31

A PROGRAMAR
SANDCASTLLE HELP FILE BUILDER
Passo 7: Instalar o package para o Visual Studio (2010 / 2012 /
2013)

Passo 10: Criar um documento BATCH com o seguinte contedo:


set DXROOT=c:\Program Files (x86)\Sandcastle
set SHFBROOT=c:\Program Files (x86)
\EWSoftware\Sandcastle Help File Builder
set LANGUAGE=
"%SHFBROOT%\SandcastleBuilderGUI.exe"
Este BATCH arrancar o GUI do SandCastle Help File Builder.
Criao de documentao
Passo 1: Executar o documento BATCH criado na instalao.
Ser aberta a aplicao SandCastle Help File Builder.

Passo 2: Criar um novo projecto (Start a brand new project).

Passo 8: Instalar os Schemas MAML (para intelisense)

Ser mostrada a estrutura do projecto:

Passo 9: Instalar os Snipets MAML

Passo 3: Escolher os formatos de help file a gerar, a framework, etc.


Prosseguir at ao fim da instalao.

32

A PROGRAMAR
SANDCASTLLE HELP FILE BUILDER
Passo 4: Adicionar DLLs e XMLs como origens de docu-

Passo 5: Gerar o help file

mentao (Documentation source

A documentao ser gerada na pasta Help, dentro da pasta


do projecto que originou a DLLs (document source).
Referncias
http://broadcast.oreilly.com/2010/09/build-htmldocumentation-for-y.html
http://shfb.codeplex.com/documentation

AUTOR
Escrito por Srgio Ildefonso

33

Anlises
Desenvolvimento de aplicaes profissionais em Android
Projetos de POO em JAVA

Review

Desenvolvimento de aplicaes profissionais em Android

Ttulo: Desenvolvimento de aplicaes


profissionais em android

co de aplicaes. Continuando a anlise deste captulo, o


seu contedo ir permitir ao leitor usar fragmentos e construir aplicaes que se adaptem a mltiplos ecrs, implementar formas diversas de navegao na aplicao, personalizar
a interface do sistema assim como da prpria aplicao, usar
tcnicas de acessibilidade como text-to-speech, speech-totext ou multitoque e finalmente aplicar animao aos elementos da interface grfica atravs de grficos 2D e 3D. No trmino do captulo 2, o leitor ser capaz de desenvolver aplicaes com uma forte componente grfica e com grande atratividade para o utilizador final com a incorporao de grficos
e animao.

Autor: Ricardo Queirs


Editora: FCA - Editora de Informtica,
Lda.
Pginas: 320
ISBN: 978-972-722-796-9
O livro Desenvolvimento de Aplicaes Profissionais em
Android, de Ricardo Queirs, destina-se principalmente a
programadores que pretendam evoluir os seus conhecimentos sobre Android conhecendo as especificidades e novidades introduzidas pela verso 4.4 (a verso KitKat a utilizada por Ricardo Queirs ao longo da obra). Embora este livro
possa ser utilizado por aqueles que pretendem iniciar-se no
desenvolvimento de aplicaes Android, considero que poder haver algumas dificuldades em alguns captulos, prevendo que seja necessrio recorrer a alguns exemplos mais
simples antes de implementar os exemplos que acompanham este livro.

O captulo 3 ir permitir incorporar bases de dados nas aplicaes e fazer backup dos mesmos para a nuvem. Dada a
crescente transmisso de dados atravs da Internet e da
consequente necessidade de serializao de dados, so
apresentados dois formatos para transmisso de dados em
rede, mais concretamente o JSON e o Google Protocol Buffers. Este captulo termina com uma referncia a frameworks
de acesso e impresso de dados.
Tendo em conta que uma grande parte de aplicaes reais
comunica com o exterior para obteno/manipulao de informao, Ricardo Queirs introduz no captulo 4 os conceitos fundamentais e boas prticas para comunicao com o
exterior de forma eficiente, dando nfase ao protocolo http. A
integrao de Web Services j existentes em aplicaes
Android tambm fortemente referida neste captulo, salientando-se um exemplo prtico que utiliza a API do Facebook.
No captulo 5, o autor aborda as tecnologias de conetividade
mais comuns como USB, Bluetooth e Wi-Fi, abordando tambm o NFC. So dados em todos os casos exemplos prticos de aplicao que conduzem o leitor na fcil implementao de aplicaes com recurso a estas tecnologias.

Ricardo Queirs comea por introduzir, no captulo 1 do seu


livro, as ferramentas de desenvolvimento Eclipse e Android
Studio (atualmente em fase Beta) - e um dos conceitos mais
bsicos de programao para Android: as atividades, que
representam a interface grfica perante o utilizador.
O captulo 2 acrescenta um conjunto variado de funcionalidades avanadas ao nvel grfico, podendo aqui ser necessrio
um parntesis para programadores mais jovens no Android,
como j acima referi, recorrendo por exemplo primeira obra
do autor e que foca aspetos mais bsicos do desenho grfi-

36

Review
O captulo 6 aborda dois tpicos cada vez mais atuais e ne-

O ltimo captulo deste livro termina com aquilo que o autor


chama de Tpicos Avanados e onde esto includos exemplos de como criar e incluir grficos numa aplicao atravs
do Google Chart Tools, como fazer a comunicao entre
cliente e servidor para manter atualizao de estado usando
o Google Cloud Messaging, como obter informao sobre
pontos de interesse atravs do Google Places API ou como
desenvolver aplicaes usando a verso Android Wear. Esta
destinada especificamente para wearables, ou seja, objetos que usamos, como por exemplo relgios, culos, etc.

cessrios quando se fala de aplicaes mveis e que se


prendem com a utilizao de mapas e localizao. Atravs
dos mapas possvel centrar na posio do utilizar, mostrar
rotas, adicionar marcadores representado diversos pontos de
interesse ou adicionar formas (crculos, polgonos) para melhor realar uma rea. Estes conceitos so ilustrados no livro
com vrios exemplos fceis de perceber e implementar. Por
outro lado, Ricardo Queirs introduz a nova API de localizao denominada de Fused Location Provider atravs de trs
exemplos prticos principais: fazer tracking peridico da posio, utilizao de geofencing para perceber quando um
utilizador sai ou entra de uma dada rea e reconhecimento
da atividade do utilizador (se est a andar, conduzir, parado).

Em suma e em jeito de concluso, parece-me um livro bem


estruturado, com exemplos de aplicaes em praticamente
todos os tpicos e que por isso recomendo vivamente a
quem pretenda evoluir os seus conhecimentos no desenvolvimento de aplicaes para Android.

AUTOR
Escrito por Sara Paiva
docente da Escola Superior de Tecnologia e Gesto do Instituto Politcnico de Viana do Castelo e leciona h 9 anos a Unidade Curricular de Computao Mvel, atualmente com as tecnologias Android e iOS. A sua atividade de investigao e participao em projetos foca-se nas solues mveis e tambm na Pesquisa Semntica, temtica em que se doutorou na Universidade
de Vigo.

37

Review

Projetos de POO em JAVA


Sem demrito algum para os restantes captulos do livro, foi
com particular agrado que li o captulo stimo onde so abordadas as streams de input/output, que por vezes demais so
ocultas, em bibliotecas, de forma a simplificar a aprendizagem, sem se abordar na realidade como funcionam streams de texto, streams de objectos, etc. quase comum,
fazer-se uso de bibliotecas codificadas propositadamente
para o trabalho com streams, para de certa forma
simplificar o funcionamento e o conceito, o que a meu ver
resulta num prejuzo real para quem aprende, uma vez que
uma parte substancial do conhecimento no de todo transmitido.

Ttulo: Projetos de POO em JAVA


Autor: F. Mrio Martins
Editora: FCA - Editora de Informtica,
Lda.
Pginas: 320
ISBN: 978-972-722-792-1
O livro Projectos de POO em JAVA, de Mrio Martins, destina-se principalmente a estudantes de grau universitrio e
secundrio, bem como a profissionais de tecnologias de informao de uma forma geral, apresentando a programao
orientada a objectos com a linguagem Java. Ao longo do
livro, so encontrados exerccios que reforam a aprendizagem dos contedos, bem como promovem a aplicao do
conhecimento transmitido a cada captulo, pela via da sua
utilizao prtica.

Em suma e de forma muitssimo resumida, creio que um


livro essencial e claramente recomendvel para todos aqueles que desejam aprender Java, de forma autodidacta, como
tambm para todos os estudantes que venham a ter matrias ligadas programao orientada para objectos com
linguagem Java, uma vez que a forma como so abordados
os conceitos, a programao e principalmente os exerccios,
fazem do livro um excelente guia de aprendizagem.

Conforme se vai avanando na leitura, os conhecimentos


necessrios passam a ser encadeados de exerccio em exerccio, aumentando a complexidade e dando uma viso mais
abrangente sobre a aplicabilidade dos conceitos a problemas
reais.

Definitivamente uma obra que recomendaria a estudantes


dos diversos graus de cursos ligados programao e que
seria um agrado ver na bibliografia dos novos cursos TeSP
(Tcnico Superior Especialista), que se iniciaro no prximo
ano lectivo, uma vez que a componente prtica do livro, faz
dele um guia excepcional para uma aprendizagem orientada
programao e resoluo de problemas reais.

No captulo quarto, (aquele que me chamou mais a ateno


at ao momento em que li o quinto), foi com agrado que vi
abordadas coleces menos utilizadas como o caso da
TreeSet, uma vez que na maioria dos casos que conheo,
focam-se em grande maioria nos hashmaps, hashset e arraylist, sem qualquer meno ao TreeSet, que se revela bastante til em utilizaes prticas do dia a dia, mas que me
parece ser preterido por outras coleces, quando usado em
ambiente de ensino.
De entre todo o livro o capitulo quinto, sobre coleces, de
todos o que mais me agradou, particularmente pela forma
como aborda os conceitos de hierarquia, herana, classes
abstractas e polimorfismo, que tantas vezes causa maiores
dificuldades de compreenso, quando se abordam estes
temas, quer na leitura de documentao, quer no ensino
mais tradicional.

AUTOR
Escrito por Antnio Santos
Entusiasta da tecnologia desde tenra idade, cresceu com o ZX Spectrum, autodidacta, com uma enorme paixo por tecnologia,
tem vasta experincia em implementao e integrao de sistemas ERP, CRM, ERM, BI e desenvolvimento de software por
medida nas mais diversas linguagens. Membro da Comunidade Portugal-a-Programar desde Agosto de 2007, tambm membro da Sahana Software Foundation, onde Programador Voluntrio. Neste momento aluno no Instituto Politcnico de Viana
do Castelo, na Escola Superior de Tecnologia e Gesto, sendo j diplomado do Curso de Especializao Tecnolgica em Tecnologias e Programao de Sistemas de Informao.

38

Media Partners da Revista PROGRAMAR

No Code
Windows 10: A Nova Gerao
Xamarin: Sem Custos para Estudantes

No Code

WINDOWS 10: A NOVA GERAO WINDOWS


O regresso do Start Menu no representa necessriamente o
fim do Start Screen que usamos no Windows 8.0 ou 8.1. No
Windows 10 continua a existir a possbilidade de ativar o
Start Screen e podemos ainda depois de activar esta opo,
definir o comportamento ao iniciarmos sesso no PC, ou
seja, podemos escolher entre ver o Desktop ou o Start
Screen. O cenrio apenas muda de acordo com o tipo de
mquina onde instalamos o Windows 10. Por exemplo se for
instalado num PC com rato e teclado, o Windows 10 vai
disponibilizar ao utilizador o Start Menu mas se for instalado
num Tablet, ento ser apresentado o Start Screen por se
tratar de um dispositivo com capacidades Touch.

Introduo
No passado ms de Outubro, a Microsoft anunciou
publicamente o Windows 10 e apresentou a sua viso para a
prxima verso do seu Sistema Operativo.
O Windows 10 o primeiro de uma gerao totalmente nova
do Windows , onde as novas funcionalidades iro possibilitar
novas formas de trabalho, lazer e mobilidade aos utilizadores
tanto na vertente domstica como na vertente empresarial,
sendo neste ltimo onde veremos alteraes significativas e
que permitiro uma transio mais suave de verses
anteriores para o novo Windows.

Poder ver estas configuraes no seguinte vdeo: Como


activar o Start Screen no Windows 10 Technical Preview.

O Windows 10 vai adaptar-se e funcionar na maior gama de


dispositivos, como por exemplo do IOT (Internet Of Things),
dos Data Center empresariais em todo mundo, passando
pelos dispositivos que dispomos e utilizamos no dia-a-dia
como o PC, Tablet, Smartphone e tambm na XBOX.
Com o crescente nmero de dispositivos, tambm as
aplicaes e a sua distribuio ir evoluir. A Microsoft ir
disponibilizar
uma
plataforma
que
permitir
aos
programadores o desenvolvimento e implementao de uma
aplicao nos diferentes tipos de dispositivos e tambm uma
nova loja de aplicaes unificadas, que tornar a compra e
atualizao das mesmas mais simples para os utilizadores.

Imagem do desktop com o Start menu aberto


Outra alterao que notamos ao utilizar o Windows 10 pela
primeira vez o comportamento da Charm Bar. Quando
instalamos o Windows 10 numa mquina virtual, rapidamente
reparamos que o acesso Charm Bar pelo canto superior
direito do ecr no est ativo, apesar de a opo estar
configurada por defeito. Se formos um utilizador regular da
Charm Bar podemos ainda mostra-la atravs da combinao
de teclas WIN + C, como acontece tambm no Windows 8.1.
Por outro lado, se o Windows 10 for instalado num PC com
funes Touch, a Charm Bar continua a ser mostrada quando
fazemos o Swipe da direita para a esquerda do ecr.

As novas funcionalidades do Windows 10


Start Menu
O Start menu utilizado durante muitos anos em verses
anteriores ao Windows 8 est de volta. Este menu apresenta
uma nova interface e permite o acesso rpido s aplicaes
e ficheiros que utilizamos com mais frequncia, e vai permitir
personalizar todo o Start menu com aplicaes modernas,
programas e sites favoritos, semelhana do que acontece
atualmente com o Start Screen do Windows 8.0 ou 8.1.

Como a Charm Bar contm funes essenciais que


utilizamos nas aplicaes como por exemplo o link para as
Definies, Procura e Partilha, a Microsoft alterou tambm a

41

No Code
Boto Task View e Search

localizao destas opes para a janela das aplicaes,

criando assim o App Command Menu.

O Windows 10 possui agora na Taskbar dois novos botes: o


Task View e o Search. O Task View um renovado
ALT+TAB que permite visualizar todos os ficheiros e
aplicaes abertas, possibilitando uma rpida alternncia e
acesso atravs de um s clique a quaisquer desktops virtuais
que tenhamos criado. O Search est de volta ao Start menu e
foi tambm includo na Taskbar do Windows 10, permitindo
uma procura rpida de aplicaes e ficheiros no PC, e
tambm contedo na Web.

Apps no Desktop
No Windows 10, as aplicaes da Loja Windows so agora
abertas no mesmo formato que os programas de desktop.
Podem ser redimensionadas e movidas, e dispem de barras
de ttulo na parte superior que permitem maximizar,
minimizar e fechar com um clique.

Tal como o Start Menu, tambm os botes de Search e Task


View so personalizveis e os utilizadores podero optar por
ocultar os mesmos na Taskbar. Esta configurao poder ser
visualizada no seguinte vdeo: Como ocultar os botes
Search e Task View da taskbar, no Windows 10.
Home View no File Explorer
No Windows 10, tambm o File Explorer est a ser alvo de
melhorias, e na Technical Preview, j conseguimos ver novas
funcionalidades activas. Quando usamos a combinao de
teclas WIN+E ou clicamos no cone File Explorer na
Taskbar, a janela do File Explorer remete-nos para um novo
local chamado Home View, em vez do This PC como
acontece no Windows 8.0 ou 8.1. Esta nova localizao,
permite-nos visualizar e aceder rapidamente aos ficheiros ou
pastas que usamos com frequncia.

Melhorias na funcionalidade Snap


Atravs das melhorias na funcionalidade Snap, trabalhar
com diversas aplicaes no ecr mais simples e intuitivo.
Esta funcionalidade foi redesenhada para permitir dispor no
ecr at 4 aplicaes cada uma num dos quadrantes
disponveis, indicar outras aplicaes em execuo e que
possam ser encaixadas e tambm sugerir o preenchimento
de espaos ainda no ocupados nos quadrantes.

42

No Code
obsoletos. Considerando tambm a grande
importncia que a compatibilidade tem para as
empresas, o Windows 10 ter para alm de uma
maior compatibilidade com as aplicaes mais
frequentes, ferramentas que as empresas podero
usar para testar a compatibilidade das aplicaes que
usam nas suas organizaes.

Esta funcionalidade por uma questo de privacidade pode

ser alterada e, desta forma, dizemos ao Windows que


esquea quais os ficheiros que acedemos recentemente e
que no mostre as pastas que abrimos com frequncia. As
configuraes necessrias para ocultar esta informao do
Home View podem ser visualizadas no seguinte vdeo: Como
ocultar as Pastas e ficheiros recentes no File Explorer do
Windows 10.

Loja de aplicaes para empresas. Este novo conceito


vais permitir a unificao e vendas de aplicaes
atravs de licenciamento por volume e de acordo com
o tipo de identidade da empresa. Atravs deste novo
modelo, as empresas podem adquirir as aplicaes e
gerir de forma flexvel a sua distribuio, recuperao
e reaproveitamento das licenas associadas s
aplicaes.

Escolha do modelo de atualizao do Windows. As


empresas podero definir o tipo e com que frequncia
os seus sistemas recebero atualizaes. Empresas
que no possam fazer determinado tipos de
atualizaes que possam afetar o normal
funcionamento do seu negcio, podero optar por
instalar apenas atualizaes criticas e de segurana,
enquanto outras podero escolher qual os utilizadores
ou grupos de utilizadores recebero todas as
atualizaes que estiverem disponveis.

Implementao de novos sistemas de segurana e


proteo de informao. No Windows 10 existir uma
maior proteo na identidade dos utilizadores e ser
possvel implementar por exemplo passwords com 2
fatores de autenticao. Este tipo de sistemas de
segurana permitiro uma maior resistncia a fuga,
roubo ou tentativas de phishing quando os utilizadores
acedem a sites ou usam aplicaes.

Segurana da informao das empresas. Para alm


da encriptao atravs do Bitlocker, o Windows 10
possuir contentores especiais que funcionam ao
nvel de aplicaes e ficheiros, criando assim uma
camada extra na proteo da informao mais
sensvel.

Desktop Virtuais
O Windows 10 inclui uma nova funcionalidade que pode ser
ativada atravs do boto Task View, e que nos permite criar
at 7 desktops virtuais. Desta forma podemos em vez que
subcarregar o desktop principal com as aplicaes e ficheiros
que usamos habitualmente, distribuir os mesmos nos
desktop virtuais que so facilmente acedidos quer atravs de
um simples clique ou ento de um conjunto de teclas de
atalho.

Existem ainda algumas personalizaes interessantes que


podemos fazer, como por exemplo redimensionar e mudar a
cor do Start Menu ou afixar pastas na Taskbar. Estas e
outras opes podero ser visualizadas
em 120segundos.net.
Estas no sero com certeza as nicas novidades presentes
no Windows 10 e medida que novas Builds sejam
disponibilizadas, veremos certamente mais funcionalidades a
surgir e que beneficiaro tanto utilizadores domsticos como
utilizadores empresariais.

O Windows Insider Program


O Windows Insider Program o maior programa de
desenvolvimento em colaborao aberta de sempre. Este
novo formato de colaborao tem como objetivo mudar a
forma como o Windows desenvolvido e disponibilizado,
sempre com o intuito de melhor satisfazer as necessidades
dos utilizadores e empresas. Ao contrrio do que aconteceu
em verses anteriores do Windows, onde o acesso s
verses Beta era apenas possvel atravs de convite, o
Windows Insider Program aberto a qualquer utilizador que
queira testar e submeter feedback sobre a Technical Preview
do Windows 10.

Windows 10 para Empresas: Robustez e Segurana


O Windows 10 para alm das alteraes no interface vai
possuir na verso dedicada s empresas O Windows 10 for
Enterprise apresentando melhorias muito significativas ao
nvel da implementao e segurana tanto das identidades
como da informao. As principais novidades na vertente
empresarial so:

Possibilidade de fazer upgrades in-place no


Windows 7 e Windows 8. Desta forma possvel
controlar os custos e tempos de implementao do
Windows 10 e tornar desta forma o wipe-and-reload

43

No Code
No Slow Ring a distribuio feita algum tempo depois da
Fast aps os Insiders terem detectado e submetido
feedback sobre a nova Build. Esta distribuio j contempla a
correco de bugs identificados at ento. A partir da Build
9879, disponibilizada em Novembro, a Microsoft passa a
disponibilizar tambm a imagem .ISO das novas Builds na
mesma altura que lana a atualizao para os Insider que
optaram pelo Slow Ring.

Os utilizadores que desejarem participar no Windows Insider

Program recebero aps registo, o acesso Technical


Preview do Windows 10 e s novas Builds disponibilizadas
ao longo do ciclo de desenvolvimento, que podero utilizar
para testar as novas funcionalidades e tambm enviar
sugestes ou reportar bugs, atravs da ferramenta de
Feedback includa.

download da Technical Preview, poder ser feito atravs do


link: https://insider.windows.com/

Ajuda e Suporte
Para alm da ferramenta de feedback, os Insider podero
obter esclarecimento sobre dvidas relacionadas com o
Windows 10 ou obter suporte para a resoluo de problemas,
nos seguintes sites:

O Windows 10 Technical Preview est disponvel para


download nas verses 32 e 64 bits, nos idiomas Ingls,
Chins Simplificado e Portugus do Brasil.
Tratando-se de uma verso de pr-visualizao,
aconselhvel que a sua instalao seja feita em ambientes
virtuais ou em PCs que no sejam usados como
equipamento principal. Para alm destas recomendaes, o
site do Windows Insider Program contm todas as
informaes uteis sobre os requisitos para a instalao da
Technical Preview, os possveis cenrios de atualizao a
partir de outras verses do Windows e como fazer a
atualizao para Builds mais recentes.

Frum do Technical Preview

Frum Technical Preview for Enterprise

Para ficar a par de todas as novidades relacionadas com o


Windows 10, poder consultar ainda os seguintes recursos
de forma regular:

Os Insider aps a instalao da Technical Preview podero


definir qual a frequncia com que querem receber as novas
Builds, podendo ser configura a opo Fast ou Slow Ring".
No Fast Ring, os Insider recebero as Build via atualizao
automtica assim que seja disponibilizada mas ficaram mais
expostos a possveis bugs no corrigidos nesta fase.

Blogging Windows

@GabeAul

Concluso
Em concluso, o Windows 10 trs grandes novidades ao
nvel da adaptabilidade nos diversos dispositivos, novas
funcionalidades no UI e tambm na segurana da identidade
e informao dos utilizadores. A simplicidade do Windows
Insider Program permitir a qualquer IT Pro ou entusiasta dar
incio aos seus testes e a enviar as suas sugestes atravs
da ferramenta de feedback disponvel. Bons testes.

AUTOR
Escrito por Nuno Silva
Microsoft MVP Windows Expert - Consumer |
Microsoft Technical Beta Tester

44

No Code

XAMARIN: SEM CUSTOS PARA ESTUDANTES

Introduo

com o conceito cross-platform, que de uma forma geral,


consiste em partilhar um conjunto de funcionalidades comum
s vrias plataformas (a partilha da camada de acesso a
webservices um bom exemplo, pois ser igual para
qualquer plataforma), fazendo com que todo o processo de
desenvolvimento e manuteno seja mais reduzido. claro
que iremos ter funcionalidades especficas de cada
plataforma (exemplo disso a interface com o utilizador).
Atravs do Abstraction Pattern possvel criar classes que
representem funcionalidades comuns e em que a sua
implementao ser especfica de cada plataforma. Para os
mais interessados, que queiram ver um exemplo em
concreto, consultem o projeto Open Source XFLabs, mais
especificamente o servio para tirar fotografias, a Camera.

A Xamarin uma empresa americana, mais especificamente


de So Francisco, que foi criada em 2011, por engenheiros
que trabalharam nos projetos Mono, MonoTouch e Mono for
Android. Esta empresa tem foco no desenvolvimento de
software que ir permitir que os programadores de
aplicaes mveis criem aplicaes usando C# ou F#, que
corram em dipositivos Android e IOS, como se de aplicaes
nativas se tratasse.
Do leque de produtos da Xamarin, destacamos a Plataforma
Xamarin (representa um conjunto de ferramentas e produtos
para desenvolvimentos de aplicaes mveis, onde o
Xamarin.Android, o Xamarin.IOS, o Xamarin Studio e
o Xamarin para Visual Studio se incluem), o Xamarin Test
Cloud (servio que permite testar aplicaes em diversos
dispositivos fsicos), o Xamarin Insights (servio que permite
acompanhar em tempo real o funcionamento das aplicaes,
fornecendo relatrios de erros, eventos e ajuda a
compreender como os utilizadores usam a aplicao,
baseado nos eventos ocorridos na aplicao).
Viso geral sobre o desenvolvimento
As ferramentas da Xamarin, mais especificamente o IDE
Xamarin Studio e o Xamarin para Visual Studio, vo permitir
que os programadores faam um desenvolvimento crossplatform de aplicaes para os dispositivos Android e IOS,
permitindo assim a partilha de cdigo comum e um
desenvolvimento mais rpido das aplicaes. Isto s ir ser
possvel atravs do Xamarin.Android e Xamarin.IOS que
representa o conjunto de ferramentas e SDK necessrio para
desenvolver aplicaes Android e IOS, respetivamente.

Vrias camadas de reutilizao de cdigo e especificidade de


cada plataforma, usando Xamarin Forms.
Nota: Para o desenvolvimento de aplicaes Windows
teremos que usar as ferramentas e SDKs fornecidos pela
Microsoft, sendo isso externo aos produtos Xamarin. E todas
as aplicaes criadas podem ser submetidas na loja da
Apple, na PlayStore, Windows Phone Store, entre outras.
Para os interessados em consultar os preos dos vrios
produtos,
devem
consultar
a
loja
da
Xamarin
em store.xamarin.com.
Plataforma Xamarin para estudantes

No passado ms de Novembro, a Xamarin anunciou que a


Plataforma Xamarin passaria a ser gratuita para estudantes,

Muitos dos programadores podero no estar familiarizados

45

No Code
Programa Xamarin Student Ambassador

o que significa que os estudantes passam a ter acesso


s licenas INDIE do Xamarin.Android e
Xamarin.IOS, antes deste anuncio o preo era de $99
anuais.

gratuito

Os interessados nesta oferta devem preencher o formulrio


na seguinte referncia xamarin.com/student e aguardar que
seja solicitada a verificao do estatuto de estudante. Em
caso de dvidas devem usar o email students@xamarin.com.

A Xamarin no ficou por aqui em relao aos anncios para


estudantes, e lanou o programa Xamarin Student
Ambassador, programa este destinado para potenciais
estudantes que gostem de criar aplicaes, ensinar os
outros, estar sempre na vanguarda da tecnologia e fazer
apresentaes. E claro, oferecendo em troca um conjunto de
benefcios bastante interessantes.

Os professores podero entrar em contacto com a Xamarin,


para terem acesso s ferramentas e material didctico,
usando o email education@xamarin.com.

Os interessados devem preencher o formulrio Xamarin


Student Ambassador Application. E em caso de dvida
devem usar o email education@xamarin.com.
A Comunidade XamarinPT

AUTOR
Escrito Por Sara Silva
Licenciada em Matemtica Especialidade em Computao, pela Universidade de Coimbra e Microsoft Certified Profissional Developer. Atualmente o seu foco de desenvolvimento incide em Windows Phone e Windows 8 Store Apps. O seu Blog
www.saramgsilva.com e o twitter @saramgsilva.

46

No Code

QUE TIPO DE BD S TU

Desde que nascemos somos autnticas esponjas,


absorvendo informao nossa volta. Tornamo-nos numa
verdadeira base de dados em constante actualizao.
Aprendemos a comer, a falar, a ler e a escrever Fazemos
tantas coisas que no temos ideia como aprendemos. No
entanto, chega o momento em que no absorvemos apenas
o que nos rodeia, mas buscamos ns prprios informao e
aprendizagens que nos interessam.

Concordo que os docentes no devem leccionar apenas o


que se utiliza no mercado de trabalho, seno no haveriam
ideias novas.

Comeamos na escola, quando nos interessamos por


determinados assuntos mais do que por outros. Depois no
ensino secundrio, em que escolhemos j uma rea de
estudo para aprofundar. Finalmente no ensino superior, onde
fazemos um curso na rea que escolhemos (pelo menos
muitos de ns).

Mas o buslis da questo este: at que ponto estamos


confortveis no nosso conhecimento? At que ponto nos
contentamos com a mediocridade de no procurar aprender
mais, e socorremo-nos do amigo que at sabe umas coisas,
na hora do aperto?

Ora no decorrer do nosso percurso de vida, vamo-nos


diferenciando pela positiva ou pela negativa, relativamente
aos que nos rodeiam. Podemos ser o emplastro que se cola
aos que trabalham, podemos ser daqueles que trabalha
apenas para o 10, para fazer a disciplina e j bom,
podemos trabalhar para ter notas razoveis, aprendendo
apenas o que os professores debitam em horas e horas de
aulas, ou podemos ser pesquisadores, procurando cada vez
mais conhecimento.

O tempo das desculpas esfarrapadas j era. Diz-se por a


que vivemos na era do conhecimento e da tecnologia, e que
o saber no ocupa lugar. Aquele que realmente quer
aprender e evoluir no seu percurso de aprendizagem,
potenciando-se como uma mais-valia no mercado de
trabalho, pode encontrar as mais variadas ferramentas que
lhe permitem, mesmo no conforto do seu lar, continuar a
aumentar a sua base de dados.

Ressalvando todos aqueles que podem ser considerados


excepes, so muitos os que apenas se contentam com o
que lhes ensinado, sem se preocuparem em questionar ou
ir mais alm. Isto resulta no mercado de trabalho que temos
hoje em dia, com tudo feito e inventado, chegando ao ponto
de cada mnima inovao ou novidade ser motivo de notcia
nacional.

A vantagem do ser humano que, ao contrrio de um


computador que est limitado pela sua capacidade de disco
rgido, tem um crebro que vai sempre arranjando espao
para tudo o que entra. Muitas vezes crasha, certo, mas no
nada que uma boa dose de descanso no resolva.

Ora se os currculos das disciplinas esto condicionados pelo


conhecimento dos docentes que as leccionam, muitos deles
alheios ao mercado de trabalho e s realidades extra-sala de
aula, como pode haver lugar para evoluo tecnolgica?

O problema do ser humano em geral uma coisa muito


comum, que muita gente tem, mas poucos gostam de admitir:
Preguia.

47

No Code
Somos capazes de perder horas em redes sociais a fazer
likes s fotos dos amigos que foram de frias ao fim do
mundo, a ver o que se passa na vida de uns e de outros, ou
at em joguinhos nas mais variadas formas Mas quando
foi a ltima vez que lemos um livro? Quando foi a ltima vez
que procuramos novas informaes e novidades na nossa
rea de trabalho?

a programar existem pginas como a Code.org que, atravs


de jogos introduzida linguagem de programao de uma
forma divertida e atractiva para os mais pequenos, e simples
para os maiores que esto a dar os primeiros passos.
Ainda contamos com a CodeSchool que tambm utiliza jogos
mas com um contedo explicativo do cdigo, ou com a
Microsoft Virtual Academy, que disponibiliza desde cursos
com tutoriais passo a passo em que o aluno acompanha no
seu tempo, a vdeos Jump Start, sendo basicamente
conversas sobre temas em que o utilizador pode interagir
com os apresentadores e entrevistados atravs de um chat
em tempo real.

Porque que estamos sempre espera de ter o peixe


assado na brasa, no pratinho com a faca e garfo ao lado, em
vez de pegarmos na cana e irmos pesca?
Para quem gosta de pescar na rea das tecnologias, o que
no falta so lagos, rios e mares. Existem pginas que nos
presenteiam com cursos dinamizados nas mais variadas
formas, permitindo assim, no conforto da nossa casa, no
nosso fuso horrio, acompanhar temas e evoluir no nosso
conhecimento. Temos como exemplo o www.coursera.org.
Coursera uma empresa de tecnologia educacional com
sede em Mountain View e fundada pelos professores de
cincia da computao Andrew Ng e Daphne Koller da
Universidade Stanford.(in Wikipedia) Ao visitar a sua pgina
obtemos formao certificada nos mais variados campos,
desde a programao psicologia, da economia
composio musical.

A vantagem de muitos destes websites o facto de na


maioria dos seus contedos serem gratuitos e de livre acesso
tendo ainda certificao reconhecida, o que uma mais-valia
para qualquer curriculum vitae.
Muitas oportunidades passam ao lado para aqueles que no
se preocupam em evoluir. A curva de aprendizagem declina
se no fizermos nada. A palavra emburrecer pode no
aparecer no dicionrio, mas existe na vida real. Basta no
fazermos nada e ficarmos com aquilo que j sabemos,
achando que somos uns grandes prodgios. D que pensar,
no d?

Para quem j tem rebentos e gostava que eles aprendessem

AUTOR
Escrito por Sara Santos
Licenciada em Docncia, desenvolve de momento aplicaes informticas ligadas educao, tendo j participado em projectos de programao e traduo de software, incluindo a gesto para lngua portuguesa do software Sahana-Eden, cujo
projecto de traduo gere, desde o seu comeo at ao momento. membro do Staff da Revista PROGRAMAR desde Agosto
de 2011, adicionalmente participando na redaco de artigos e traduo de texto para as noticias. Estuda Tecnologias e Programao de Sistemas de Informao no curso CET de TPSI no Instituto Politcnico de Viana do Castelo.

48

No Code

Xamarin Store App: Ganha a tua t-shirt C# ou F#

A Xamarin tem a decorrer um desafio para todos os


programadores, de tudo o mundo, que permite que estes
ganhem uma t-shirt de C# ou de F# (os portes tambm so
gratuitos), depois de efetuarem os trs passos necessrios,
que so

E se de bnus ainda receberes um macaco da Xamarin?


Como? Se fores um programador curioso e gostares de ler
cdigo, vais encontra-lo! Boas compras!

Instalar o Xamarin Studio


Obter o cdigo fonte da aplicao Xamarin Store App

Correr a aplicao para comprar da t-shirt

49

No Code

PROJECTO EM DESTAQUE NA COMUNIDADE P@P: IRIS NOS CONTROL PANEL


- Volume +/- e mute

Tal como o nome indica, trata-se de uma aplicao de


controlo remoto para as boxes IRIS da NOS (Ex-ZON), que
se instala no browser Chrome da Google, como uma
extenso da aplicao mas que acrescenta funcionalidades
bastante interessantes, especialmente para ser usado em
tablets, portteis e sistemas embebidos.

- Gravar programa actual


- Zapping (5s por canal at dar a volta)
- Pesquisar por programa
- Ver programa do incio

Tal como o site da aplicao refere, esta aplicao dispe


de mais funcionalidades
do que as tradicionalmente
disponveis num comando padro de uma box, alm de
permitir controlar as vrias boxes existentes numa casa, a
partir do browser.

- Usar teclas de atalho multimdia para gerir reproduo,


Home para menu, Page Up/Down para canais, Pause para
pausar, etc.
- Ligar/desligar box

Da sua lista de funcionalidades constam as seguintes:

Segundo se pode ler no descritivo da prpria aplicao mais


funcionalidades esto para chegar, o que ainda torna esta
aplicao mais apetecvel.

- Canal +/- Escolher programa pelo seu logotipo (ou atravs do seu
nmero)
- Notificar utilizador de programas favoritos

um projecto til e interessante, especialmente para quem


usa o servio NOS e que nos mereceu o destaque nesta
poca do ano, em que se consome mais TV.

- Guia de TV por canal

http://lsoares.wordpress.com/

50

Elege o melhor artigo desta edio


Revista PROGRAMAR
http://bit.do/ProgramarED47_V

Veja tambm as edies anteriores da


Revista PROGRAMAR
44 Edio - Fevereiro 2014

42 Edio - Setembro 2013

41 Edio - Junho 2013

43 Edio - Dezembro 2013

45 Edio - Maio 2014

46 Edio - Setenmbro 2014

e muito mais em
www.revista-programar.info

Você também pode gostar