Escolar Documentos
Profissional Documentos
Cultura Documentos
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
19
22
27
31
ANLISES
36
38
NO CODE
41
45
47
49
50
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.
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
In Exame Informtica
In Exame Informatica
TEMA DE CAPA
Integrar a Cortana numa aplicao Windows Phone
TEMA DA CAPA
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.
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.
<Command Name="ShowCommand">
<Example> Show Mains </Example>
<ListenFor> Show {dictatedShowTerms}
</ListenFor>
<Feedback> Showing in Menu ...
</Feedback>
<Navigate Target="MainPage.xaml" />
</Command>
<Command Name="NaturalLanguageCommand">
<Example> I want to eat </Example>
<ListenFor> {naturalLanguage}
</ListenFor>
<Feedback> Starting Menu ...
</Feedback>
<Navigate Target="MainPage.xaml" />
</Command>
"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;
<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
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));
TEMA DA CAPA
INTEGRAR A CORTANA NUMA APLICAO WINDOWS PHONE
}
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.
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:
TEMA DA CAPA
INTEGRAR A CORTANA NUMA APLICAO WINDOWS PHONE
Por sua vez a Cortana ir inicializar a Menu App:
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.
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
13
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.
Utilizando alocao
vetores); e
sequencial
esttica
(com
14
A PROGRAMAR
ESTRUTURAS DE DADOS (EDS) GENRICAS
Passo 2: o segundo passo consiste na definio dos
...
#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);
...
#include<stdlib.h>
#include "Pilha.h"
PilhaVet* criarPilha() {
PilhaVet* pilha = (Pilha*) malloc(sizeof
(Pilha));
pilha->topo = 0;
return pilha;
}
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.
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.
16
A PROGRAMAR
ESTRUTURAS DE DADOS (EDS) GENRICAS
}
adicionarElementoInt(1, minhaPilhaInt);
adicionarElementoInt(2, minhaPilhaInt);
adicionarElementoInt(3, minhaPilhaInt);
desempilhar(minhaPilhaInt);
adicionarElementoInt(4, minhaPilhaInt);
imprimirPilhaInt(minhaPilhaInt);
printf("\n\n");
adicionarElementoStr("A", minhaPilhaStr);
adicionarElementoStr("B", minhaPilhaStr);
adicionarElementoStr("C", minhaPilhaStr);
desempilhar(minhaPilhaStr);
adicionarElementoStr("D", minhaPilhaStr);
imprimirPilhaStr(minhaPilhaStr);
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);
}
int main() {
Pilha* minhaPilhaInt = criarPilha(sizeof
(ItemInt));
Pilha* minhaPilhaStr = criarPilha(sizeof
(ItemStr));
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
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
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.
2.
Sencha generate
[caminho]
app
[nome
aplicacao]
19
A PROGRAMAR
SENCHA TOUCH PARTE I
Antes de comear a desenvolver, necessrio entender todos
Declarar Models:
models: [Cliente]
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'.
Declarar views:
views: [Menu,ListaCliente];
20
A PROGRAMAR
SENCHA TOUCH PARTE I
uma aplicao com todos estes conceitos aplicados.
AUTOR
Escrito por Nelson Silva
LicenciadoemEngenhariaInform capelaUniversidadedeTrsosMonteseAltoDouro.Afrequentarmes
tradoemEng.Inform capeloISEP.TrabalhaprofissionalmenteemempresadeTInareadasade.Funda
dordapginadofacebook:Androidparatots.
21
A PROGRAMAR
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
Compilao de software
Optou-se, em razo do tempo de compilao e estabilidade do cdigo, pelo openssh-client v.1.6.0.
#! /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)
23
A PROGRAMAR
REGISTO DE TODOS OS COMANDOS EXECUTADOS NUM SISTEMA INFORMTICO
conjunto de opes de ponderao entre segurana e custo.
Aspetos formais
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.
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
Facilidadede
Instalao
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.
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
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
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
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
A PROGRAMAR
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.
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:
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.
http://developer.android.com/reference/java/util/Locale.html
28
A PROGRAMAR
COMO SUPORTAR DIFERENTES IDIOMAS NUMA APP ANDROID
lngua Inglesa.
mtodo
actionMethod
no
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:
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
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.
31
A PROGRAMAR
SANDCASTLLE HELP FILE BUILDER
Passo 7: Instalar o package para o Visual Studio (2010 / 2012 /
2013)
32
A PROGRAMAR
SANDCASTLLE HELP FILE BUILDER
Passo 4: Adicionar DLLs e XMLs como origens de docu-
AUTOR
Escrito por Srgio Ildefonso
33
Anlises
Desenvolvimento de aplicaes profissionais em Android
Projetos de POO em JAVA
Review
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.
36
Review
O captulo 6 aborda dois tpicos cada vez mais atuais e ne-
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
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
No Code
Windows 10: A Nova Gerao
Xamarin: Sem Custos para Estudantes
No Code
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.
41
No Code
Boto Task View e Search
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.
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.
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.
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.
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:
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
Introduo
45
No Code
Programa Xamarin Student Ambassador
gratuito
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
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?
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
49
No Code
- Canal +/- Escolher programa pelo seu logotipo (ou atravs do seu
nmero)
- Notificar utilizador de programas favoritos
http://lsoares.wordpress.com/
50
e muito mais em
www.revista-programar.info