EQUIPA PROGRAMAR
Coordenador
Antnio Pedro Cunha Santos
Editor
Antnio Pedro Cunha Santos
Design
Srgio Alves
Twitter: @scorpion_blood
Ilustrao
Sara Freixo
Redaco
Antnio Pedro Cunha Santos
Diego Andrade
Fbio Pinho
Jorge Paulino
Nuno Silva
Paulo Afonso Parreira Jnior
Paulo Henrique Lima Oliveira
Ricardo Trindade
Rita Peres
Sara Silva
Srgio Ribeiro
Guest@system
Em Janeiro passado, com muita tristeza tomei conhecimento em segundos,
do que acabava de acontecer em Paris. Um atentado liberdade de expresso de
todos ns e pensei: Felizmente a internet no tem censura! Posso ler a noticia!
Com a mesma tristeza com que a li, pensei para mim: Que sociedade esta, onde
vivemos? e este pensamento assaltou-me nas horas seguintes, no dia de trabalho,
nas linhas de cdigo que escrevi.
Pensei nas vezes em que ns programadores criamos software, tecnologia,
algo do nada e nem sequer nos apercebemos que aquilo que criamos pode ser
usado para fins completamente dispares dos que ns idealizamos! estranho!
Parece que, de certa forma, ns, enquanto "indivduo", somos um utilizador "guest"
no sistema que a sociedade em que vivemos.
Quer dizer, no propriamente guest, mas quase parece que estamos num
sistema estranho, ou com updates to radicais que por vezes nos passam ao lado!
Com este pensamento de guest@system, decidi deixar o editorial curto, mudando
apenas a prompt, valendo-me das palavras do poeta Jos Rgio, que escreveu no
sei para onde vou, mas sei que no vou por a, para deixar na prompt, o rumo para
onde a revista continuar a ir, no respeito pela pluralidade e liberdade de opinio,
sem mais demoras: todos@liberdade ~: $
At prxima edio.
Antnio Santos
Staff
Antnio Pedro Cunha Santos
Rita Peres
Rui Gonalves
Sara Freixo
Tiago Sousa
Contacto
revistaprogramar@portugal-aprogramar.org
Website
http://www.revista-programar.info
ISSN
1 647-071 0
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
8
DE CAPA
Criar um Cluster de Processamento Paralelo MPI com Raspberries - Antnio Santos
A PROGRAMAR
15
Como fazer merge de diferentes verses de cdigo gerado pelo Windows AppStudio - Sara Silva
19
22
Produzir ficheiros no formtado ODF Open Document Format em .NET - Ricardo Trindade
26
Ordenao Genrica em C - Paulo Afonso Parreira Jnior e Paulo Henrique Lima Oliveira
COLUNAS
32
ANLISES
37
39
NO CODE
41
45
EVENTOS
ENEI 2015 - 27 30 de Maro
Para mais informaes/eventos: http://bit.ly/PAP_Eventos. Divulga os teus eventos para o email eventos@portugal-a-programar.pt
NOTICIAS
Anunciando o Guia de
Portabilidade Ubuntu 2.0
se ir fazer histria. Isto porque, destacou Artur Santos Silva, esta ser a estreia em Portugal do Ttulo de Impacto Social, um mecanismo atravs do qual um investidor financia um
projecto com fins sociais desenvolvido por uma entidade do
sector pblico.
Nas ltimas semanas, o Ubuntu atingiu um marco importante com as primeiras vendas relmpago do Aquarius BQ
- Ubuntu Edition. Este apenas o incio de ver o Ubuntu numa vasta seleco de telefones e tablets, e graas a uma
comunidade de portabilidade incrivelmente entusiasta, mais
dispositivos de tm feito parte desse espetculo. Alguns destes portadores qualificados chegaram a configurar o seu prprio servidor de imagens para fornecer atualizaes over-theair!
Para facilitar o processo de portabilidade, o Guia de
Portabilidade foi atualizado para refletir o atual procedimento
de permisso de novos dispositivos. Desde a criao de seu
ambiente de desenvolvimento, a configurar o kernel e depurar
o AppArmor, abrange os principais pontos de fazer uma portao em pleno funcionamento. Atualmente focado nas portaes AOSP, ser alargado no devido tempo a processos detalhados e especficos CyanogenMod.
Se est interessado em portabilidade, por favor, certifique-se
de que fornece feedback sobre quaisquer problemas e obstculos que possam surgir, quer no Launchpad ou na mailinglist do Ubuntu-phone.
Obrigado e bom trabalho, colegas aventureiros de dispositivos!
Fonte: developer.ubuntu.com
Traduo: Sara Santos
Nesta fase aquilo que vai acontecer que a Fundao Calouste Gulbenkian vai investir cerca de 120 mil euros no pro-
NOTICIAS
grama Academia de Cdigo Jnior, valor que ser mais tarde
reembolsado pela cmara se se concluir que foram alcanados os objectivos previamente definidos. Segundo explicou
Artur Santos Silva, a melhoria da capacidade lgica de resoluo de problemas e o desempenho escolar sero os dois
indicadores com base num quais ser feita a avaliao do
sucesso desta iniciativa, avaliao que s dever estar concluda em Janeiro de 2017.
O presidente da fundao sublinhou a importncia daquele que o primeiro Ttulo de Impacto Social em Portugal.
Lembrando que o terceiro sector se v confrontado com uma
queda de recursos num momento em que se v obrigado a
multiplicar respostas, Artur Santos Silva considerou que a
discusso sobre novos modelos de financiamento como
aquele que agora foi lanado no apenas oportuna como
absolutamente necessria.
com muito agrado que a cmara se oferece como
cobaia, reagiu Antnio Costa, dando conta do seu agrado
com o facto de se estar a experimentar uma nova forma de
financiamento de projectos com elevado retorno social. Este
no um projecto com retorno financeiro, frisou, notando que
o municpio s sairia a ganhar em termos monetrios se os
alunos da Aida Vieira, do Bairro do Armador e de S. Joo de
Deus no melhorassem as suas capacidades cognitivas e se aumentassem as taxas de reteno e de insucesso
escolar.
estend-lo
progressivamente a outras escolas do 1. ciclo do ensino
bsico. Com este e outros programas de enriquecimento, como o de Apoio Natao Curricular, aquilo que Antnio Costa
e o seu executivo ambicionam que a rede pblica de Lisboa
tenha a melhor oferta educativa da cidade.
Fonte: dev.Windows.com
Traduo: Sara Santos
Fonte: Publico
Windows 10
Raspberry Pi 2
para
A iniciativa, que d pelo nome de Portugal Open Source 2020 (POS 2020), vai recolher contributos dos internautas
NOTICIAS
at 31 de maro. Das propostas dos diferentes utilizadores,
Antes do teste Vila Franca, o projeto Brainflight contemplou testes com simuladores para veculos tripulados e
no tripulados. Em ambos os casos, os testes de simulador
foram bem sucedidos, mas no se prev que venham a ser
feitos voos em "ambiente real" nos tempos mais prximos.
Ricardo Mendes recorda que ainda h pelo menos dois
tipos de desafios a superar: Hoje, no possvel testar esta
tecnologia em veculos areos tripulados por questes de
segurana e por isso apenas podemos faz-lo em ambiente
de simulao. Esta uma soluo inicial. Ainda no um
produto, mas esse caminho que queremos fazer. Se vai
demorar dois anos ou mais at termos um produto, algo que
no se sabe ainda.
No projeto Brainflght, no s a Tekever que tem direito a parangonas de jornal: a iniciativa financiada pela Comisso Europeia contou ainda com a participao de investigadores da Fundao Champalimaud, a Eagle Science, da Holanda, e a Universidade Tcnica de Munique, da Alemanha.
Como que se consegue controlar um drone com o
pensamento?: EEG, a sigla de eletroencefalograma, a resposta mais concisa. Uma resposta mais descritiva remeter
obrigatoriamente para a touca e para os respetivos sensores
colocados em pontos precisos, que facilitam a captao de
ondas cerebrais que, depois, so convertidas em comandos
de drone por algoritmos que correm num computador.
Ricardo Mendes, diretor operacional da Tekever, recorda que a demonstrao pblica, efetuada ontem num aerdromo, marca uma nova etapa neste projeto: um projeto com
grandes riscos e tambm com grandes recompensas, que
pode ter um impacto a longo prazo, mas que j comeou a
produzir os primeiros resultados e vai precisar de mais tecnologia para chegar a maturidade. Acreditamos que o Brainflight
representa o incio de uma enorme mudana na aviao, que
TEMA DE CAPA
Criar um Cluster de Processamento Paralelo MPI com Raspberies
TEMA DA CAPA
Criar um Cluster de Processamento Paralelo MPI com Raspberries
Introduo:
O Raspberry foi um sucesso desde o seu lanamento
e continua a fascinar programadores, makers, hackers, estudantes e at cientistas, pela sua performance e baixo custo.
So sistemas SoC (System on a Chip), de baixo custo, baseados em arquitectura ARM, com muito potencial por
explorar e pelo seu baixo consumo energtico tornam-se
equipamentos de eleio para pequenos e grandes projectos.
Processamento paralelo:
Nos ltimos anos a evoluo dos processadores foi
confrontada com as limitaes ao aumento da frequncia do
ciclo do relgio. Com efeito, cada vez que se aumenta a frequncia do relgio, aumenta o consumo de energia e o calor
produzido de forma proporcional, o que sugere a aproximao de limites fsicos dos circuitos.
Assim, como resultante do melhoramento do processo de fabrico dos circuitos integrados, em consonncia com
a lei de Moore que estabelece que o nmero de transstores
duplica cada dois anos, a resposta no mercado dos processadores passou por introduzir mais processadores no mesmo chip (multi-ncleo), aumentando a capacidade de processamento do chip, sem sofrer os problemas de eficincia
energtica e controlo de temperatura associados ao aumento da frequncia do ciclo de relgio dos processadores
convencionais. Esta alternativa engenhosa, de aumentar o
desempenho do processamento, pela via do paralelismo por
hardware tem vindo a impor-se tanto no mercado domstico,
como no das mquinas de elevada exigncia.
Segundo a lei de Amdahl, o tempo total de execuo T, utilizando n entidades de processamento, pode ser reduzido
para o limite terico
depende da fraco B do problema que no pode ser computada em paralelo, de acordo
com a seguinte equao:
TEMA DA CAPA
CRIAR UM CLUSTER DE PROCESSAMENTO PARALELO MPI COM RASPBERRIES
se na curva de aprendizagem que tende a ser longa e no
facto de no permitir paralelizao incremental.
Tem vindo a ser desenvolvido o padro e desenvolvidas diversas implementaes de MPI, para uma grande variedade de plataformas e arquitecturas de computador, no
entanto essa discusso sai do mbito deste artigo.
O Cluster com Raspberry Pi:
Preparao:
So precisos dois cartes de memria SD, no caso
do Raspberry Pi Model B, como foi utilizado neste caso, os
respectivos Raspberrys, um switch, cabos de rede para os
ligar ao switch, um PC e alguma pacincia, para seguir todos
os passos da preparao. Ento vamos comear:
TEMA DA CAPA
CRIAR UM CLUSTER DE PROCESSAMENTO PARALELO MPI COM RASPBERRIES
1.
2.
No meu caso usei a imagem da verso 2012-10-28wheezy-raspbian.zip, pois j a tinha nos cartes de
memria com as devidas actualizaes realizadas.
Mas devem ser utilizadas verses mais recentes da
imagem do Raspbian.
3.
4.
Uma vez colocado o carto no Raspberry, basta liglo corrente, a uma consola ou rede para lhe podermos aceder, e continuar para os passos seguintes
de instalao e configurao.
5.
Instalao do MPICH:
1.
$ sudo raspi-config
b.
3.
Neste quarto passo, expande-se a partio do sistema operativo, de forma a ocupar todo o espao disponvel no carto de memria, uma vez que se usou
uma imagem e ela no utiliza a totalidade do espao
disponvel. Para o fazer basta seguir os passos que
se indicam:
a.
$ mkdir /home/pi/mpich2
$ cd ~/mpich2
4.
wget http://www.mcs.anl.gov/research/projects/
mpich2/downloads/tarballs/1.4.1p1/mpich21.4.1p1.tar.gz
6.
$ passwd
7.
Antes de compilar, criamos directorias para armazenar os ficheiros do MPICH compilados, para ser mais
fcil localiz-los de futuro e nos prximos passos,
utilizando
os
seguintes
comandos:
$ mkdir /home/pi/mpich_build
7.
10
TEMA DA CAPA
CRIAR UM CLUSTER DE PROCESSAMENTO PARALELO MPI COM RASPBERRIES
parar a build que vamos usar. Como so procedimentos que no meu caso ainda demoraram um pouco,
recomendo a quem esteja a seguir estes passo, seguir o meu exemplo e ir buscar uma caneca de caf,
ou ch, conforme o gosto! Vai dar jeito para o resto
das tarefas!
10.
$ which mpicc
$ which mpiexec
11.
$ cd /home/pi/mpich_build
$ sudo /home/pi/mpich2/mpich2-1.4.1p1/configure prefix=/home/rpimpi/mpich2-install
$ cd ~
$ mkdir mpi_testing
$ cd mpi_testing
12.
$ nano machinefile
Acrescentamos numa nica linha o IP do Raspberry,
no meu caso 192.168.5.2
13.
8.
$ cd /home/pi/mpi_testing
$ mpiexec -f machinefile -n 2 ~/mpich_build/
examples/cpi
$ sudo make
$ sudo make install
9.
$ export PATH=$PATH:/home/rpimpi/mpich2-install/bin
Criando o segundo n:
$ export PATH=$PATH:/home/rpimpi/mpich2-install/bin
Caso o utilizador prefira, poder seguir as seguintes
instrues em alternativa instruo anterior:
1.
$nano ~/.profile
$ sudo poweroff
11
TEMA DA CAPA
CRIAR UM CLUSTER DE PROCESSAMENTO PARALELO MPI COM RASPBERRIES
2.
3.
4.
4.
$ nano machinefile
192.168.5.2
192.168.5.3
1.
$ cd /home/pi/mpi_testing
$ mpiexec -f machinefile -n 2 ~/mpich_build/
examples/cpi
Ao executar o cdigo reparamos que o output ligeiramente diferente:
$ cd ~
$ ssh-keygen -t rsa C raspberrypi@raspberrypi
Process 0 of 2 is on raspberrypi
Process 1 of 2 is on raspberrypi
$ssh 192.168.5.3
3.
Uma vez ligados ao segundo Raspberry, se executarmos
o
seguinte
comando:
1.
$ ls al ~/.ssh
$ sudo poweroff
12
TEMA DA CAPA
CRIAR UM CLUSTER DE PROCESSAMENTO PARALELO MPI COM RASPBERRIES
2.
3.
4.
so e montagem de Clusters de computadores tornou-se bastante mais simplificado. Neste artigo apenas se pretende
apresentar de forma simples as instrues necessrias para
construir um Cluster MPI de baixo custo, recorrendo aos
pequenos computadores Raspberry Pi, pelo que no se explica em detalhe programao paralela, nem computao
paralela. Existe diversa documentao de qualidade disponvel, para alm do artigo Paralelizao de aplicaes com
OpenMP publicado na edio n 46 da Revista PROGRAMAR.
Boas experincias!
Bibliografia:
G. Amdahl, Validity of the single processor approach to
achieving large scale computing capabilities http://goo.gl/
H0OpSw
Concluso:
Como se pode ver ao longo do artigo, existem diversas razes para se recorrer computao paralela e o aces-
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
nas mais diversas linguagens. Membro da Comunidade Portugal-a-Programar desde Agosto de 2007, tambm membro da
Sahana Software Foundation, onde Programador Voluntrio. Diplomado do Curso de Especializao Tecnolgica em Tecnologias e Programao de Sistemas de Informao. @apocsantos
13
A PROGRAMAR
Como fazer merge de diferentes verses de cdigo gerado pelo Windows
AppStudio
Cortana: A assistente pessoal digital da Microsoft chega ao PC e Tablets.
Produzir ficheiros no formtado ODF Open Document Format em .NET
Ordenao Genrica em C
A PROGRAMAR
Introduo
O Windows App Studio um servio que permite
qualquer pessoa, sem conhecimentos de programao, criar
aplicaes Windows Phone 8.1 e Windows Store apps em
apenas 4 passos: ter uma ideia, adicionar contedo,
escolher os estilos e por fim usar a aplicao. Este servio
fornece vrios templates para ajudar a criar vrios tipos de
aplicaes e com isto a criao das aplicaes ir ser mais
rpido.
Quando uma aplicao criada no Windows
App Studio possvel obter o cdigo fonte para se poder
correr a aplicao no simulador ou em qualquer dispositivo
Windows Phone 8.1 ou Windows 8.1, com o objetivo de testar a aplicao, e ainda pode-se adicionar novas funcionalidade ou alterar alguma existente. Desta forma,
um utilizador que pretenda alterar a aplicao no Visual Studio e no Windows App Studio vai ter que fazer a gesto de
verses, uma vez que o Windows App Studio no permite fazer upload da verso alterada no Visual Studio. E em
alguns casos necessrio fazer o merge de verses para
que a aplicao final contenha todas as alteraes ao longo
do tempo.
15
Antes de efetuar alteraes no Visual Studio importante guardar esta verso no "controlo de verses", mas para
isso necessrio a ferramenta Source Tree.
Depois de se instalar o Source Tree, deveremos abrir
a aplicao para iniciarmos o processo de controlo de verses.
A PROGRAMAR
COMO FAZER MERGE DE DIFERENTES VERSES DE CDIGO GERADO PELO WINDOWS APPSTUDIO
16
A PROGRAMAR
COMO FAZER MERGE DE DIFERENTES VERSES DE CDIGO GERADO PELO WINDOWS APPSTUDIO
"commit"
como
foi
descrito
Microsoft
17
A PROGRAMAR
COMO FAZER MERGE DE DIFERENTES VERSES DE CDIGO GERADO PELO WINDOWS APPSTUDIO
Assim que a nova verso tiver disponvel, devemos copiar o cdigo para a pasta que contm o repositrio e
no Source Tree iremos ver todas as diferenas entre as duas
verses:
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.
18
A PROGRAMAR
Introduo
A Microsoft no passado ms de Janeiro fez um dos
anncios talvez mais aguardados pelos utilizadores Windows:
A integrao nativa da assistente digital da Microsoft A Cortana no Windows 10.
A Cortana, uma das principais novidades em 2014 no
Windows Phone, estar presente no desktop de todos os PCs
e Tablets que tenham o Windows 10 instalado, ajudando os
utilizadores nas mais inmeras tarefas do dia-a-dia e sempre
baseado nas suas escolhas. A introduo da Cortana no Windows 10 vem demonstrar claramente a inteno da Microsoft
em unificar a experincia de utilizao entre os vrios devices.
A forma como interagimos com a Cortana, vai depender do ambiente onde nos encontramos e tambm do tipo de
equipamento que tivermos, mas sempre assente em dois
princpios: A voz e a escrita. Atravs do comando de
voz Hey Cortana conseguimos captar a sua ateno!
Hello, what can I do for you?
A Cortana pode executar das tarefas mais simples,
como adicionar um compromisso ao nosso Calendrio, mostrar o estado do tempo no local onde nos encontramos, sugerir feeds de notcias, etc., a tarefas com mais alguma complexidade. Estas no so as suas nicas capacidades e
medida que a Microsoft vai avanando com o desenvolvimento desta tecnologia, podemos ver a Cortana a fazer chamadas Skype, definir novos lembretes ou at ditar mensagens, possibilitando assim a multitarefa.
Notebook da Cortana
A partir destas informaes e do Bing, todos os resultados de pesquisa que a Cortana efetuar, so mostrados na janela da barra de Search localizada na Taskbar do Windows 10.
Barra de Search
19
A PROGRAMAR
CORTANA: A ASSISTENTE PESSOAL DIGITAL DA MICROSOFT CHEGA AO PC E TABLETS.
do
Start
Menu,
vamos
abrir
nova
20
A PROGRAMAR
Agora que temos as configuraes terminadas e a Cortana pronta a utilizar, podemos ainda "humanizar" ainda mais
esta interao e ativar a funcionalidade "Hey Cortana" e que
activar a mesma a partir desde comando de voz.
Concluso
Em concluso, apesar da Cortana no Windows 10
Technical Preview no mostrar todas as suas potencialidades e conter algumas falhas previsveis, podemos ainda assim dizer que os resultados so satisfatrios. clara a aposta da Microsoft nesta tecnologia e se existir uma evoluo no
caminho certo, com certeza que a expanso a outros produtos/servios ser uma realidade.
A partir deste momento, a Cortana ir responder sempre que utilizarmos o comando de voz "Hey Cortana".
AUTOR
Escrito por Nuno Silva
Microsoft MVP Windows Expert - Consumer |
Microsoft Technical Beta Tester
21
A PROGRAMAR
Produzir ficheiros no formato ODF Open Document Format em .NET
2.
Introduo
Um dos desafios com que os programadores se deparam
com alguma frequncia a criao de documentos de forma
automtica, de modo a optimizar e a reduzir o trabalho manual
em aplicaes de produtividade.
Quando o programador tem sua disposio aplicaes
Microsoft Office, o seu trabalho est mais facilitado, especialmente se conjugado com tecnologia .NET. Mas, se quiser produzir documentos num formato aberto, como o ODF Open
Document Format , a documentao existente muito escassa e as bibliotecas disponveis so quase nulas e muito fracas.
Foi a necessidade de produzir documentos de texto ODF
(ODT) em grande nmero, a partir de informao em bases de
dados, que me levou a conhecer melhor este formato de ficheiros. A partir do conhecimento do formato ODF, foi possvel
desenvolver um mecanismo simples para o preenchimento de
modelos de documentos de texto.
O intuito deste artigo demonstrar como podemos preencher documentos atravs de um modelo j existente. O desenvolvimento foi feito em ASP.NET, mas o conceito pode ser
extrapolado para qualquer linguagem de programao.
O Formato ODT (ODF para texto)
Para melhor entendermos este processo, necessitamos
compreender a estrutura de ficheiro do documento ODT. Este
documento no mais do que um arquivo ZIP com uma estrutura definida, vrias pastas e ficheiros, a maior parte em XML.
Mais precisamente, trata-se de um ficheiro JAR (Java Archive).
Podemos explorar o contedo de um ficheiro ODT de uma forma simples. Comece por criar o seu modelo de documento
numa aplicao compatvel, por exemplo, no LibreOffice. Experimente fazer o unZIP desse ODT, alterando previamente a
extenso ODT para ZIP, se necessrio. Repare que existem
muitos ficheiros dentro do ZIP. No entanto, para o preenchimento dos modelos, vamos necessitar de utilizar apenas um
desses ficheiros, que poder explorar num editor de texto do
tipo notepad, o ficheiro content.xml.
Este ficheiro contm muitas meta tags, definies de formatao e, bem visvel, o contedo do texto que escreveu no modelo. Facilmente percebemos que, ao alterar o contedo do
content.xml, estamos a alterar o texto do documento ODT. S
teremos que colocar o ficheiro dentro do ZIP, novamente.
H, no entanto, dois critrios a ter em conta, na construo do
ficheiro ZIP:
1.
2. Descompactar o
ficheiro context.xml de
dentro do
ODT para
3. Ler o
content.xml
para uma
string
6. Colocar o
5. Guardar o
content.xml
numa pasta temporria
4. Substituir
as tags com
dados provenientes
do data
source
novo
content.xml
dentro do ZIP
e apresentlo como ODT
a.
O modelo dever ser criado num editor totalmente compatvel com o formato ODF. um processo simples, sem
22
A PROGRAMAR
fileContents = fileContents.Replace("[tag_nome]", r
(4).ToString)
c)
Depois de criado o ficheiro com o novo contedo do documento, necessrio coloc-lo novamente dentro do arquivo ZIP com extenso ODT. Vamos clonar o modelo.odt,
carregando-o em memria, substituir pelo novo content.xml
e gravar o modelo com outro nome.
Exemplifica-se com um procedimento bsico que dever
ser personalizado para criar ficheiros com sequncia numrica, por exemplo, para que no se substituam sempre que
invocado o procedimento:
b.
e efetuar uma string.Replace das tags pelos dados provenientes da base de dados:
23
A PROGRAMAR
PRODUZIR FICHEIROS NO FORMATO ODF OPEN DOCUMENT FORMAT EM .NET
Concluso
O processo de criao de um documento ODT no complexo. No entanto, cri-lo de raiz um trabalho moroso. J
existem algumas bibliotecas para o efeito mas, mesmo assim,
ODT:
http://books.evc-cit.info/
AUTOR
Escrito por Ricardo Trindade
actualmente o responsvel pela rea informtica dos Servios Sociais da Cmara Municipal de Lisboa onde efectua, desde
administrao de sistemas, at programao em .NET. Est tambm ligado ao projecto N-Ideias na rea da consultoria,
webdesign e software, trabalhando essencialmente com BD's Oracle, PostgreSQL e SQL Server.
24
A PROGRAMAR
ORDENAO GENRICA EM C
Introduo
Num artigo anterior [1], falei do problema da construo
de estruturas de dados genricas, isto , estruturas capazes de
manipular diferentes tipos de dados, informados no momento
da criao destas estruturas. No final desse artigo, levantei a
seguinte questo:
como podemos criar uma funo para comparar os
itens de uma estrutura de dados genrica, uma vez que ela
no conhece o seu tipo, 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 programador, como uma struct para armazenar os dados de um aluno, entre outros.
Para resolver este problema, utilizando a linguagem C,
precisamos de utilizar um recurso conhecido como funes
callback. Este tipo de funo tira proveito do fato de que a linguagem C trabalha com apontadores para funes, isto , podemos passar a uma funo, um apontador que aponta para o
bloco da memria onde est localizada outra funo do sistema (ou at mesmo a prpria funo que recebe o parmetro).
Isto permite que uma determinada funo chame outras funes, mesmo sem ter conhecimentos de quais funes so.
26
A PROGRAMAR
ORDENAO GENRICA EM C
Analogamente, a sua implementao na linguagem de
programao C bastante simples, conforme apresentado
na Listagem 1.
void ordenacaoPorSelecao(int vetor[], int n) {
for(int i = 0; i < n - 1; i++) {
int menor = i;
for(int j = i + 1; j < n; j++) {
if (vetor[j] < vetor[menor]) menor = j;
}
int aux = vetor[i];
vetor[i] = vetor[menor];
vetor[menor] = aux;
}
}
Listagem 1. Algoritmo de ordenao SelecionSort.
A segunda instruo for, linhas 4 6, responsvel
por encontrar o menor elemento do vetor, cujos ndices vo de
i + 1 n 1. As linhas 7 9 so responsveis por colocar o
menor elemento identificado na sua posio correta. A primeira
instruo for responsvel por percorrer todo o vetor,
permitindo que todos os elementos sejam colocados no lugar
certo. O valor da varivel i desta instruo representa a
posio atual onde o menor elemento dever ser colocado.
A anlise da complexidade deste algoritmo, em funo
do nmero de comparaes realizadas pelo mesmo, tambm
muito simples. Imagine um vetor de N elementos. Na primeira
execuo, a instruo if ser executada N 1 vezes. Na
segunda, N 2. Na terceira, N 3 e, assim sucessivamente,
at a N-sima 1 vez, na qual a instruo if ser executada
apenas 1 vez. Portanto, o nmero de comparaes, C(n),
realizada por este algoritmo dado por:
C(n) = 1 + 2 + 3 + ... + N -1
C(n) = [(N-1) * (N 1 + 1)]/2
C(n) = (N2 N)/2
Resumindo, em termos do nmero de comparaes,
este algoritmo da classe quadrtica, O(n2), de complexidade
de tempo. Quanto ao nmero de iteraes realizadas pelo
algoritmo, a anlise ainda mais simples. Ao executar o
algoritmo passo a passo possvel observar que ele ir
sempre realizar N 1 iteraes para um vetor de tamanho N.
Ou seja, em termos da quantidade de iteraes realizadas pelo
algoritmo, Selection Sort da classe de complexidade linear: O
(n). Este um resultado interessante para o nmero de
iteraes, quando comparado a outros algoritmos de
ordenao, como o Bubble Sort ou o Insertion Sort, nos seus
piores casos.
Outra caracterstica interessante deste algoritmo de
ordenao que apresenta a mesma complexidade, qualquer
que seja a configurao do vetor de entrada. Isto , dado um
vetor de tamanho N, no importa se o vetor est parcialmente
ou totalmente ordenado, ou se est ordenado inversamente. A
quantidade de comparaes e iteraes a serem realizadas
ser sempre a mesma, caracterstica no presente em outros
mtodos de ordenao, que so sensveis configurao da
entrada, como por exemplo o Insertion Sort, que apresenta um
nmero de comparaes bem menor quanto o vetor est
27
A PROGRAMAR
ORDENAO GENRICA EM C
#include <stdio.h>
#include <stdlib.h>
void ordenacaoPorSelecao(int vetor[], int n)
{ ... }
void imprimirVetor(int vet[], int n) {
printf("[");
for(int i = 0; i < n - 1; i++) {
printf("%d ", vet[i]);
}
printf("%d]\n", vet[n - 1]);
}
void ordenacao(int vet[], int n, void (*funcOrd)
(int[],int)) {
printf("Vetor original: "); imprimirVetor(vet,
n);
funcOrd(vet, n);
printf("Vetor ordenado: "); imprimirVetor(vet,
n);
}
int main() {
int vet[5] = {4, 5, 3, 2, 1};
ordenacao(vet, 5, &ordenacaoPorSelecao);
return EXIT_SUCCESS;
}
28
#include <stdio.h>
#include <stdlib.h>
#define MENOR -1
#define IGUAL 0
#define MAIOR -1
int compararInteiros(void* n1, void* n2) {
int a = *((int*)n1); int b = *((int*)n2);
if (a < b) return MENOR;
else if (a > b) return MAIOR;
else return IGUAL;
}
void ordenacaoPorSelecao(void* vetor[], int n,
int (*comp)(void*,void*)) {
for(int i = 0; i < n - 1; i++) {
int menor = i;
for(int j = i + 1; j < n; j++) {
if (comp(vetor[j], vetor[menor]) ==
MENOR) menor = j;
}
void* aux = vetor[i];
vetor[i] = vetor[menor];
vetor[menor] = aux;
}
}
void imprimirVetor(void* vet[], int n) {...}
int main() {
int a = 4, b = 3, c = 1;
int* vet[3] = {&a, &b, &c};
printf("Vetor original: "); imprimirVetor
(vet, 3);
ordenacaoPorSelecao(vet, 3,
&compararInteiros);
printf("Vetor ordenado: "); imprimirVetor
(vet, 3);
return EXIT_SUCCESS;
}
Listagem 3. Selecion Sort genrico.
Os trechos de cdigo
observados na Listagem 3 so:
importantes
serem
A PROGRAMAR
ORDENAO GENRICA EM C
Consideraes Finais
Numa reviso rpida do cdigo da Listagem 3, pode-se
pensar que os benefcios da mudana realizada no
compensaram o esforo necessrio para realiz-la. Contudo,
possvel perceber que a partir deste momento, o algoritmo de
ordenao por seleo est preparado para lidar com qualquer
tipo de dados, desde que seja oferecida uma funo adequada
para comparao de elementos do tipo desejado. Isto evitar
AUTOR
Escrito por Paulo Afonso Parreira Jnior
Actualmente professor do curso de Bacharelado em Cincia da Computao da Universidade Federal de Gois (Regional
Jata). aluno de doutoramento do Programa de Ps-Graduao em Cincias 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.
Escrito por Paulo Henrique Lima Oliveira
Discente do curso de Bacharelado em Cincia da Computao da Universidade Federal de Gois (Regional Jata). Tcnico
em Informtica pelo Instituto Federal de Educao, Cincia e Tecnologia de Gois Campus Jata. Integrante do grupo da
Maratona de Programao do curso de Cincia da Computao da Universidade Federal de Gois. Tem experincia em linguagens de programao (C, C++ e Java) e possui afinidade com desenvolvimento de software voltado para dispositivos
mveis.
29
COLUNAS
C# - Aplicao auxiliar de actualizao
C#
APLICAO AUXILIAR DE ACTUALIZAO
Algoritmo em Fluxograma
Introduo
O artigo tem por objectivo ajudar o leitor a compreender
o algoritmo base por detrs de uma aplicao auxiliar de actualizao. Apenas sero expostos alguns excertos de cdigo
relevantes para uma percepo lgica do objectivo final.
A linguagem de programao escolhida para desenvolvimento no relevante.
Notas
Sempre que haja uma referncia de texto a Aplicao
Pai esta identifica a aplicao principal da qual a aplicao
auxiliar est inerente.
Factores a ter em conta
1.
2.
3.
Resultado final
O artigo d tambm a conhecer ao leitor como trabalhar
e aceder a diferentes threads sem comprometer a thread principal.
32
C#
APLICAO AUXILIAR DE ACTUALIZAO
Qual a formatao do ficheiro de actualizao?
1.0.3
Nomeficheiro.exe
Nomeficheiro.dll
Etc
Sendo a primeira linha a identificao da verso mais
recente e as restantes linhas identificam quais os ficheiros que
devem ser transferidos.
Comparao da verso actual com a mais recente
O primeiro objectivo da aplicao, que deve ser interpretado como decisivo, validar a verso actual da Aplicao
Pai que, por norma, se encontra no mesmo stio da aplicao
auxiliar de actualizao.
private static string path = Path.GetDirectoryName
(Application.ExecutablePath);
// Input: 1.0.3.0
string version = FileVersionInfo.GetVersionInfo
(path + "\\PAP.exe").ProductVersion;
// Input desejado: 1.0.3 (neste artigo)
currentVersion = version.Remove(version.Length 2);
FileVersionInfo encontra-se sobre o namespace System.Diagnostics e permite-nos ter acesso directo s informaes de um ficheiro, seja a verso do mesmo; direitos de autor;
empresa de desenvolvimento; etc.
Para identificarmos a verso mais recente necessrio
transferir o ficheiro denominado (no meu caso) update.txt, bem
como ler a estrutura do mesmo.
Para transferncia de ficheiros externos d-se uso ao
namespace System.Net que nos permite para alm de receber
ficheiros, enviar.
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += (object sender,
AsyncCompletedEventArgs e) => {
Mas antes de transferir necessrio ler (do ficheiro .txt transferido anteriormente) quais os ficheiros disponibilizados e
necessrios.
private string[] getAllFilesToDownload()
{
return File.ReadAllLines(path +
"\\update.txt");
}
private void downloadFiles()
{
// Retorna todas as linhas do ficheiro .txt ~
inclusive a verso.
string[] files = getAllFilesToDownload();
bool stop = true;
foreach (string file in files)
{
/*
* Visto que a primeira linha a verso da
* aplicao, no
* existe nenhum ficheiro para ser
* transferido, portanto
* ignora-se a linha.
* A soluo passa por criar a varivel
* booleana `stop` ou
* se o leitor preferir, eliminar a primeira
* linha.
*/
if (stop == true) { stop = false;
continue; }
WebClient webClient = new WebClient();
/*
* Exemplo de output final:
* (Download) url + file = ../updater/
nomeFicheiro.dll
* (DownloadTo) path + file =
C:\pasta\nomeFicheiro.dll
*/
webClient.DownloadFileAsync(new Uri(url +
file), path + "\\" + file);
/*
* O download feito atravs da funo
* DownloadFileAsync()
* o que implica que, se houverem mltiplos
* ficheiros a
* serem transferidos ao mesmo tempo, poder
* causar
* uma abrupta falha na aplicao. O ideal
* ser ento
* verificar, dentro do ciclo, se a
* transferncia
* encontra-se concluda e s a passar para
* a prxima
* linha.
*
* Se o leitor prefeir pode utilizar uma
* varivel
* auxiliar em vez de verificar o valor da
* progressbar
*/
latestVersion = getLatestVersion();
if (latestVersion == currentVersion) {
/*
* A aplicao encontra-se actualizada.
* 1. Eliminamos o ficheiro Update.txt;
* 2. Executamos novamente a Aplicao Pai;
* 3. Fechamos a aplicao auxiliar;
*/
return;
}
downloadFiles();
};
webClient.DownloadFileAsync(new Uri(url +
"update.txt"), path + "\\update.txt");
33
C#
APLICAO AUXILIAR DE ACTUALIZAO
Concluso
Application.DoEvents();
}
}
/*
* A aplicao encontra-se actualizada.
* 1. Eliminamos o ficheiro Update.txt;
* 2. Executamos novamente a Aplicao Pai;
* 3. Fechamos a aplicao auxiliar;
* 4. A aplicao est oficialmente
* actualizada!
*/
Emsuma,aaplicaoauxiliarparteintegralda
AplicaoPaiquepossibilitaaoclientenalestarsemprea
pardasactualizaesdeformamaisrpidaeobjec va.
Linksdereferncia
Download do projecto - http://goo.gl/mYjjps
AUTOR
Escrito por Fbio Pinho
Programador entusiasta nas mais diversas linguagens, sendo PHP, .NET e Java (Android) as suas preferncias.
34
Anlises
Compiladores Da Teoria Prtica
Gesto de Projetos de Software (5. Edio Atualizada)
Review
Compiladores - Da Teoria Prtica
Ttulo: Compiladores
Subttulo: Da Teoria Prtica
Autores: Pedro Reis Santos
e Thibault Langlois
Editora: FCA - Editora de Informtica
Pginas: 444 (461
com referncias e glossrio, 480 no total)
ISBN: 978-972-722-768-6
Estes blocos so
essenciais e proporcionam
excelentes
"milestones" de conhecimento ao leitor que
ajudam a consolidar as
ideias contidas nos pargrafos anteriores ao
mesmo tempo que proporcionam uma aplicao dessas mesmas
ideias.
Sntese de cdigo
37
Review
Isto leva-me inevitavelmente a referir outra boa prtica existente neste livro: o final de cada captulo est acompanhado de exerccios, e no h nada melhor do que a prtica para consolidar teoria, seja qual for o assunto.
O material que os autores disponibilizam informaticamente, atravs do site da editora, de extrema importncia
para qualquer que seja o propsito do leitor.
Disponveis esto vrios exemplos de cdigo, identificados por captulo, bem como a maioria das resolues aos
exerccios propostos, em mais que um formato.
A estrutura do contedo, bem como o seu teor, seguem os traos gerais de obras semelhantes, dando mais ou
menos importncia a diferentes assuntos, mantendo sempre
um discurso claro e relativamente simples. Nada mais a referir.
AUTOR
Escrito por Srgio Ribeiro
Curioso e autodidata com uma enorme paixo por tecnologias de informao, e um carinho especial por desenvolvimento web e
mobile,
atualmente
a
terminar
o
curso
de
Engenharia
Informtica
na
FCUL.
Alguns frutos do seu trabalho podem ser encontrados em http://www.sergioribeiro.com
38
Review
Gesto de Projetos de Software (5a Edio Atualizada)
Est ainda disponvel uma lista de siglas, um glossrio e um glossrio de termos (Portugus Europeu/Portugus
do Brasil/Ingls) muito completo e actual. Poderia incluir tambm (no livro ou disponvel para download) alguns templates/
listas de verificao como referncia, pois so documentos
essenciais para a correcta gesto de qualquer projecto, como por exemplo o termo de abertura e encerramento, detalhe das actividades (WBS), anlise de risco, matriz de responsabilidade, etc.
Esta a 5 edio
actualizada deste livro
e, segundo o autor,
uma edio mais compacta do que as suas
antecessoras e ainda
mais moderna, equilibrada e prtica.
AUTOR
Escrito por Jorge Paulino
Coordenador de projectos de informtica/programador numa multinacional sediada em Portugal. formador e ministra cursos
de formao em tecnologias.NET/VBA, Microsoft Office Specialist (MOS) e Microsoft Most Valuable Professional (MVP) desde
2009, em Visual Basic, pela sua participao nas comunidades tcnicas. administrador da Comunidade Portugal-a-Programar
e membro de vrias comunidades (NetPonto, MSDN, Experts-Exchange, etc.).
39
No Code
Raspberry Pi2 Evoluo ou Revoluo?
Estratgias de jogos Aplicadas a Segurana Computacional
No Code
RASPBERRY PI 2 EVOLUO OU REVOLUO?
41
No Code
RASPBERRY PI2 EVOLUO OU REVOLUO?
condies plenas nas verses anteriores, o Pi2 veio dar uma
Permita-me, caro leitor, voltar um pouco atrs e falarlhe sobre as especificaes desta nova verso.
O Raspberry Pi2 a segunda gerao do Raspberry
Pi, portanto tem tudo o que a verso anterior tinha e mais:
1GB RAM
4 USB ports
40 GPIO pins
Full HDMI port
Ethernet port
42
No Code
RASPBERRY PI2 EVOLUO OU REVOLUO?
AUTOR
Escrito por Rita Peres
Natural de Castelo Branco, licenciou-se em Engenharia Informtica pela Universidade da Beira Interior. Membro do P@P
desde Janeiro de 2010.
43
#1010ENEI
Estando a cargo do Ncleo de Estudantes de Informtica da Associao Acadmica de Coimbra, o evento este
ano ter lugar em Coimbra de 27 a 30 de Maro e oferecer
aos participantes a oportunidade de participarem em activi-
No Code
ESTRATGIAS DE JOGOS APLICADAS SEGURANA COMPUTACIONAL
Introduo
Trabalhos relacionados
O uso de tcnicas e teorias de jogos aplicados
segurana tem vindo a tornar-se um ponto inicial para
diversos tipos de investigao relacionadas com a segurana
computacional, esse tem vindo a tornar-se um tema bastante
explorado por esses investigadores. Em [1], [3], [14], [15],
[17] e [23], os autores destacam a importncia do uso dessas
estratgias, pois as mesmas permitiram que pudssemos
entender o que o suposto invasor queria encontrar e como e
por onde o mesmo conseguiu passar.
45
No Code
ESTRATGIAS DE JOGOS APLICADAS SEGURANA COMPUTACIONAL
Trabalhos relacionados
O uso de tcnicas e teorias de jogos aplicados
segurana tem vindo a tornar-se um ponto inicial para
diversos tipos de investigao relacionadas com a segurana
computacional, esse tem vindo a tornar-se um tema bastante
explorado por esses investigadores. Em [1], [3], [14], [15],
[17] e [23], os autores destacam a importncia do uso dessas
estratgias, pois as mesmas permitiram que pudssemos
entender o que o suposto invasor queria encontrar e como e
por onde o mesmo conseguiu passar.
Descrio da Soluo
Devido grande expanso e evoluo de novas
tecnologias como Sistemas ERP, Networks, Mbiles,
46
No Code
ESTRATGIAS DE JOGOS APLICADAS A SEGURANA COMPUTACIONAL
Referncias
O design final do jogo ser feito inspirado no MSDOS da Microsoft, modelo escolhido para dar mais
autenticidade ao projecto. Assim que o utilizador iniciar a
aplicao, ter j como etapa inicial o desafio de iniciar o
jogo. O utilizador ter que descobrir como fazer para dar
incio partida. Como j citado acima, tudo nesse jogo se
trata de lgica.
Concluso
47
No Code
ESTRATGIAS DE JOGOS APLICADAS A SEGURANA COMPUTACIONAL
[14] Jain, M.;Leyton-Brown, K.;Tambe, M. The deployment-
[19] Simmons, P. Security through amnesia: a softwarebased solution to the cold boot attack on disk encryption.
In Proceedings of the 27th Annual Computer Security
Applications Conference (pp. 73-82). ACM, 2011.
AUTOR
Escrito por Diego Andrade
Atua como Tcnico de Nvel Mdio em Informtica e Comunicao formado pela E.E.E.P. Comendador Miguel Gurgel, tambm aluno de graduao em Sistema de Informaes pela FANOR | DeVry Brasil. Dentre suas reas de interesse esto:
Desenvolvimento WEB, Desenvolvimento Desktop, Segurana Computacional, Games, Banco de Dados e Aplicaes Moveis. http://diegoandrade.hol.es
48
No Code
PROJECTO EM DESTAQUE NA COMUNIDADE P@P: DUALITY MICRO PHP FRAMEWORK
<?php
// Include local configuration
$config = array(
'server' => array(
'url' => '/duality-demo',
'hostname' => 'localhost'
)
);
// Load dependencies
require_once './vendor/autoload.php';
// Create a new application container
$app = new \Duality\App(dirname(__FILE__),
$config);
// Get server and request
$server = $app->call('server');
$request = $server->getRequestFromGlobals($_SERVER,
$_REQUEST);
// Validate HTTP request
if (!$request) die('HTTP request not found!');
// Set request
$server->setRequest($request);
// Define default route
$app->call('server')->setHome(function(&$req,
&$res) {
// Tell response what is the output
$res->setContent('Hello World!');
});
// Finaly, tell server to start listening
$app->call('server')->listen();
?>
49
e muito mais em
www.revista-programar.info