Você está na página 1de 71

EDITORIAL

Christmas_tree.cpp
EQUIPA PROGRAMAR

Coordenador
Antnio Pedro Cunha Santos
#include "stdafx.h"
#include<stdio.h>
Editor void main()
Antnio Pedro Cunha Santos { int rows,starNo,spaceNo; //Perguntar e definir metas prprias
printf("Enter Rows:\n"); scanf("%d",&rows);
// Definir o algoritmo
Design for(int i=1;i<=rows;i++) {starNo=i*2-1; spaceNo=i+rows-starNo;
Srgio Alves for(int j=0;j<spaceNo;j++) {printf("%c",' ');}
Twitter: @scorpion_blood for(int k=0;k<starNo;k++) {printf("%c",'*');}
printf("\n"); }
Ilustrao //Continuar a apostar no algoritmo
Sara Freixo for(int l=0;l<3;l++){ for(int m=0;m<(rows*2+1)/2;m++) {printf("%c",' ');}
printf("%c\n",'*'); } printf("\n ");
Redaco /*
Andr Melancia
Andr Silva Eis-nos chegados ltima edio do ano 2015, com a nossa equipa a deixar
Antnio Pedro Cunha Santos aos leitores mais uma edio em jeito de prenda no sapatinho. tempo de os geeks
Carlos Grilo descansarem e darem ateno famlia (e que se note que pra mim, o meu porttil
Esteban Solano tem toda a legitimidade de receber o seu prprio presente uma vez que at
Fbio Pinho partilhamos vrios jantares ao longo do ano).
Filipa Peres
Jos Viana Nesta poca sentimentalista em que recordamos o ano que agora termina e
Nuno Silva em que quase todos desejamos criar o algoritmo que nos permita encontrar as
Patrcio Domingues prendas perfeitas, quisemos tornar esta edio numa edio de todos e para todos.
Patrick Freitas Para os programadores e para os designers. Para os fanticos da informtica e para
Rita Peres os simplesmente simpatizantes.
Sara Silva
Tnia Valente Em suma, para os geeks e para os no geeks. Nesta edio h artigos para
Vtor Carreira todos os gostos e feitios, sem nunca esquecer quem somos e para quem
escrevemos.

E escrevemos para ti, caro leitor, quer nos acompanhes h vrias edies,
Staff
quer seja esta a primeira que ls. Esta edio dedicada a cada um de vs.
Antnio Pedro Cunha Santos
Rita Peres Que 2016 seja um ano de triunfos, que tenham inspirao, que as vossas
Rui Gonalves linhas de cdigo se reinventem e as vossas compilaes no falhem, que 2016 vos
traga ideias e oportunidades para as por em prtica!
Contacto
revistaprogramar@portugal-a- Porque ns, programadores, somos gente de ideias e no desistimos!
programar.org
Por isso e por muito mais PROGRAMAR ontem, hoje e amanh! At
prxima edio.
Website
http://www.revista-programar.info */

ISSN printf("\nFELIZ NATAL e um BRINDE a 2016");


1 647-071 0 scanf("%d",&rows);
}

Rita Peres

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.

2
NDICE
TEMA DE CAPA
6 Travessia de uma rvore de diretrios usando recursividade - Patrcio Domingues; Vtor Carreira; Carlos Grilo

A PROGRAMAR

14 Validao de formulrios em JavaScript - Tnia Valente


16 Aplicaes Mobile com o Xamarin Studio - Andr Silva
18 Plotagem de dados em tempo real com Python usando matPlotLib - Rita Peres; Antnio C. Santos
22 Xamarin 4 tem tudo que precisa para criar ptimas aplicaes mveis! - Esteban Solano
24 IPv6 para Programadores - Andr Melancia

ELECTRNICA
32 Aquisio de dados via TCP/IP com GENUINO (ARDUINO) - Antnio C. Santos

COLUNAS
36 Cross-Platform - A soma de todas as mudanas - Antnio C. Santos

ANLISES

40 MySQL - Fbio Pinho

41 Programao em Python - Fundamentos e resoluo de Problemas - Antnio C. Santos

NO CODE
43 Windows 10: As novidades da actualizao de Novembro (BUILD 10586 - VERSION 1511) - Nuno Silva

50 ECMASCRIPT 2015: A nova verso do Javascript - Jos Viana


52 Raspberry PI Zero O novo membro da famlia! - Rita Peres

54 BETA-I HACKATHON LISBON HAS BEEN HACKED - Rita Peres


56 XAMARIN 4.0 Tudo o que precisa para criar as suas aplicaes mveis - Sara Silva

58 Impressoras 3D Escolhe a tua - Patrick Freitas


62 Xamarin para Docentes e Estudantes - Antnio C. Santos

65 High Tech Fashion - Filipa Peres


68 Projecto em Destaque P@P - PORTUGOL +

EVENTOS
- Shift APPens (19 a 21 de Fevereiro de 2016)
- SINFO (23 a 28 de Fevereiro de 2016)

Para mais informaes/eventos: http://bit.ly/PAP_Eventos. Divulga os teus eventos para o email eventos@portugal-a-programar.pt

3
NOTICIAS

#PGGD 29 WUD2015 - Dia Mundial


No passado dia 26 de Novembro, teve lugar mais um
encontro do Portugal Girl Geek Dinner em Lisboa. Desta vez o
da Usabilidade
espao foi gentilmente cedido pela Main Hub - Innovation, Teve lugar no passado dia 12 de Novembro, assinalan-
Incubation & Development, que apoiou o projecto. do a data, a conferncia do Dia Mundial da Usabilidade. O
evento aconteceu no auditrio do ISLA de Gaia, com a parce-
Estivemos na ltima sesso do grupo e adormos!
ria entre a instituio anfitri e a WeMake, tendo presidido
Como costume, o bom ambiente reinou na reunio, sesso de abertura a Directora da Escola Superior de Tecno-
sendo que desta vez as oradoras convidadas foram a Ana logia, a Dr Ana Paula Pinto e o Dr. Filipe Morais, CEO da
Rita Queiroz, que nos trouxe uma apresentao sobre Os WeMake.
desafios do Marketing e da Comunicao no sector das TIs
No painel foram abordados temas como desafios e
em Portugal e a Sofia Azevedo, que nos falou acerca de
solues de usabilidade, investigao atravs do desenvolvi-
(Un)process or the truth about functional analysis, onde
mento, ludificao e usabilidade, bem como Data Driven.
acentuou as verdades e os mitos sobre a anlise funcional de
Aps o tradicional coffee break foi a vez de usabilidade na
um projecto.
Web e Mobile, novas formas de interactividade em platafor-
As apresentaes decorreram em ritmo animado sen- mas de entretenimento, usabilidade para a utilidade e usabili-
do que reinou a partilha de experincias e conhecimentos. J dade no Marketing.
vos falmos das vrias sesses das Portugal Girl Geek Din-
Com um auditrio recheado, trocaram-se ideias , tra-
ners (fundadas em 2010 pela Vnia Gonalves) e garantimos
zendo a destaque a experincias dos vrios oradores e res-
que vm a adquirir cada vez mais adeptas (e adeptos) em
pectivas empresas, bem como dos participantes no evento.
Portugal.

No final da sesso, foram ainda sorteadas entre os


Ficam algumas imagens que marcaram a data.
participantes, trs licenas e-learning da Pluralsight que foram
gentilmente oferecidas a esta causa.

Deixamos um agradecimento especial Mnica Rodri-


gues, Cludia Carvalho (organizao) e Carla Quintino
(Main Hub). Mais uma vez reiteramos que apesar de o
#PGGD29 ter sido em Lisboa, vrias so as cidades portu-
guesas que se inserem neste projecto!

Aqui na Programar vamos continuar a acompanhar de


perto, sendo que desafiamos todas as Geek Girls (e acompa-
nhantes) a frequentarem as sesses!

Mais informaes em: http://portugalgirlgeekdinners.com/blog/

4
TEMA DE CAPA
Travessia de uma rvore de diretrios usando recursividade
TEMA DA CAPA

Travessia de uma rvore de diretrios usando recursividade


sys
tmp
Introduo usr
var
O diretrio um elemento familiar nos sistemas de
ficheiros, sendo empregue para organizar o armazenamento Listagem 1: rvore de diretrios de um sistema Linux a partir
de dados em suporte persistente como, por exemplo, discos do diretrio / (sada do tree: tree -L 1 -d /)
rgidos. Uma operao relativamente comum num sistema
de ficheiros a travessia da rvore de diretrios, atravs da As funes da famlia stat
qual so visitados todos os subdiretrios e ficheiros. Este As funes da famlia stat stat, fstat e lstat permi-
artigo foca o uso de recursividade e das funes stat e read- tem o acesso aos metadados de uma entrada do sistema de
dir para a travessia de uma rvore de diretrio recorrendo ficheiros, seja um diretrio, um ficheiro, uma ligao simbli-
metodologia denominada de busca em profundidade (depth- ca ou um outro recurso. A designao metadados abrange
first search na designao anglo-saxnica) (Knuth, 1968) os elementos caracterizadores da entrada, tal como a data
(Wikipedia, 2015). Embora o artigo assente no ambiente de criao, as permisses, a identificao do dono e grupo
Linux e na linguagem C, a metodologia utilizada pode ser do recurso, entre outros elementos. Para o efeito, as funes
empregue, com algumas adaptaes, noutras plataformas e da famlia stat recorrem estrutura struct stat para represen-
com outras linguagens de programao. tao dos metadados. A struct stat tem 13 campos, apresen-
Diretrios, caminhos absolutos e caminhos relativos tados na Listagem 2 que foi diretamente extrada da sada
do comando man 2 stat. Note-se que algumas verses de
Um diretrio pode conter ficheiros, outros diretrios e UNIX podem ter campos adicionais na struct stat, sendo que
assim sucessivamente, resultando numa estrutura em rvo- o uso desses campos extra num programa limita necessaria-
re. O ponto de entrada da rvore designado por diretrio mente a portabilidade do cdigo.
raiz, sendo representado pela barra / (slash bar na designa-
o anglo-saxnica) em sistemas operativos UNIX e deriva- struct stat {
dos. A barra / ainda empregue como separador na repre- dev_t st_dev;/* ID of device containing file */
ino_t st_ino;/* inode number */
sentao de caminhos dos sistemas de ficheiros que identifi- mode_t st_mode;/* protection */
quem um determinado recurso, seja um diretrio ou um fi- nlink_t st_nlink;/* number of hard links */
cheiro. No que respeita a caminhos, esses podem ser repre- uid_t st_uid;/* user ID of owner */
gid_t st_gid;/* group ID of owner */
sentados de forma absoluta ou relativa. A representao dev_t st_rdev;/* device ID (if special file) */
absoluta requer que o caminho do recurso que se pretende off_t st_size;/* total size, in bytes */
identificar seja especificado desde a raiz, iniciando-se pela blksize_t st_blksize;/* blocksize for filesystem I/
O */
barra /. Por exemplo, o caminho absoluto /bin/ls identifica a blkcnt_t st_blocks;/* num of 512B blocks allocated
localizao tradicional do comando ls num sistema UNIX. */
time_t st_atime;/* time of last access */
Por sua vez e como o nome sugere, um caminho relativo time_t st_mtime;/* time of last modification */
especificado em relao ao diretrio corrente, no se inician- time_t st_ctime;/* time of last status change */
do, portanto, com a barra /. Por exemplo, o caminho progra- };
mar/artigo.doc refere-se ao ficheiro artigo.doc que se encon-
tra no diretrio programar que existe no diretrio corrente. A Listagem 2: estrutura struct stat (fonte: man 2 stat)
Listagem 1 mostra o primeiro nvel da rvore de diretrios A Listagem 3 apresenta o cdigo da aplicao meta-
definida pelo sistema de ficheiros de um sistema Linux. dados_dir_corrente que exemplifica o uso da funo stat,
/ mostrando na sada padro o valor dos 13 campos de meta-
bin dados da struct stat para a entrada . (ponto). A entrada .
boot
dev uma entrada especial que representa o diretrio corrente.
etc Outra entrada especial o .. (ponto ponto) que representa
home o diretrio pai ou diretrio ascendente. Tanto o diretrio . e
lib
lost+found o diretrio pai .. existem em todos os diretrios, pelo que as
media entradas . e .. so sempre vlidas (no caso do diretrio
mnt raiz /, a entrada .. aponta para o prprio diretrio raiz). A
opt
proc Listagem 4 mostra a sada resultante da execuo da aplica-
root o metadados_dir_corrente. Obviamente, a sada varia con-
run soante o diretrio corrente onde executada a aplicao.
sbin
srv

6
TEMA DA CAPA
TRAVESSIA DE UMA RVORE DE DIRETRIOS USANDO RECURSIVIDADE
Em termos de cdigo, para alm da chamada funo stat, ctime_r(&(buf_ptr->st_mtime),dia_hora_str));
a aplicao metadados_dir_corrente implementa a funo printf("st_ctime (ultima alter. estado)=%s",
tipo_file_str que recebendo o campo st_mode da struct stat ctime_r(&(buf_ptr->st_ctime),dia_hora_str));
}
devolve uma cadeia de caracteres indicando se a entrada
corresponde a um ficheiro regular, diretrio, atalho (symbolic int main(void){
char *nome = "."; /* diretrio corrente */
link) ou outro. Para determinar o tipo de entrada, a funo int ret_stat;
tipo_file_str() faz uso das macros do sistema S_IS_REG(), struct stat stat_buf;
S_IS_DIR() e S_IS_LNK() indicando como parmetro o cam- ret_stat = stat(nome, &stat_buf);
if( ret_stat == -1 ){
po st_mode da entrada em anlise. Importa notar que para fprintf(stderr,"Erro: chamada stat"
alm do tipo de entrada, o campo st_mode contm, a infor- " para recurso '%s' - %s\n",
mao referente s permisses de acesso do recurso leitu- nome, strerror(errno));
exit(1);
ra, escrita, execuo para o dono, o grupo e o outros. Fi- }
nalmente, os campos do tipo time_t, isto , st_atime, mostra_struct_stat(&stat_buf);
return 0;
st_ctime e st_mtime so convertidos para uma representa- }
o dia/hora atravs da funo ctime_r que corresponde
verso reentrante da funo ctime. Mais detalhes podem ser Listagem 3: aplicao mostra_metadados_dir_corrente
encontrados na respetiva pgina do manual (man ctime).
st_dev = 8.17
Conforme referido anteriormente, a famlia de funes st_ino = 3662149
st_mode = 41fd (Diretrio)
stat tem, para alm da funo stat propriamente dita, as fun- st_nlink = 2
es fstat e lstat. Na funo fstat, o ficheiro do qual se pre- st_uid = 1000
tende os respetivos metadados indicado por um descritor st_gid = 1000
st_rdev= 0
de ficheiro, descritor esse previamente obtido atravs da st_size= 4096
funo open. Por sua vez, a funo lstat comporta-se de st_blksize= 4096
st_blocks=8 (blocos de 512B)
forma similar funo stat, com uma exceo: quando st_atime (ultimo acesso)=Sat Oct 31 01:04:05 2015
indicada uma ligao simblica, o lstat devolve os metada- st_mtime (ultima modificao)=Sat Oct 31 01:10:16
dos da ligao simblica e no os metadados para a qual 2015
st_ctime (ultima alter. estado)=Sat Oct 31 01:10:16
aponta a ligao simblica. Mais adiante neste artigo, far-se- 2015
uso da funo lstat na implementao recursiva da traves-
sia de uma rvore de diretrios.
Listagem 4: sada produzida pela execuo de metada-
#include <>
char *tipo_file_str(mode_t st_mode){ dos_dir_corrente
if( S_ISREG(st_mode) ){
return "ficheiro normal"; Acesso ao contedo de um diretrio
}else if( S_ISDIR(st_mode) ){
return "Diretrio"; Em termos de programao, o acesso ao contedo de
}else if( S_ISLNK(st_mode) ){ um diretrio ficheiros, diretrios, atalhos, etc. apresenta
return "Atalho";
} algumas semelhanas com a leitura de um ficheiro, sendo
/* ainda aqui? */ necessrio efetuar a abertura do diretrio antes que se possa
return "outro"; aceder ao contedo e fechar o diretrio quando se terminou o
}
respetivo uso. Para o efeito existem as funes opendir
void mostra_struct_stat(const struct stat *buf_ptr) (abertura) e closedir (fecho). O acesso ao contedo feito
{ atravs de chamadas sucessivas funo readdir que devolve
char dia_hora_str[128];
printf("st_dev = %u.%u\n", uma entrada por chamada. Os prottipos das funes neces-
major(buf_ptr->st_dev), srias para iterar o contedo de um diretrio esto indicados
minor(buf_ptr->st_dev));
printf("st_ino = %ld\n", buf_ptr->st_ino); na Listagem 5.
printf("st_mode = %x (%s)\n", buf_ptr->st_mode,
tipo_file_str(buf_ptr->st_mode) ); No acesso ao contedo de um dado diretrio, a primei-
printf("st_nlink = %d\n", buf_ptr->st_nlink); ra operao consiste na abertura do diretrio atravs da fun-
printf("st_uid = %d\n", buf_ptr->st_uid); o opendir que, caso seja bem sucedida, devolve o endereo
printf("st_gid = %d\n", buf_ptr->st_gid);
printf("st_rdev= %d\n", (int)buf_ptr->st_rdev); de memria de um descritor de diretrio do tipo de dados DIR.
printf("st_size= %lu\n", buf_ptr->st_size);
printf("st_blksize= %ld\n", #include <sys/types.h>
buf_ptr->st_blksize); #include <dirent.h>
printf("st_blocks=%ld (blocos de 512B)\n",
buf_ptr->st_blocks); DIR *opendir(const char *name);
/* ctime devolve string com '\n' no final */
printf("st_atime (ultimo acesso)=%s", struct dirent *readdir(DIR *dirp);
ctime_r(&(buf_ptr->st_atime),dia_hora_str)); int readdir_r(DIR *dirp, struct dirent *entry,
printf("st_mtime (ultima modificao)=%s", struct dirent **result);

7
TEMA DA CAPA
TRAVESSIA DE UMA RVORE DE DIRETRIOS USANDO RECURSIVIDADE
int closedir(DIR *dirp); das todas as entradas do diretrio, a funo readdir devolve
NULL, devolvendo ainda NULL na ocorrncia de um erro, por
Listagem 5: prottipos das funes opendir, readdir e close- exemplo, caso o descritor de diretrio indicado seja invlido.
dir (fonte: man opendir e man readdir) Deste modo, torna-se necessrio distinguir entre o trmino
do diretrio (situao normal) e a ocorrncia de um erro
O descritor devolvido pela funo opendir empregue
(situao anormal). A distino feita atravs do valor da
para iterar o contedo do diretrio atravs da funo readdir.
varivel de erro errno que fica com um valor no nulo caso
Esta funo deve ser chamada em ciclo, devolvendo para
tenha ocorrido um erro na execuo da funo readdir. O
cada chamada uma entrada do diretrio. A funo readdir
cdigo da funo mostra_dir (Listagem 6) exemplifica o uso
assinala o trmino da iterao atravs da devoluo do valor
da varivel errno para distinguir entre a normalidade do tr-
NULL, indicando que j foram iteradas todas as entradas do
mino do diretrio e a anormalidade que a ocorrncia de
diretrio. O passo final corresponde ao encerrar do diretrio,
erro na execuo da funo readdir.
efetuando-se atravs da chamada funo closedir. De se-
guida, analisam-se separadamente cada uma das etapas De acordo com a norma POSIX sempre garantido
para acesso aos contedos de um diretrio: abertura, leitura que a struct dirent tenha o campo d_name, que como o no-
e encerramento do diretrio. me sugere, contm o nome da entrada. No Linux, a struct
dirent contm mais alguns campos, nomeadamente o campo
Obteno do descritor opendir
d_type que permite determinar o tipo da entrada (diretrio,
A obteno de um descritor do tipo DIR para um de- ficheiro regular, ligao simblica, etc.). Contudo, caso se
terminado diretrio efetua-se atravs da funo opendir. A pretenda manter a portabilidade do cdigo para ambientes
funo recebe como nico parmetro o caminho (absoluto ou POSIX, apenas deve ser empregue o campo d_name. Este
relativo) do diretrio para o qual se pretende receber um artigo segue esta abordagem, fazendo uso da funo stat
descritor. Caso a operao seja bem sucedida, a funo para aceder aos metadados de uma entrada devolvido via
devolve o endereo de uma estrutura do tipo DIR. Essa es- struct dirent pela funo readdir. A struct dirent disponibiliza-
trutura contm, entre outros elementos, um descritor para o da em sistemas Linux apresentada na Listagem 7.
diretrio. Por questes de simplicidade, este artigo emprega
a designao descritor de diretrio para designar a estrutura #include <stdio.h>
do tipo DIR. Caso ocorra um erro na tentativa de abertura do #include <sys/types.h>
#include <dirent.h>
diretrio (por exemplo, o diretrio especificado no existe), a #include <errno.h>
funo opendir devolve NULL, sendo atribudo varivel de #include <string.h>
#include <stdlib.h>
erro errno o respetivo cdigo numrico do erro. Dado que os
cdigos numricos so pouco descritivos para os operadores /*
humanos, possvel obter uma frase descritiva do cdigo de * Mostra as entradas do diretrio 'nome_dir'.
* Devolve 0 se tudo ok, -1 em caso de erro.
erro indicado pelo valor da varivel errno atravs da funo */
strerror. A Listagem 6 apresenta o cdigo do programa mos- int mostra_dir(const char *nome_dir){
tra_dir_corrente que faz uso da funo strerror para tornar as DIR *dir_d;
int finito, n_entradas;
mensagens de erro mais compreensveis. Mais informaes struct dirent *dir_entry;
sobre a varivel errno e a funo strerror esto disponveis dir_d = opendir(nome_dir);
nas respetivas pginas de manual eletrnico (man errno e if( dir_d == NULL ){
fprintf(stderr,"erro:"
man strerror). "impossvel abrir DIR '%s' - %s\n",
nome_dir, strerror(errno));
Iterao do diretrio readdir return -1;
}
Obtido um descritor para o diretrio, passa-se fase n_entradas = 0;
de leitura das entradas existentes no diretrio. Para o efeito finito = 0;
do{
faz-se uso da funo readdir que atua de forma similar a um dir_entry = readdir(dir_d);
operador de iterao: sempre que chamada, devolve uma if( dir_entry == NULL){
entrada diferente do diretrio at que estejam esgotadas if(errno){
fprintf(stderr,"erro:readdir"
todas as entradas. Deste modo, e caso se pretenda iterar (entrada %d)\n",n_entradas);
todo o contedo do diretrio, a funo readdir deve ser cha- closedir(dir_d);
return -1;
mada em ciclo at que seja alcanada a ltima entrada do }else{
diretrio. printf("Iterao de DIR '%s' "
"terminada (%d entradas)\n",
Como parmetro, a funo readdir recebe o descritor nome_dir, n_entradas);
de diretrio anteriormente obtido atravs da funo opendir. finito = 1;
}
Caso a chamada seja bem sucedida, a funo readdir devol- }else{
ve o endereo de uma estrutura do tipo struct dirent associa- printf("entrada: '%s'\n",
da entrada corrente. Ao invs, se j tiverem sido percorri- dir_entry->d_name);

8
TEMA DA CAPA
TRAVESSIA DE UMA RVORE DE DIRETRIOS USANDO RECURSIVIDADE
n_entradas++; vido pela funo readdir. Seguidamente, o campo st_mode
} da struct stat preenchido pela funo stat passado fun-
}while(finito == 0); o devolve_tipo_entrada que devolve uma cadeia de carac-
if( closedir(dir_d) == -1 ){
fprintf(stderr,"erro: impossvel fechar " teres descritiva do tipo de entrada, tais como DIR para dire-
"DIR '%s' - %s\n", nome_dir, strerror trio, ligao simblica para uma ligao simblica,
(errno));
return -1; ficheiro para um ficheiro regular, etc. Importa notar que a
} determinao do tipo de entrada feita aplicando-se uma
printf("DIR '%s': %d entradas\n", operao de AND binrio entre o valor st_mode e a mscara
nome_dir, n_entradas);
return 0; S_IFMT, comparando-se o resultado dessa operao com as
} constantes S_IFDIR (diretrio), S_IFIFO (pipe FIFO),
int main(void){ S_IFLNK (ligao simblica), S_IFREG (ficheiro regular) e
char *nome_diretorio = "."; /* dir. corrente */
int ret = mostra_dir(nome_diretorio); S_IFSOCK (socket). Tanto a mscara S_IFMT, bem como as
return ret; constantes S_IFIFO, S_IFLNK, S_IFREG e S_IFSOCK so
} disponibilizadas quando se faz uso dos ficheiros de cabea-
lho (.h) associados funo stat. Esta informao e mais
Listagem 6: programa mostra_dir_corrente alguns detalhes constam da pgina do manual eletrnico da
funo stat, acessvel atravs de man stat.
struct dirent {
ino_t d_ino; /* inode number */ #include <>
off_t d_off; /* not an offset */ /* Devolve string descritiva da entrada st_mode. */
unsigned short d_reclen /* length of record */ char *devolve_tipo_entrada(mode_t st_mode){
unsigned char d_type; /* type of file; switch( st_mode & S_IFMT ){
not supported by all filesystem types */ case S_IFDIR:
char d_name[256]; /* filename */ return "DIR";
}; case S_IFIFO:
return "FIFO/pipe";
Listagem 7: struct dirent em sistemas Linux (fonte: man read- case S_IFLNK:
dir) return "ligao simblica";
case S_IFREG:
return "ficheiro";
Encerramento case S_IFSOCK:
return "socket";
O encerramento de um descritor DIR realizado atra- default:
vs da chamada funo closedir. Essa operao neces- return "outro";
sria para garantir que os recursos associados ao descritor }
return NULL; /* Nunca alcanado */
so convenientemente libertados. A funo closedir recebe o }
descritor do tipo DIR que se pretende encerrar. Caso o en- /* Mostra as entradas do diretrio 'nome_dir'
cerramento seja bem sucedido, a funo devolve 0; caso * Devolve 0 se tudo ok, -1 em caso de erro */
int mostra_dir(const char *nome_dir){
contrrio, devolve -1, atribuindo varivel errno um cdigo DIR *dir_d;
numrico descritivo do erro. Na funo mostra_dir (Listagem int finito, n_entradas;
7) exemplifica-se a verificao da eventual ocorrncia de struct dirent *dir_entry;
char path[PATH_MAX];
erros na sequncia do fecho do diretrio. size_t path_len = sizeof(path);
dir_d = opendir(nome_dir);
Uso combinado das funes readdir e stat if( dir_d == NULL ){
fprintf(stderr,"erro: impossvel abrir"
A travessia de uma rvore de diretrios requer a ca- "DIR '%s' - %s\n",nome_dir, strerror(errno));
pacidade de identificar os tipos de cada entrada existente return -1;
}
num diretrio. De facto, torna-se necessrio identificar as n_entradas = 0; finito = 0;
entradas do tipo diretrio por forma a que esses subdiret- do{
rios possam eles tambm ser visitados. Para o efeito, torna- dir_entry = readdir(dir_d);
if( dir_entry == NULL){
se necessrio o uso combinado das funes readdir if(errno){
(convenientemente enquadrada com opendir e closedir) e fprintf(stderr,"erro: readdir"
stat. A Listagem 8 apresenta o cdigo da aplicao mos- "(entrada %d)\n", n_entradas);
closedir(dir_d);
tra_dir_stat que faz uso das funes readdir e stat para listar return -1;
o contedo do diretrio cujo nome (absoluto ou relativo) }
printf("Iterao de DIR '%s' terminada "
indicado aplicao atravs do nico argumento a linha de "(%d entradas)\n", nome_dir,
comando. A aplicao lista o contedo do diretrio indicado, n_entradas);
mostrando o tipo diretrio, ficheiro regular, ligao simbli- finito = 1;
}else{
ca de cada entrada. Assim, para cada entrada do diretrio struct stat stat_buf;
devolvida pela funo readdir chamada a funo stat usan- snprintf(path,path_len, "%s/%s",
do como parmetro o campo d_name da struct dirent devol- nome_dir,dir_entry->d_name);
if( stat(path,&stat_buf) == -1 ){

9
TEMA DA CAPA
TRAVESSIA DE UMA RVORE DE DIRETRIOS USANDO RECURSIVIDADE
fprintf(stderr,"impossvel stat"
pela nova instncia. Por exemplo, caso a funo se encontre
" '%s':%s\n", dir_entry->d_name, a processar o diretrio dir_A/dir_B/dir_C e se torne necess-
strerror(errno)); rio processar o subdiretrio dir_D, a funo chamada com
return -1;
} o caminho dir_A/dir_B/dir_C/dir_D. Quando termina a traves-
n_entradas++; sia desse subdiretrio (e dos eventuais subsubdiretrios,
printf("[%03d]'%s' (%s)\n", etc.), a nova instncia termina, regressando a execuo ao
n_entradas, dir_entry->d_name,
devolve_tipo_entrada diretrio corrente para processamento da entrada seguinte e
(stat_buf.st_mode)); assim sucessivamente.
}
}while(finito==0); A Listagem 9 apresenta o cdigo da funo
if( closedir(dir_d) == -1 ){ dir_recursivo que efetua a travessia uma rvore de diretrios
fprintf(stderr,"erro: impossvel fechar"
"DIR '%s' - %s\n", nome_dir, strerror e subdiretrios. O primeiro parmetro nome_dir corres-
(errno)); ponde ao caminho do diretrio a percorrer. Por sua vez, o
return -1;
} segundo parmetro profundidade indica a profundidade
printf("------------------------------------\n"); do diretrio em anlise. A profundidade mede o nmero de
printf("DIR '%s': %d entradas\n", subdiretrios a que se encontra o diretrio corrente em rela-
nome_dir, n_entradas);
return 0; o ao diretrio original. Por exemplo, se a funo for cha-
} mada com o diretrio original / (raiz) num sistema Linux, o
int main(int argc, char *argv[]){ subdiretrio /usr ter profundidade 1 e o subsubdiretrio /usr/
if( argc != 2) {
fprintf(stderr,"usage: %s <path_of_dir>\n", bin ter profundidade 2 e assim sucessivamente. Para o efei-
argv[0]); to, considera-se que o diretrio original tem profundidade 0
exit(EXIT_FAILURE);
} (zero), sendo esse o valor que deve ser passado na primeira
char *nome_dir_ptr = argv[1]; chamada funo dir_recursivo. Depois, para cada chama-
mostra_dir(nome_dir_ptr); da recursiva, passado o valor de profundidade + 1, refletin-
return 0;
} do o facto de que a nova instncia da funo processa um
novo nvel de subdiretrio.
Listagem 8: programa mostra_dir_stat
Na travessia recursiva de uma rvore de diretrios
Travessia de uma rvore de diretrios necessrio ainda ter em conta duas situaes particulares. A
Analisando-se uma rvore de diretrio, facilmente se primeira est relacionada com os diretrios . (ponto) e
identifica um padro repetitivo: uma rvore composta por .. (ponto ponto), que conforme anteriormente foi visto, cor-
subrvores. De facto, um subdiretrio pode ser considerado respondem respetivamente ao diretrio corrente e ao diret-
a raiz de uma subrvore do diretrio que contm o subdiret- rio pai. Dadas as especificidades desses diretrios, torna-se
rio e assim sucessivamente. Deste modo, a travessia de um necessrio ignor-los em termos de travessia recursiva. De
diretrio e de todos os seus subdiretrios pode ser decom- facto, caso se considerasse o diretrio . para efeitos de
posta noutras operaes de travessia, uma travessia por travessia, chamando recursivamente a funo dir_recursivo
cada subdiretrio. Na informtica, este tipo de operao que com ., cair-se-ia num ciclo sem fim, preso no diretrio cor-
se subdivide em operaes do mesmo tipo em sub-conjuntos rente. Na prtica, a aplicao terminaria devido a um exces-
do conjunto original de dados presta-se ao uso de recursivi- sivo nvel de recursividade materializado com um transbordo
dade. De uma forma aproximada, pode dizer-se que em ter- de pilha ou stack overflow na designao anglo-saxnica
mos de programao programticos, a recursividade consis- (Chris Anley, 2007). Similarmente, o diretrio .. deve ser
te no chamar de uma funo por ela prpria por forma a tra- ignorado, pois levaria o controlo de execuo para o diretrio
tar um subconjunto dos dados originais. O chamar da funo ascendente, impedindo o normal processamento do diretrio
por ela prpria origina uma nova instncia da funo. No corrente e respetivos subdiretrios. O ignorar dos diretrios
caso da travessia de uma rvore de diretrios, cada nova . e .. para efeitos de travessia consegue-se comparando o
instncia da funo de travessia recebe um subdiretrio do nome do novo diretrio a visitar com . e .., comparao
diretrio que est a ser processado pela funo chamante, efetuada atravs da funo strcmp.
invocando ela prpria uma nova instncia para cada subdire- A segunda situao a acautelar est relacionada com
trio que tenha e assim sucessivamente. ligaes simblicas. Assim, caso seja detetada uma ligao
Embora a descrio seja relativamente complexa, em simblica para um diretrio, essa mesma deve ser ignorada,
termos de cdigo, a operacionalizao simples: sempre caso contrrio corre-se o risco de se saltar para outra rvore
que se deteta uma entrada do tipo diretrio no diretrio cor- de diretrio, interrompendo a travessia pretendida. A neces-
rente, cria-se uma nova instncia da funo. Essa nova ins- sidade de deteo de uma ligao simblica requer o uso da
tncia (i.e., chamada recursiva) recebe como parmetro na funo lstat que, conforme anteriormente referido, no caso
chamada funo o caminho correspondente ao diretrio de uma ligao simblica devolve os metadados referentes
corrente acrescido do nome do diretrio a ser processado ligao simblica e no ao recurso (diretrio/ficheiro) aponta-

10
TEMA DA CAPA
TRAVESSIA DE UMA RVORE DE DIRETRIOS USANDO RECURSIVIDADE
do pela ligao simblica. Desta forma, torna-se possvel
d_name*/
detetar uma ligao simblica. snprintf(entrada,sizeof(entrada),"%s/%s",
nome_dir, dir_entry->d_name);
O programa dir_recursivo mostrado na Listagem 9 struct stat stat_buf;
efetua a travessia de todos os diretrios, ficheiros e subdire- if( lstat(entrada,&stat_buf) == -1 ){
fprintf(stderr,"erro stat '%s':%s\n",
trios de uma rvore de diretrio. A raiz da rvore de diret- entrada, strerror(errno));
rios deve ser indicada como o nico parmetro da linha de continue;
comandos do programa. Como bvio, apenas so mostra- }
n_entradas++;
dos os contedos para os quais o utilizador que executa a if( S_ISLNK(stat_buf.st_mode) == 1 ){
aplicao tem permisses de acesso. fprintf(stderr,"Ignorado link %s\n",
entrada);
continue;
#include <...> }
/* Devolve string descritiva da entrada if( S_ISDIR(stat_buf.st_mode) ){
* indicada por st_mode. Caso o tipo de entrada no if( strcmp(".",dir_entry->d_name) &&
* seja reconhecido, a funo devolve "outro". */ strcmp("..",dir_entry->d_name)){
char *devolve_tipo_entrada(mode_t st_mode){ dir_recursivo(entrada,
switch( st_mode & S_IFMT ){ profundidade + 1);
case S_IFDIR: }
return ("DIR"); }else{
case S_IFIFO: printf("(DIR='%s',P=%d) '%s' (%s)\n",
return ("FIFO/pipe"); nome_dir, profundidade,
case S_IFLNK: dir_entry->d_name,
return ("ligao simblica"); devolve_tipo_entrada(stat_buf.st_mode));
case S_IFREG: }
return ("ficheiro"); }
case S_IFSOCK: }while(finito==0);
return ("socket");
default: if( closedir(dir_d) == -1 ){
return ("outro"); fprintf(stderr,"erro: impossvel fechar DIR"
} "'%s' - %s\n",nome_dir, strerror(errno));
/* Nunca alcanado */ return -1;
return NULL; }
} return 0;
/* Funo recursiva que percorre a rvore de }
* diretrios definida por 'nome_dir'.
'profundidade' int main(int argc, char *argv[]){
* indica o nvel de profundidade de nome_dir if( argc != 2 ){
* relativamente raiz da rvore de diretrios fprintf(stderr,"ERRO\n");
* em anlise. fprintf(stderr,"%s <diretrio raiz>\n",
* Devolve -1 em caso de erro, 0 se tudo OK. argv[0]);
*/ exit(EXIT_FAILURE);
int dir_recursivo(char *nome_dir, int profundidade) }
{ int profundidade = 0;
DIR *dir_d; char *nome_diretorio = argv[1];
int finito, n_entradas; dir_recursivo(nome_diretorio, profundidade);
struct dirent *dir_entry; return 0;
dir_d = opendir(nome_dir); }
if( dir_d == NULL ){
fprintf(stderr,"erro: impossvel abrir DIR "
"'%s' - %s\n",nome_dir, strerror
(errno)); Listagem 9: programa dir_recursivo
return -1;
} Reentrncia
n_entradas = 0;
finito = 0; O facto do cdigo apresentado neste artigo usar a
do{ funo no reentrante readdir, leva a que no seja seguro
errno = 0; usar o cdigo em ambiente multithreaded. Contudo, no caso
dir_entry = readdir(dir_d);
if( dir_entry == NULL ){ da funo readdir relativamente fcil substituir o seu uso
if(errno){ pela verso reentrante readdir_r. Esta abordagem deixada
fprintf(stderr,"erro: readdir " como exerccio para os leitores, sugerindo-se a consulta do
"(entrada %d)\n",n_entradas);
closedir(dir_d); manual eletrnico (man readdir_r).
return -1;
}else{ Nota final
printf("(DIR='%s',P=%d) "
"DIR terminada (%d entradas)\n", Este artigo abordou a travessia com busca em profun-
nome_dir,profundidade,n_entradas); didade de uma rvore de diretrios, com o intuito de visitar
printf("------------------------\n");
finito = 1; todos os recursos (ficheiros, subdiretrios) dessa mesma
} rvore. Embora o enfoque tenha sido em diretrios, uma
}else{ metodologia similar pode ser empregue, com as devidas
char entrada[PATH_MAX]; /* path p/

11
TEMA DA CAPA
TRAVESSIA DE UMA RVORE DE DIRETRIOS USANDO RECURSIVIDADE
adaptaes, com outros tipos de rvores, por exemplo, rvo-
res binrias.

O acesso ao conte-
do feito atravs de
chamadas sucessivas
funo readdir que de-
volve uma entrada por
chamada ()

Bibliografia

Chris Anley, J. H. (2007). The Shellcoder's Handbook:


Discovering and Exploiting Security Holes (2nd ed.).
Wiley Publishing, Inc.

Knuth, D. (1968). The Art of Computer Programming,


volume 1: Fundamental Algorithms. Addison-Wesley.

Wikipedia. (2015). Busca em Profundidade. Obtido


em 06 de 11 de 2015, de Wikipedia: https://
pt.wikipedia.org/wiki/Busca_em_profundidade

AUTOR
Escrito Por Patrcio Domingues

professor do Departamento de Eng Informtica na Escola Superior de Tecnologia e Gesto (ESTG) do Instituto Politcnico
de Leiria (IPLeiria). Tem lecionado, entre outras, as disciplinas de Programao Avanada e Sistemas Operativos da Licencia-
tura em Engenharia Informtica.

AUTOR
Escrito Por Vtor Carreira

leciona as disciplinas de Programao Avanada, Sistemas Operativos e Desenvolvimento de Aplicaes Distribudas ao


curso de Licenciatura em Engenharia Informtica da Escola Superior de Tecnologia e Gesto do Politcnico de Leiria.

AUTOR
Escrito Por Carlos Grilo

coordenador do Mestrado em Engenharia Informtica Computao Mvel da Escola Superior de Tecnologia e Gesto do
Politcnico de Leiria. Leciona as disciplinas de Programao Avanada e Desenvolvimento de Aplicaes Empresariais ao
Curso de Licenciatura em Engenharia Informtica.

12
A PROGRAMAR
Validao de formulrios em JavaScript
Aplicaes Mobile com o Xamarin Studio
Plotagem de dados em tempo real com Python usando matPlotLib
Xamarin 4 tem tudo que precisa para criar ptimas aplicaes mveis!
A PROGRAMAR

Validao de formulrios em JavaScript


mbito <option value = "programador">Programador
</option>
Atualmente, a validao de formulrios em JavaScript <option value = "designer">Designer
muito utilizada para garantir que os dados solicitados nos </option>
<option value = "tester">Tester</option>
campos que o utilizador preenche em qualquer site sejam <option value = "todas">Todas</option>
fiis ao que o programador deseja. A validao de dados por </select>
meio de programao JavaScript feita no browser (sem </label>
</p>
necessidade de ir at o servidor para transmitir dados) e <label>
garante a consistncia dos dados quando so enviados para <input type="submit" name="sbt"
value="Enviar" />
a base de dados. </label>
<br />
A validao no cliente necessria em vrias situaes: </p>
quando, por exemplo, o utilizador no preencheu correta- </form>
mente o seu e-mail e colocou 2 invs de @. Se esta vali-
dao for no cliente, o utilizador recebe a mensagem de e- O cdigo acima deve ser colocado dentro do corpo do
mail invlido antes do formulrio ser enviado. A validao no documento <body> </body>. Na tag form o evento onSubmit
cliente melhora a interao do utilizador com o site, mas chama uma funo denominada validaForm que re-
claro, que as validaes no servidor tambm devem ser sponsvel pela validao dos dados do formulrio. Se os
feitas. dados estiverem corretos a funo retorna true e o formulrio
enviado. Caso contrrio mostrada uma mensagem que
Introduo
determina o local do erro.
Neste artigo apresento um script completo que exempli-
Cdigo JavaScript
fica a validao de um formulrio em JavaScript.
Segue abaixo o cdigo de validao em JavaScript. Este
Primeiro necessrio criar o formulrio que contm os
cdigo deve ser colocado dentro do cabealho do documen-
campos a serem validados.
to <head> </head>.

<script type="text/javascript">
Cdigo HTML: <!--
function validaform(frm) {
Segue abaixo o cdigo HTML para criar o formulrio. /*
o parametro frm desta funo significa: this.form,
<form name="frmTeste" method="post" action="#" pois a chamada da funo - validaForm(this) foi
onsubmit="return validaForm(this);"> definida na tag form.
<p>Validao de formulrio</p> */
<p>
Nome:<input type="text" name="nome" //Verifica se o campo nome foi preenchido e
id="nome" /> //contm no mnimo
</p> //trs caracteres.
<p>Email: if(frm.nome.value == """ || frm.nome.value ==
<label><input type="text" name="email" null || frm.nome.value.lenght < 3) {
id="email" /></label>
// mostrado um alerta, caso o campo esteja
</p> //vazio.
<p>Sexo: alert("Por favor, indique o seu nome.");
<label>
<input type="radio" name="sexo" value="M" //Foi definido um focus no campo.
id="masc" /> Masculino frm.nome.focus();
</label>
<label> //o form no enviado.
<input type="radio" name="sexo" value="M" return false;
id="fem" /> Feminino }
</label>
</p> //o campo e-mail precisa de conter: "@", "." e
<p>Profisso //no pode estar vazio
<label>
<select name="cargo"> if(frm.email.value.indexOf("@") == -1 ||
<option value = "">Selecione o cargo frm.email.valueOf.indexOf(".") == -1 ||
</option> frm.email.value == "" ||

14

A PROGRAMAR
VALIDAO DE FORMULRIOS EM JAVASCRIPT

frm.email.value == null) { null)


alert("Por favor, indique um e-mail {
vlido."); alert("Por favor, conte-nos um pouco sobre
frm.email.focus();
return false; si.");
frm.sobre.focus();
/* return false;
O utilizador necessita de selecionar um dos dois }
radio buttons: Masculino ou Feminino. </script>
*/
escolhaSexo = -1; //valor negativo default (padro) Concluso
//que significa que nada foi escolhido ainda.
Esta foi uma breve demonstrao de como podemos
/*
No bloco de cdigo abaixo foi criado um ciclo entre implementar validaes para os nossos formulrios HTML
os radios button usando apenas JavaScript.
com o mesmo nome (sexo)
*/
for (x = frm.sexo.lenght -1; x > -1; x--) {
/*
x = frm.sexo.lenght -1 a mesma coisa que: x = 2-
1, que resulta em 1.
x > -1 significa que o valor de x no pode ser
A validao no cli-
igual a -1 e
sim maior, porque -1 significa que nada foi
escolhido.
ente necessria em
x-- significa que h um decremento no valor x,
algo como:
x = 1, x= 0 e pra pois x no pode ser -1.
vrias situaes: quan-
*/

if(frm.sexo[x].checked) { //checked quer dizer


do, por exemplo, o uti-
//selecionado,
//ento verifica se o primeiro (0) ou o
//segundo (1) radio button
lizador no preencheu
//foi selecionado (checked).
escolhaSexo = x; //atribui varivel
//escolhjaSexo o valor X.
corretamente o seu e-
}
}
/*
mail e colocou 2 invs
se nenhuma das opes (masculino ou feminino) forem
escolhidas, mostra um alerta e cancela o envio.
*/
de @ . ()
if (escolhaSexo == -1) {
alert("qual o seu sexo?");
frm.sexo[0].focus();
return false;
} importante realar que a validao de formulrios
que so submetidos ao servidor web no deve depender
/* valida a profisso: apenas de JavaScript no lado cliente, pois no se pode as-
O utilizador tem de escolher uma entre as trs
opes (Programador, Designer e Tester). segurar que o recurso esteja ativado e a funcionar correta-
*/ mente em todos os browsers. Implementada ou no a valida-
if(frm.prof.value == "" || from.prof.value == o em JavaScript, deve sempre haver a validao dos da-
"Todas") {
alert("De momento, precisamos de especialistas dos recebidos no servidor da aplicao. O uso de validao
nas trs reas indicadas"); via JavaScript cliente serve essencialmente para facilitar a
frm.prof.focus(); pr-validao no lado cliente, possibilitando ao utilizador
return false;
} ter os seus dados verificados ainda antes de submeter o
formulrio.
// Valida a textArea, que como validar um campo
//de texto simples.
if(frm.sobre.value == "" || frm.sobre.value ==

AUTOR
Escrito por Tnia Valente

Natural de Coimbra, licenciou-se em Engenharia Informtica pelo Instituto Superior de Engenharia de Coimbra e, actualmente,
frequenta o mestrado em Human Computer Interaction. entusiasta na rea de Desenvolvimento Web, no que concerne s
Tecnologias Web, Design de Interface (UI) e User Experience (UX). Curiosa e motivada por novos desafios, acredita que a
criatividade pode transformar a maneira como as pessoas pensam, sentem e agem.

15
A PROGRAMAR

Aplicaes Mobile com o Xamarin Studio


Depois deste processo, criado o projecto na qual
Introduo vamos trabalhar. Digamos que os utilizadores de Android
Studio, no devero ter dificuldades em perceber a estrutura
Uma das linguagens de programao que tem tido um
do projecto em si, pois so muito semelhantes. No lado es-
aumento susceptvel a nvel de popularidade, o C#. Cada vez
querdo da janela do IDE, est a Soluo ou o Projecto pro-
mais, esta tem sido a escolha feita pelos programadores para
priamente dito (ver figura 3).
por as suas ideias em prtica, nos mais variados tipos de soft-
ware. Chegou a altura de esta ter uma palavra a dizer no que
toca a aplicaes Android e IOS, visto que s era aplicada para
apps Windows Phone. Para ajudar a festa, temos o Xamarin
Studio.

Descrio

O Xamarin Studio um IDE que traz consigo um vasto


conjunto de features, o que ir ajudar ao desenvolvimento de
aplicaes visualmente atractivos e com relativa facilidade,
utilizando todo o poder do C#. Neste artigo, vou mostrar como
podem criar uma aplicao para dispositivos Android, uma app
de introduo muito simples. Convm verificar durante a insta-
lao do IDE se o Android SDK instalado ( instalado normal-
mente junto com o Xamarin Studio), pois sem ele no vamos
poder criar qualquer tipo de projecto.

Figura 1: Welcome Screen do Xamarin Studio

O processo de criao de um projecto de aplicaes


Android no Xamarin, no foge muito ao que "normal" em to-
dos os IDEs. A imagem abaixo mostra os passos por ordem
numrica que so necessrios para a criao do mesmo.

Figura 3: Estrutura do projecto

Na Soluo, podem ver que os ficheiros apresentados


so familiares a programadores Android, por isso, neste arti-
go no vou alongar muito mais a explicao dos mesmos.

Vamos passar a aplicao propriamente dita. Para


podermos ver o layout da aplicao assim que o projecto
criado, basta fazer abrir a pasta layout e fazer double-click
Figura 2: Passos ordenados de 1 a 5 para a criao do projec- no Main.xml. Assim podero ver como est a vossa aplica-
to Android o em termos de apresentao. Na mesma janela, h uma

16

A PROGRAMAR
APLICAES MOBILE COM O XAMARIN STUDIO
opo para editar o layout por drag and drop, Content (ver figu- Neste artigo, no vou aprofundar nenhum cdigo es-
ra 5), ou ento por cdigo puro, Source (ver figura 4). pecfico, ou desenvolver algo, sendo que, o que falta aqui
ver a aplicao a funcionar. Para tal, vamos ter de ir barra
de menu do Xamarin, clicar em Ferramentas e no sub-menu
escolher a opo Android Devices.... Abrir uma pequena
janela com uma lista dos emuladores que j esto predefini-
dos no IDE, mas vamos criar o nosso prprio. O processo
exactamente o mesmo que no Android Studio, ou no SDK.
Depois de o emulador estar criado, vamos executar a nossa
aplicao, simplesmente carregando no boto Start, no can-
to superior esquerdo do nosso IDE. Assim, desta maneira
vamos ver a app em aco (ver figuras 7 e 8).

Figura 4: Source

Figura 7: Aplicao iniciada

Figura 5: Content

Em seguida, na estrutura do projecto, vamos abrir o


ficheiro onde est o principal cdigo da aplicao,
o MainActivity.cs. Por defeito, o Xamarin j cria cdigo de
exemplo, para que a aplicao corra de imediato no emulador
ou dispositivo fsico. Explicando rapidamente o que esse cdi-
go faz, uma funo que contabiliza o nmero de cliques que
so dados num boto, aprestando os dados dentro do mesmo.
Podero ver isso na figura abaixo (ver figura 6).

Figura 8: Aplicao em execuo

Concluso

Com o Xamarin, muito fcil comear um projecto para qual-


quer aplicao Android ou IOS. Agora dar asas imagina-
o e comear a programar.
Figura 6: Source Code

AUTOR
Andr Silva

Entusiasta das tecnologias desde pequeno, decidiu seguir a vida de programador. Formado em Gesto e Programao de Sis-
temas Informticos e Programao Android. Neste momento Co-Fundador da Digital Soul Games. digitalsoulgames.org

17
A PROGRAMAR

Plotagem de dados em tempo real com Python usando matPlotLib


Introduo grficos em tempo real e por fim a que nos permite armaze-
nar os dados em memria, pelo tempo necessrio sua
Uma das tarefas mais comuns quando se trabalha
utilizao no mbito desta aplicao:
com aquisio de dados, a representao dos mesmos em
grficos, de forma a serem mais facilmente interpretveis pelo import serial # carrega a biblioteca Serial para
utilizador. Na verdade seja para um uso de hobbie, seja para # comunicaes srie
import numpy # carrega a biblioteca numpy
uma utilizao mais cientfica ou profissional, na maior parte import matplotlib.pyplot as plt #carrega a
dos casos, acabamos quase sempre por preferir a leitura grfi- #biblioteca pyplot
ca dos dados, o que nos permite rapidamente uma noo mais import matplotlib.gridspec as gridspec #carrega a
# biblioteca gridspec
ampla do contexto visvel. from drawnow import * #carrega a biblioteca
# drawnow
Como do conhecimento do leitor, hoje em dia existe from array import array #carrega a biblioteca
uma grande quantidade de dispositivos que transmitem dados # array
via USB, usando converso USB Srie, para a transmisso
A biblioteca gridspec, ser utilizada para disponibilizar
dos dados adquiridos, referentes a um ou mais parmetros
mltiplos grficos numa mesma janela, cada grfico com
num contexto ou ambiente. No entanto o que a maioria dos
unidades diferentes e escalas diferentes. Neste caso tere-
dispositivos tem em comum, a forma como transmite os da-
mos quatro grupos de grficos, disponibilizados em tempo
dos para o computador, normalmente usando um cabo USB ou
real, pelo que a biblioteca gridspec nos vai permitir disp-los
srie e transmitindo os dados em formato de texto simples. Ao
na janela de forma conveniente e controlar os grficos de
longo deste artigo ir ser apresentado o cdigo para receber
forma independente, como iremos ver mais adiante neste
dados de um conjunto de quatro sensores independentes, liga-
artigo.
dos a um mesmo dispositivo que os transmite via RS232 e
posterior apresentao em modo grfico, usando a linguagem Feito o carregamento das bibliotecas, precisamos de
Python e a biblioteca matplotlib, para nos desenhar o grfico criar os objectos onde vamos armazenar os valores, antes
em tempo quase real. (Para os mais distrados a transmisso mesmo de iniciarmos a comunicao com o dispositivo. Nes-
via RS-232 um padro de protocolo para troca serial de da- te exemplo usaremos seis vectores de variveis do tipo float.
dos binrios entre um DTE - Data Terminal equipment e um Para comunicar via srie, iremos precisar de um objecto do
DCE Data Communication equipment. Normalmente usado tipo serial, que recebe dois parmetros, neste caso o nome
nas portas sries dos computadores.) da porta srie e a velocidade de comunicao, tambm co-
nhecida por baud rate. Por fim vamos usar um contador, pois
Neste artigo no iremos focar o software que corre no
no vamos querer todos os dados armazenados em mem-
dispositivo, apenas a aquisio de dados e a plotagem dos
ria, apenas as ltimas posies e iniciamos a matplotlib em
mesmos, sendo que os diagramas do circuito, bem como o
modo interactivo utilizando o mtodo ion().
software que corre no micro-controlador, saem claramente do
mbito do que pretendido neste artigo. #instanciao dos objectos
tempF = array('f')
A biblioteca matplotlib, fornece a capacidade de repre- tempF2 = array('f')
sentar dados em grficos cartesianos, entre outros sendo qua- humF1 = array('f')
humF2 = array('f')
se uma alternativa livre, a outras peas de software, mais com- lum = array('f')
plexas e proprietrias. Alm da matplotlib iremos usar a biblio- moist = array('f')
teca numpy, para a parte de clculos que iremos realizar antes #comunicacao
arduinoData = serial.Serial('com3', 115200) #Cria
da plotagem dos dados. # um objecto do tipo serial chamado
# arduinoData
O cdigo plt.ion()
cnt=0
Ao longo dos prximos pargrafos, iremos apresentar o
cdigo, que ser utilizado no final para realizar a plotagem, isto
Finda esta parte, vamos agora criar a funo que ir ser cha-
, a impresso de desenhos em larga escala,dos dados. Em
mada a cada nova leitura de dados, para desenhar e actuali-
todo o artigo o cdigo escrito python verso 2.7, pelo que se
zar o grfico com os novos dados obtidos.
recomenda ao leitor que siga esta mesma verso.
Nesta funo, chamemos-lhe makeFig, iremos de-
Posto isto, vamos ao nosso programa! Para isso come-
senhar uma grelha de 3 por 3 recorrendo biblioteca grids-
amos por importar a biblioteca que nos permitir lidar com as
pec, a fim de suportar a disposio dos 4 grficos apresenta-
comunicaes, as duas bibliotecas que nos iro permitir fazer o
plot dos dados, primeiro a que nos ir permitir desenhar os

18

A PROGRAMAR
PLOTAGEM DE DADOS EM TEMPO REAL COM PYTHON USANDO MATPLOTLIB
dos, deixando espao entre eles. A grelha ser algo semelhan- plt2.set_ylabel('Humidade-2 %')
te figura abaixo: plt2.ticklabel_format(useOffset=False)
plt2.legend(loc='upper right')
#Plot 3
plt.subplot(gs[-1,0])
plt.ylim([0,100])
plt.title('Humidade do solo')
plt.grid(True)
plt.ylabel('Humidade %')
plt.plot(moist, 'ro-', label='Humidade')
plt.legend(loc='upper left')
#Plot 4
plt.subplot(gs[-1,-1])
plt.ylim([0,2000])
plt.title('Luminosidade')
plt.grid(True)
plt.ylabel('Luminosidade (lux)')
plt.plot(lum, 'ro-', label='Luminosidade')
plt.legend(loc='upper left')

Chegados a esta parte do cdigo, falta-nos escrever


o programa principal que ser executado. Um dos problemas
mais comuns com aquisio de dados via srie, so os atra-
sos e as falhas de transmisso de dados. Para evitar algu-
mas dessas situaes podemos indicar ao computador que a
menos que existam dados para serem recebidos, no execu-
Criada a grelha, cada grfico passa a ser uma
ta o restante cdigo. Neste exemplo concreto usamos um
imagem, separada, com as suas propriedades independen-
ciclo while para o fazer, verificando se existem dados no
tes, como o caso da posio, legendas, escalas, etiquetas,
buffer. Se existirem, o restante cdigo executado, caso
smbolos e cores das linhas. De igual modo cada um dos res-
contrrio repete o ciclo, aguardado a disponibilidade dos
tantes quatro grficos, ter essa mesma definio, como pode
mesmos.
ser observado no cdigo da funo. Para simplificar, apenas
est comentado o cdigo da primeira figura, acreditando que while (arduinoData.inWaiting()==0): #aguarda por
para o leitor, ser simples entender o restante cdigo, uma vez # dados
pass #no executa nada
que as instrues so as mesmas, mudando apenas alguns
parmetros, especficos para cada figura. Existindo dados no buffer, procedemos leitura dos
mesmos recorrendo ao mtodo readline(), como veremos no
def makeFig(): cdigo exemplo. Neste caso convm alertar para o facto de
gs = gridspec.GridSpec(3, 3) #gridspec 3x3
#Plot 1 os dados virem em formato de texto (string) e ser necessria
plt.subplot(gs[0, :])#posicao do subplot a sua converso a float, para ser feito o plot. Adicionalmente
plt.ylim([-30,50])#valor min e max de y os dados vm numa nica linha, separados por vrgula (,),
plt.title('Temperatura em Graus C')#titulo
plt.grid(True) noutros casos podem utilizar qualquer outro caracter de se-
plt.ylabel('Temp-1 c')#etiquetas do eixo y parao, dependendo do sistema utilizado. A primeira tarefa
plt.plot(tempF, 'ro-', label='temperatura em a fazer, aps a recepo da informao, ser a separao
graus') #plot de temperature
plt.legend(loc='upper left')#plot da legenda da string, nas mltiplas variveis e posterior armazenamento
plt2=plt.twinx()#cria um Segundo eixo y dos dados em memria ram, antes de fazermos a sua con-
plt.ylim(-30,50)#define os limites do
verso para float e armazenamento no vector de valores do
#Segundo eixo y tipo float, que ser usado para gerar o grfico.
plt2.plot(tempF2, 'b^-', label='Temp-2 c')
# desenha os val. De tempF2 Uma vez que as dimenses de um ecr, so limita-
plt2.set_ylabel('Temp-2 c') #Etiqueta do das, vamos optar por manter apenas visveis os ltimos cin-
# Segundo eixo
plt2.ticklabel_format(useOffset=False)# impede quenta pontos de cada grfico, seguindo uma lgica FIFO
# a escala do eixo X (first in, first out), onde os valores que entraram primeiro
plt2.legend(loc='upper right') (mais antigos), so eliminados e os novos so acrescenta-
#Plot 2
plt.subplot(gs[1, :]) dos uma posio frente da ltima posio utilizada recor-
plt.ylim([0,100]) rendo ao mtodo pop(), que recebe como argumento a posi-
plt.title('Humidade do Ar em Percentagem')
plt.grid(True) o que queremos eliminar o valor nela contido.
plt.ylabel('Humidade -1 %')
plt.plot(humF1, 'ro-', label='Humidade') Como o desenho ser em tempo real, teremos de
plt.legend(loc='upper left') colocar todas estas tarefas num ciclo infinito, por forma a
plt2=plt.twinx() manter a sua execuo ininterrupta, neste caso, novamente
plt.ylim(0,100)
plt2.plot(humF2, 'b^-', label='Humidade-2 %') um ciclo while. Poderamos ter usado qualquer outro tipo de

19
A PROGRAMAR
PLOTAGEM DE DADOS EM TEMPO REAL COM PYTHON USANDO MATPLOTLIB
ciclo, mas por uma questo de comodidade, usou-se um while, plt.ylabel('Luminosidade (lux)')
deixando-se ao critrio do leitor, usar qualquer outro ciclo da plt.plot(lum, 'ro-', label='Luminosidade')
sua preferncia. plt.legend(loc='upper left')

Abaixo apresentamos a listagem completa do cdigo #mainProgram


while True:
at agora construdo. while (arduinoData.inWaiting()==0):
pass
arduinoString = arduinoData.readline()
#graphics in python #A tarefa mais urgente da vida, : O que
import serial # carrega a biblioteca Serial para # ests a fazer pelos outros? (Martin
# comunicaes srie # Luther King Jr.)
import numpy # carrega a biblioteca numpy splitedArray = [float(s) for s in
import matplotlib.pyplot as plt #carrega a arduinoString.split(',')]
# biblioteca matplotlib temp = splitedArray[0]
import matplotlib.gridspec as gridspec #carrega a hum1 = splitedArray[1]
# biblioteca gridspec temp2 = splitedArray[2]
from drawnow import * #carrega a biblioteca drawnow hum2 = splitedArray[3]
from array import array #carrega a biblioteca array moisture = splitedArray[4]
lumen = splitedArray[5]
tempF = array('f') tempF.append(temp)
tempF2 = array('f') tempF2.append(temp2)
humF1 = array('f') humF1.append(hum1)
humF2 = array('f') humF2.append(hum2)
lum = array('f') moist.append(moisture)
moist = array('f') lum.append(lumen)
drawnow(makeFig)
arduinoData = serial.Serial('com3', 115200) plt.pause(.000005)
plt.ion() cnt=cnt+1
if(cnt>50):
#function makeFig() tempF.pop(0)
def makeFig(): tempF2.pop(0)
gs = gridspec.GridSpec(3, 3) humF1.pop(0)
#Plot 1 humF2.pop(0)
plt.subplot(gs[0, :]) moist.pop(0)
plt.ylim([-30,50]) lum.pop(0)
plt.title('Temperatura em Graus C')
plt.grid(True) #The best way to learn is to
plt.ylabel('Temp-1 c') # teach (Openhimmer)
plt.plot(tempF, 'ro-', label='temperatura em
graus')
plt.legend(loc='upper left')
plt2=plt.twinx()
plt.ylim(-30,50)
plt2.plot(tempF2, 'b^-', label='Temp-2 c')
plt2.set_ylabel('Temp-2 c')
plt2.ticklabel_format(useOffset=False)
plt2.legend(loc='upper right')
#Plot 2
plt.subplot(gs[1, :])
plt.ylim([0,100])
plt.title('Humidade do Ar em Percentagem')
plt.grid(True)
plt.ylabel('Himidade-1 %')
plt.plot(humF1, 'ro-', label='Humidade')
plt.legend(loc='upper left')
plt2=plt.twinx()
plt.ylim(0,100)
plt2.plot(humF2, 'b^-', label='Humidade-2 %')
plt2.set_ylabel('Humidade-2 %')
plt2.ticklabel_format(useOffset=False) Imagem do programa em execuo
plt2.legend(loc='upper right') Concluso
#Plot 3
plt.subplot(gs[-1,0]) Ao longo deste artigo apresentamos a matplotlib e as
plt.ylim([0,100])
plt.title('Humidade do solo') restantes bibliotecas de python que utilizamos para gerar
plt.grid(True) grficos em tempo real. Exploramos a criao de mltiplos
plt.ylabel('Himidade %') grficos com escalas diferentes numa mesma figura, e por
plt.plot(moist, 'ro-', label='Humidade')
plt.legend(loc='upper left') fim a recepo dos dados, provenientes de um equipamento
#Plot 4 que comunique com o computador por porta srie, ou qual-
plt.subplot(gs[-1,-1]) quer emulao dessa mesma porta e a sua representao
plt.ylim([0,2000])
plt.title('Luminosidade') grfica, em cada um dos grficos do layout, de forma inde-
plt.grid(True) pendente. Como pudemos ver, possvel criar os mais varia-

20

A PROGRAMAR
PLOTAGEM DE DADOS EM TEMPO REAL COM PYTHON USANDO MATPLOTLIB
dos layouts para a apresentao de grficos usando a lingua- matplotlib.org/
gem de programao python e a biblioteca matplotlib. de
facto simples comunicar via porta srie usando a biblioteca
Documentao oficial da biblioteca numpy: http://
serial e desenhar objectos grficos no ecr recorrendo ao con- www.numpy.org/
junto de bibliotecas drawnow. Documentao oficial da biblioteca pySerial: https://
pythonhosted.org/pyserial/

Python- Algoritmia e Programao Web (Jos Braga


Uma das tarefas de Vasconcelos) FCA Editora

Scientific Computing in Python NumPy, SciPy, Mat-


mais comuns quando se plotlib (Dr. Axel KohlMeyer) http://www.ictp-saifr.org/
wp-content/uploads/2014/09/numpy-scipy-
trabalha com aquisio matplotlib.pdf

Instrument Control (iC) An Open-Source Software to


de dados, a represen- Automate Test Equipment (NIST) Volume 117 (2012)
http://dx.doi.org/10.6028/jres.117.010 Journal of Re-
tao dos mesmos em search of the National Institute of Standards and
Technology
grficos, de forma a se- Real World Instrumentation with Python (J. M.
Hughes) OReilly
rem mais facilmente in-
terpretveis pelo utiliza-
dor ()

Deixamos as referncias que utilizamos neste artigo e


esperamos que o leitor se sinta entusiasmado a experimentar a
linguagem python e as bibliotecas referidas no exemplo.

Referncias

Documentao oficial da biblioteca matplotlib: http://

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.

AUTOR
Escrito por Antnio C. Santos

Com uma enorme paixo por tecnologia, autodidacta desde tenra idade, cresceu com o ZX Spectrum.
Tem vasta experincia em implementao e integrao de sistemas ERP, CRM, ERM, BI e desenvolvi-
mento de software por medida nas mais diversas linguagens. Diplomado do Curso de Especializao
Tecnolgica em Tecnologias e Programao de Sistemas de Informao pela ESTG-IPVC. 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 no curso de Licenciatura em Engenharia Informtica
e Xamarin Student Partner nesta mesma escola Twitter:@apocsantos

21
A PROGRAMAR

Xamarin 4 tem tudo que precisa para criar ptimas aplicaes mveis!
Vamos dar uma olhada nalgumas das funcionalidades e Ento, vamos escolher o modelo Xamarin.Forms da
melhorias includas no Xamarin 4.0 para o desenvolvimento de lista disponvel dentro do Visual Studio:
aplicaes multi-plataformas, incluindo Android, iOS e UWP
(Universal Windows Apps).

Apresentando Xamarin Forms 2.0

Desta vez comeamos por um aplicativo simples cha-


mado " Lucky Winner para selecionar aleatoriamente uma
pessoa a partir de uma lista de participantes usando a classe
System.Random comumente usada para gerar nmeros alea-
trios tal como em qualquer outro programa para .net.

Aqui esto alguns screenshots do aplicativo em execu-


o em diferentes plataformas:

O cdigo fonte completo para este aplicativo pode ser


descarregado do meu repositrio GitHub aqui.

Ao faz-lo iremos receber:

projeto Xamarin.Forms A para a partilha de cdigo


XAML / C # entre plataformas

projeto de referncia Android Xamarin.Forms

projeto iOS

projeto UWP

Se o leitor estiver familiarizado com MVVM, XAML e


C # ser bastante familiar para incluir facilmente Pages,
ViewModels, Views no projeto como na imagem seguinte.

Desenvolvendo um aplicativo Xamarin.Forms a partir do


zero:

Ao instalar a platforma Xamarin e obter uma licena


vlida ou trial seremos capaz de criar uma PCL (Biblioteca de
Classes Portvel) que contm a maior parte do cdigo para
que possa ser compartilhado e compilado de forma nativa para
Android, iOS e UWP.

22

A PROGRAMAR
XAMARIN 4 TEM TUDO QUE PRECISA PARA CRIAR PTIMAS APLICAES MVEIS!
Construo de interfaces com MVVM, de uma forma multi- Lembra-se como se faz para gerar um nmero aleat-
plataforma: rio em C # ? Mas no temos a certeza se sabemos faz-lo
para uma aplicao mobile? No existe preocupao! Pode-
Vamos dar vista de olhos no cdigo XAML usado para
mos usar os recursos principais do sistema padro em C #
definir a lista de participantes:
(at verso 6.0) alm de outros recursos interessantes,
<ListView x:Name="PlayersSelector" incluindo expresses lambda, delegates, actions, Linq e ope-
ItemsSource="{Binding Path=Players}" raes assncronas.
SeparatorColor="Gray"
SelectedItem="{Binding Path=Winner,
Mode=TwoWay}"> private void Play()
<ListView.ItemTemplate> {
<DataTemplate> ...
<ViewCell> var random = new Random
<ViewCell.ContextActions> (DateTime.Now.Millisecond);
<ToolbarItem Command="{Binding
DeleteCommand}" Text="Borrar" /> var lucky = random.Next(0,
</ViewCell.ContextActions> ViewModel.Players.Count);
<Grid> var selectedPlayer =
<StackLayout ViewModel.Players.ElementAtOrDefault(lucky);
Orientation="Horizontal"
HorizontalOptions="Start"> if (selectedPlayer != null)
<Image IsVisible=" {
{Binding Path=IsWinner}" selectedPlayer.IsWinner = true;
Source="Prize.png" ViewModel.Winner = selectedPlayer;
HeightRequest="25"
WidthRequest="25" /> PlayersSelector.ScrollTo(selectedPlayer,
ScrollToPosition.MakeVisible, true);
<Label Text="GANADOR!" }
IsVisible="{Binding }
Path=IsWinner}"
TextColor="Red" Trazer funcionalidades de desenho para as aplicaes
FontAttributes="Bold" Android
VerticalTextAlignment="Center"/>
Outra grande caracterstica de Xamarin para Android
<Label Text="{Binding
Path=PlayerName}" a capacidade de incorporar facilmente capacidades de
erticalTextAlignment="Center"/> desenho nos aplicativos do Android. Isto pode ser feito atra-
</StackLayout>
<Button HorizontalOptions="End" vs da adio da biblioteca Support Design Library dispon-
Command="{Binding vel em pacote de NuGet.
Path=DeleteCommand}"
Text="x" /> Recursos adicionais e links
</Grid>
</ViewCell> Introducing Xamarin 4
</DataTemplate>
</ListView.ItemTemplate> Adding Material Design to Xamarin Apps
</ListView>
Lucky Winner source code
O Binding atua como cola entre a View e os ViewMo-
dels para que permitir ter uma clara separao de tarefas entre
eles. Outras caractersticas comuns suportados pelo Xama-
Traduzido para a Revista PROGRAMAR por Antnio San-
rin.Forms com MVVM incluem Two-way binding, Command
tos, com permisso e acompanhamento do autor do artigo
Pattern and Value Converters.

Obter um Lucky winner com C # tal como se faria em


qualquer outro programa.

AUTOR
Escrito por Esteban Solano

Xamarin, Web & Full Stack Software Engineer, Founder of the Costa Rica Mobile .Net Developer Group www.meetup.com/es/
Xamarin-Costa-Rica-Mobile-NET-Developer-Group/

23
A PROGRAMAR

IPv6 para Programadores


TCP e UDP, etc.). Esta, por sua vez, delega em 5 RIRs
(Regional Internet Registries). O RIPE NCC responsvel
pela atribuio de endereos na Europa (incluindo toda a
Rssia) e Mdio Oriente. Esta a lista de endereos IPv4
actualmente disponveis:

O crescimento da Internet

A Internet como a conhecemos hoje teve as suas ori-


gens na ARPANET [1], a primeira rede a implementar o conjun-
to de protocolos IP (Internet Protocol) [2], do qual o mais co-
nhecido o TCP (Transmission Control Protocol) [3].

Pretendia-se um protocolo que transmitisse informao,


dividida em pacotes de tamanho reduzido, e cuja gesto de
rede fosse descentralizada, j que em tempo de Guerra Fria Nota: Um bloco "/8" corresponde a 224 ou 16777216 endere-
havia a possibilidade de destruio de partes da rede. os
Foi utilizada a verso 4 do protocolo IP (IPv4). Na altura Fonte: http://www.potaroo.net/tools/ipv4/plotend.png (2015-
estimava-se um nmero reduzido de mquinas ligadas rede, 12)
mas 40 anos depois a situao bem diferente:
Devido a uma poltica conservadora de atribuio de
Data Utilizadores ligados Internet endereos, assim como de recuperao de endereos no
1995-12 16 M utilizados, a disponibilidade do RIPE tem-se mantido estvel,
2000-12 361 M actualmente com cerca de 15 milhes de endereos IPv4
2005-12 1018 M disponveis. J a ARIN, o RIR da Amrica do Norte, esgotou
totalmente h alguns meses. Isto significa que os operadores
2010-09 1971 M
que pretendam ligar-se Internet nesse continente tero que
2015-12 (est.) 3353 M
comprar os blocos de endereos num mercado especial
Fonte: http://www.internetworldstats.com/emarketing.htm (com custos muito elevados).

No incio dos anos 1990s, e at hoje, d-se um cresci- IPv6, o sucessor do IPv4
mento continuado do nmero de pessoas ligadas Internet, Desde o final dos anos 1980s que este problema tem
que actualmente se situa perto de 50% da populao mundial. sido analisado. Vrias alternativas para substituio do IPv4
Adicionalmente, cada utilizador tem mais que um aparelho foram propostas:
(computador, telemvel, etc.). Mais recentemente (e apesar de Verso Nome Estado
o conceito no ser novo), surge a Internet of Things, cuja ideia IP (*)
0a3 Internet Protocol tests Experimental / Obso-
ligar todos os aparelhos do dia-a-dia Internet (televiso, leta
frigorfico, carro, elevador, relgio, roupa, animal de estimao, 4 Internet Protocol Version 4 (IPv4) Ainda em funciona-
mento
etc.).
5 Internet Stream Protocol Experimental
O protocolo IPv4 tem uma grave limitao de enderea- 6 Internet Protocol Version 6 (IPv6) Em funcionamento /
mento: s suporta 232 ou 4294967296 endereos (tericos) Actual
7 TP/IX Experimental / Obso-
mas devido a limitaes tcnicas, apenas se podem atribuir leta
pouco mais de 3000 milhes, ou seja, h actualmente menos 8 PIP Experimental / Obso-
leta
endereos pblicos disponveis que o nmero de utilizado- 9 TCP and UDP with Bigger Addresses Experimental / Obso-
res e mquinas/dispositivos. (TUBA) leta
10 a 15 Reservada Reservada
A IANA (Internet Assigned Numbers Authority) a enti-
dade responsvel pela atribuio de endereos IPv4 e IPv6, (*) Corresponde ao campo de Verso do cabealho dum
assim como outras numeraes (e.g. portas dos protocolos pacote IP, cuja dimenso 4 bits.

24

A PROGRAMAR
IPV6 PARA PROGRAMADORES
Aps vrios anos de debate e anlise, as instituies tante grandes, cada operador tem tipicamente
que geriam a Internet optaram pelo IPv6 como melhor alternati- um nico bloco;
va ao IPv4. Devido lenta adopo do IPv6, foi tambm criado
o protocolo NAT (Network Address Translation) [4] que permite
Sem NAT no existe necessidade de traduo
partilhar um nico endereo IPv4 pblico com vrios dispositi- de endereos pblicos/privados.
vos que usam endereamento privado (e.g. 10.0.0.0/8, O IPv4 ser descontinuado num futuro prximo, fican-
172.16.0.0/12, 192.168.0.0/16, entre outros). do apenas a funcionar o IPv6.
O IPv6 trouxe algumas melhorias. Estas so apenas algumas:

Endereamento maior: IPv6 para tts

Permite 2128 ou O protocolo IPv6 foi originalmente publicado no


340282366920938463374607432768211456 RFC1883 [7], e actualizado pelo RFC2460 [8], entre outros.
endereos, o suficiente para atribuir um endere- Aqui fica o resumo que qualquer profissional de informtica
o a cada tomo do universo: deve saber.

Efectivamente apenas 264 ou Consoante o tipo de ligao disponvel, h vrias al-


18446744073709551616 endereos so atribu- ternativas para acesso aos mundos IPv4 e IPv6:
dos publicamente, mas mesmo assim mais que Apenas IPv4 nativo:
suficientes;
possvel ligar a IPv6 utilizando Tneis [9]
Os outros 264 endereos (ou mais) so atribudos (6in4, 6to4/Teredo, 6RD, etc.).
por cliente, tambm suficientes para todas as
nossas necessidades em dispositivos IoT; IPv4 + IPv6 nativos (chamado Dual Stack)

NAT desnecessrio: todos os dispositivos tm Acesso directo sem tneis;


endereo IPv6 pblico.
Acesso IPv4 pode eventualmente utilizar NAT
Transmisso mais rpida: para partilhar um endereo pblico com vrios
dispositivos com endereos IPv4 privados.
No se d fragmentao de pacotes (i.e., neces-
sidade de dividir os pacotes se excederem a Apenas IPv6 nativo
MTU [5] de cada troo da rede por onde passa).
possvel ligar a IPv4 utilizando Tneis e ou-
A MTU tpica de cada pacote em redes Ethernet
tros mtodos (NAT64/DNS64, 464XLAT, DS-
de 1500 bytes, embora seja possvel usar Jum-
Lite, etc.)
bo Frames at 9000 bytes. O tamanho mximo
de cada pacote obtido quando se inicia uma Muito utilizado na sia onde no vivel facul-
ligao (usando Path MTU Discovery [6]), evitan- tar endereos IPv4 pblicos aos utilizadores;
do a fragmentao de pacotes e reduzindo assim
a latncia; A ttulo de curiosidade, a infraestrutura interna
do Facebook tem exclusivamente enderea-
A checksum dos pacotes de IPv4 incluam todos mento IPv6, s os frontends suportam IPv4.
os campos do cabealho, o que obrigava a recal-
cular em cada hop (n da rede). Em IPv6 a che-
cksum aplica-se apenas aos campos do cabea-
lho que no se alteram desde a origem at ao
destino, evitando a necessidade de recalcular,
reduzindo tambm a latncia;

Simplificao do hardware em consequncia da


no fragmentao e de no necessitar de recal-
cular a checksum.

Routing mais eficiente:

O Routing em IPv4 implicava gerir uma lista


significativa de blocos por cada AS (Autonomous Formato dos endereos IPv6:
System, ou seja, as atribuies de cada opera-
128 bits;
dor). J em IPv6, como as atribuies so bas-

25
A PROGRAMAR
IPV6 PARA PROGRAMADORES
32 dgitos hexadecimais (0-9, A-F), case insensitive; semelhana de IPv4, existem alguns endereos
especiais em IPv6. Por exemplo, o "::1" equivalente ao
8 grupos de 4 dgitos hexadecimais usando ":" como "127.0.0.1" ou "LOCALHOST":
separador;

Em cada grupo, os "0" esquerda podem ser omitidos;

"::" significa que todos os dgitos num ou mais grupos


seguidos so "0". S pode ser utilizado uma vez;

"/" define o scope da subnet - usa dgitos em decimal (0


a 128);

"%" define a interface fsica por onde passa a comunica-


o; Em IPv4, para um dispositivo obter um endereo,
utiliza DHCP (ou alternativamente configura o endereo IPv4
Os endereos podem ser envolvidos em parntesis rec-
manualmente). Em IPv6 h vrias formas de obter endere-
tos se necessrio, em particular quando se usam nme-
os, a maioria sem necessidade de haver um servidor que
ros das portas.
fornea endereos (Neighbour Discovery Protocol, DHCPv6,
O mesmo endereo IPv6 pode ser escrito de vrias for- manualmente, etc.). O mtodo mais usado o de detectar
mas. Aqui fica um exemplo (os espaos esto presentes ape- pelos vizinhos qual o endereo pblico da rede (primeiros 64
nas para facilitar a leitura e no devem ser utilizados): bits), e utilizando o MAC Address do dispositivo para preen-
cher os ltimos 64 bits:
DNS: FCCN.PT (registo AAAA)

Endereo:
2001:0690:0A00:1036:1113:0000:0000:0247/12
8

Reduzido: 2001: 690: A00:1036:1113: 0: 0:


247/128

Cannico: 2001: 690: A00:1036:1113:: 247


Isto pode, no entanto, ser considerado uma falta de
Alocao da rede: 2001: 690::/29 segurana, j que pelo MAC Address possvel obter a mar-
Com um interface: 2001: 690:A00:1036:1113::247% ca/modelo do dispositivo. No limite, seria possvel detectar
que o mesmo dispositivo esteve presente em redes diferen-
21
tes em locais diferentes (e assim gerar um perfil da utilizao
Com uma porta: online da pessoa). Por esse motivo, foram criadas as
[2001:690:A00:1036:1113::247]:80 (HTTP) "Privacy Extensions for Stateless Address Autoconfiguration
in IPv6" [10], que em vez do MAC Address utilizam dgitos
Tambm o PTR (pointer record - usado para reverse
aleatrios, que substituem regularmente (e.g. a cada hora)
DNS, ou seja, para obter o endereo DNS a partir do endereo
para aumentar a privacidade.
de IP) muda em IPv6:
Tipicamente, cada interface de rede tem vrios ende-
PTR:
reos IPv6: o endereo Link-Local (baseado no MAC
7.4.2.0.0.0.0.0.0.0.0.0.3.1.1.1.6.3.0.1.0.0.a.0.0.9. Address), o endereo de auto-configurao (tambm basea-
6.0.1.0.0.2.ip6.arpa. IN PTR FCCN.PT. do no MAC Address), o endereo varivel com base nas
Em IPv4 os operadores entregam normalmente um en- Privacy Extensions, entre outros. Como habitual, os endere-
dereo pblico nas casas/empresas, mas com IPv6 entregue os podem ser consultados usando:
uma rede inteira. O mnimo um "/64", mas alguns operadores
entregam uma gama maior, como "/60" ou "/56". Os clientes
podem assim gerir as suas subnets como entenderem:

26

A PROGRAMAR
IPV6 PARA PROGRAMADORES
Alm dos endereos IPv6, toda a infraestrutura de no- Afinal o que necessrio para armazenar endereos numa
mes DNS funciona com IPv6 com pequenas alteraes: base de dados (relacional ou outra) ?

IPv4: Um endereo guardado usando um registo do Um endereo IPv4 necessita de 15 caracteres de


tipo "A"; armazenamento;

IPv6: Um endereo guardado usando um registo do Um endereo IPv6 necessita de 39 (endereo) + 4


tipo "AAAA" (l-se "quad-A"); (subnet) + N (interface). Ou seja, pelo menos 48 ca-
racteres so recomendados;
Os registos do tipo "CNAME" ou "MX" continuam a fun-
cionar em ambos, j que apenas apontam textualmente O mesmo campo pode ser usado para armazenar
para outros registos do tipo "A" ou "AAAA"; IPv4 e IPv6 (e.g. distinguir detectando se existe ":", o
que implica ser IPv6, ou colocando um prefixo que
Os registos de SPF (tipo "TXT") suportam IPv6 usando
diga qual a verso, etc.);
o prefixo "ip6:";
No recomendado armazenar em formato binrio
Os registos de reverse DNS (tipo "PTR") baseiam-se
ou numrico;
em "IP6.ARPA".
Podem ser armazenados em formato cannico
Ao fazer um pedido pelo nome, um dispositivo dual-
(reduzido) ou expandido (incluindo todos os zeros,
stack tipicamente tentar resolver o endereo para IPv6 primei-
com ou sem os ":");
ro, pedindo o registo "AAAA", e apenas se no existir tentar
pedir o registo "A". Tentar ligar-se primeiro ao endereo IPv6. necessrio escolher se so armazenados em mai-
Se falhar (timeout, etc.), tentar ao fim de alguns segundos o sculas ou minsculas, sendo tambm recomendado
endereo IPv4. Caso haja uma demora significativa a estabele- que a collation do respectivo campo seja case-
cer a ligao, pode ser sinal de haver um problema com a liga- insensitive;
o IPv6 que teve failover para IPv4.
No recomendado armazenar apenas os primeiros
Em IPv4 existe o TCP e o UDP, ambos com 65535 por- 64 bits do cliente, j que mltiplos clientes podem
tas (de 1 a 65535) que esto atribudas a servios. Um exem- estar a partilhar a mesma ligao, tendo apenas os
plo a porta 80 utilizada pelo protocolo HTTP. Em IPv6 existe ltimos 64 bits como diferena.
o TCPv6 e o UDPv6, em tudo semelhantes (excepto nos ende-
reos), e cujas portas mantm a mesma numerao e funcio- Na gesto e/ou validao de acessos, habitual ga-
nalidade. Convm apenas salientar que, para evitar ambiguida- rantir que pedidos sucessivos do mesmo utilizador originam
des, necessrio envolver os endereos com parntesis rectos do mesmo endereo de IP. Algumas implementaes acei-
quando se indica o nmero da portas. tam que o IPv4 mude, desde que na mesma subnet (aceitar
qualquer nmero na ltima parte do endereo, ou seja, o
IPv4: 123.123.123.123:80 (HTTP) endereo IPv4 pertencer mesma "/24"). J em IPv6 as coi-
sas so bem diferentes: com as "Privacy Extensions" o ende-
IPv6: [456:789::ABCD]:80 (HTTP)
reo IPv6 dum utilizador muda regularmente (pelo menos os
Existe muito mais informao online sobre IPv6. Reco- ltimos 64 bits). Assim, a recomendao validar usando
menda-se a leitura da pgina da Wikipdia de IPv6 [11], cujo apenas os primeiros 64 bits do endereo (parte da rede),
contedo bastante acessvel. ignorando alteraes aos ltimos 64 bits (parte interna do
cliente). Em alguns casos, pode detectar-se que o cliente
tem atribuda uma rede maior (e.g. "/60") e ser necessrio
Recomendaes para programadores expandir a tolerncia s respectivas subnets. Em qualquer
caso, deve sempre haver um token identificador do cliente
A maioria dos servidores web (IIS, Apache, NGINX,
(e.g. cookie), porque tanto em IPv4 como IPv6 possvel
etc.) suporta IPv6 de forma transparente. Aqui necessrio
encontrar dois clientes que partilham o mesmo endereo.
apenas garantir que esto listening em IPv6 e que eventuais
configuraes (e.g. listas de acessos por IPv6, etc.) esto devi- Este exemplo mostra o endereo e a verso de IP do
damente preenchidas e testadas. cliente numa pgina web (nota: foi utilizado PHP mas nou-
tras linguagens o cdigo ser semelhante):
Tirando as situaes listadas de seguida, um programa-
dor web pode estar descansado que tudo funcionar em IPv6 <?php
da mesma forma que em IPv4. $Andy_IPAddress = StrToUpper(Trim($_SERVER
["REMOTE_ADDR"]));
A maioria dos CMS/CRM/ERP pode registar os endere-
If (PReg_Match("/\d+\.\d+\.\d+/",
os IPv4 que acederam ao respectivo site, mas s recentemen- $Andy_IPAddress) )
te estes comearam a ser compatveis com endereos IPv6. {

27
A PROGRAMAR
IPV6 PARA PROGRAMADORES
$Andy_IPVersion = "IPv4";
} $Andy_Exists_A = DNS_Get_Record,( $Andy_DNS_NAME
Else If (PReg_Match("/[0-9A-F]+\:[0-9A-f\:\.]+/ DNS_A);
i", $Andy_IPAddress) ) $Andy_Exists_AAAA = DNS_Get_Record
{ ( $Andy_DNS_NAME DNS_AAAA);
$Andy_IPVersion = "IPv6";
} Print_R ($Andy_DNS_Get_A);
Else Print_R ($Andy_DNS_Get_AAAA);
{ ?>
$Andy_IPVersion = "?";
} O resultado neste caso :
Print ("\tYour IP Address is: <STRONG>" .
$Andy_IPAddress . "</STRONG><BR>\n"); Array
Print ("\tYour IP Version is: <STRONG>" . {
$Andy_IPVersion . "</STRONG><BR>\n"); [0] => Array
?> {
[host] => FCCN.PT
E se tentarmos programar uma ligao a uma mquina [class] => IN
[ttl] => 3600
remota, quais as recomendaes? [type] => A
[ip] => 193.137.196.247
Sempre que possvel usar endereos DNS e nunca en- }
dereos IPv4 ou IPv6. Isto garante que o sistema opera- }
tivo decidir qual a melhor forma de efectuar a ligao;
Array
Nos casos em que queremos reduzir o tempo despendi- {
do com a consulta DNS (e.g. ligao dum servidor web [0] => Array
{
a uma base de dados), pode ser realmente ser neces- [host] => FCCN.PT
srio colocar o endereo. O recomendado colocar o [class] => IN
endereo IPv6, j que a latncia normalmente menor; [ttl] => 3600
[type] => AAAA
[ipv6] => 2001:690:a00:1036:1113::247
Em algumas situaes raras, pode ser til incluir a inter- }
face no endereo, para evitar que o sistema operativo }
demore a escolher por qual deve fazer a ligao. No
entanto, uma mudana de hardware poder implicar Anexos
alteraes s configuraes, pelo que no recomen-
dado.
Diagrama do routing mundial entre os principais AS
Se uma aplicao ou pgina web necessitar realmente (Autonomous Systems) da Internet (em IPv4 e IPv6):
de obter um endereo IPv4 ou IPv6 (registos "A" ou "AAAA") a
partir dum endereo DNS, pode usar funes de consulta DNS.
Todas as linguagens mais utilizadas j suportam IPv6 (nota:
estas funes variam muito de linguagem para linguagem).
Para detectar se existe um determinado registo DNS:

<?php
$Andy_DNS_NAME = "ANDY.PT"; //Don't forget the
"." in the end!

$Andy_Exists_A = (CheckDNSrr($Andy_DNS_NAME,
"A" ) ? "Yes" : "No");
$Andy_Exists_AAAA = (CheckDNSrr($Andy_DNS_NAME,
"AAA") ? "Yes" : "No");

Print ("\t" . $Andy_DNS_NAME . " A record


exists? <STRONG>" . $Andy_Exists_A .
"</STRONG><BR/>\n");
Print ("\t" . $Andy_DNS_NAME - " AAAA Record
exists? <STRONG>" . $Andy_Exists_AAAA .
"</STRONG><BR/>\n");
?>

Obter um registo "AAAA" no muito diferente de obter


um registo "A":

<?php Fonte: https://www.caida.org/research/topology/


$Andy_DNS_NAME = "ANDY.PT"; //Don't forget the
"." in the end! as_core_network/2015/ (2015-01)

28

A PROGRAMAR
IPV6 PARA PROGRAMADORES
Referncias e links FCCN/FCT: http://FCCN.PT/en/academic-network/
Referncias presentes no texto: ipv6

[1] https://en.wikipedia.org/wiki/Internet Associao DNS.PT: http://DNS.PT

[2] https://en.wikipedia.org/wiki/Internet_Protocol_Suite Comunidade IPv6 Portugal: http://Facebook.COM/


groups/IPv6.PT
[3] https://en.wikipedia.org/wiki/
Transmission_Control_Protocol Comunidade IoT Portugal: http://Facebook.COM/
groups/IoTPortugal
[4] https://en.wikipedia.org/wiki/
Dinamizadores internacionais:
Network_address_translation
Internet Society: http://ISOC.ORG
[5] https://en.wikipedia.org/wiki/
Maximum_transmission_unit RIPE NCC:

[6] https://en.wikipedia.org/wiki/Path_MTU_Discovery https://www.ripe.net/publications/ipv6-info-


centre
[7] https://tools.ietf.org/html/rfc1883 (IPv6, RFC inicial)
https://www.ripe.net/support/training/courses/
[8] https://tools.ietf.org/html/rfc2460 (IPv6, RFC actual)
ipv6
[9] https://en.wikipedia.org/wiki/
https://www.ripe.net/support/training/courses/
IPv6_transition_mechanism
advanced-ipv6
[10] https://tools.ietf.org/html/rfc4941 ("Privacy Exten-
http://6deploy.eu
sions for Stateless Address Autoconfiguration in IPv6")
Grupo IPv6 Global no Facebook: http://
[11] https://en.wikipedia.org/wiki/IPv6
Facebook.COM/groups/2234775539

Dinamizadores em Portugal:

Internet Society (Portugal Chapter): http://ISOC.PT

AUTOR
Escrito por Andr Melancia

Programador/DBA/Formador independente, Voluntrio, orador e/ou participante regular nas comunidades IoT Portugal, IPv6
Portugal, DNSSec Portugal, ISOC.PT, SQLPort, NetPonto, Office365PT, SharePointPT, PTXug, PHPLx, etc.

Mais informaes e contactos em http://Andy.PT

29
ELECTRNICA
Aquisio de dados via TCP/IP com Genuino (Arduino)
Electrnica

AQUISIO DE DADOS VIA TCP/IP COM GENUINO (ARDUINO)


Posto o problema, claramente definidos os objectivos,
Introduo
como seria de esperar, existe uma pesquisa sobre que sen-
Recentemente a to conhecida marca Arduino , funda- sores usar paca cada uma das funes e como o por a co-
da por Massimo Banzi, David Cuartielles, Tom Igoe e David municar com a rede.
Mellis e toda uma comunidade, sofreu uma mudana de nome,
O hardware
para os produtos destinados a outros mercados fora dos EUA,
passando a usar o nome Arduino apenas nos EUA e o nome Neste projecto concreto, os sensores usados foram
Genuino, em todos os restantes mercados. Falo em marca, um sensor DHT-11, conjuntamente com a respectiva resis-
pois no se refere apenas a uma board, mas a toda uma tncia pull-up de 4.7k, na linha de dados, ligado ao Genuino.
marca de circuitos baseados em microcontroladores e projec- Este sensor oferece a capacidade de ler a temperatura do ar
tos com base numa mesma filosofia de open-hardware. No e a humidade relativa, amplamente suportado pela comuni-
me alongando mais sobre o tema, esta mudana teve origem dade e existe uma excelente biblioteca de suporte para o
numa questo legal, que muito bem apresentada por Maximo mesmo, a lib dht11.h disponvel no github no repositrio da
Banzi, no keynote que apresentou na Maker Fair e pode ser Adafruit.
visto no youtube. Assim sendo, de agora avante, neste artigo,
Para obter a informao da luminosidade, existiam
o circuito anteriormente conhecido por Arduino, ser designado
duas possibilidades, logo primeira vista. Uma seria usar um
por Genuino.
foto-resistor, a outra usar um circuito mais complexo como o
Passemos agora quilo que realmente interessante: TSL2561 da Sparkfun, que comunica por I2C com o micro-
comunicar com o Genuino, receber dados e transmitir dados! controlador e oferece uma srie de funcionalidades interes-
Recentemente estive a trabalhar num projecto, que comeou santes que um fotoresistor no disponibiliza, nomeadamente
como trabalho e acabou dando origem a um fork para um hob- a capacidade de ler tanto a luminosidade visvel como a lu-
bie, onde quis receber dados, de um amplo conjunto de senso- minosidade infra-vermelha, aproximando os valores lidos,
res, ligados ao microcontrolador e transmiti-los de seguida, daqueles que o olho humano percepciona. Tal como o sen-
usando a ligao de rede existente para essa transmisso, sor DHT-11, o TSL2561 tem um amplo suporte de toda a
usando a pilha TCP/IP v4, para transmitir dados bidireccional- comunidade e bibliotecas que facilitam a sua utilizao.
mente, entre o microcontrolador e um dispositivo ligado rede.
Neste caso concreto foi utilizada uma ligao por cabo, apesar
de ser relativamente simples fazer o mesmo com um circuito
ethernet, por exemplo um ESP8266-01, ou qualquer outro que
suporte a norma 802.11b, quer comunique com o Genuino por
UART, quer comunique usando um outro protocolo.

O problema

Neste caso concreto, pretendia obter a informao so- TSL2561 DHT-11


bre a humidade relativa do ar, a temperatura e a luminosidade
num determinado espao e de seguida transmitir essa mesma
informao via rede. Escolhidos os sensores e a placa Genuino, no caso
um Genuino Uno, restou a escolha do circuito ethernet a
utilizar, neste caso ethernet shield w5100, com leitor de car-
tes micro-sd e stacking headers, para ficar acoplado mes-
Um problema mo por cima do Genuino.

claramente apresenta-
do, est meio resolvi-
do. (Charles F. Kette-
ring)

32
Electrnica
AQUISIO DE DADOS VIA TCP/IP COM GENUINO (ARDUINO)
Ligaes Programao do Genuino
Escolhido o hardware, necessrio proceder s liga- Chegados a esta parte, est na hora de programar o
es antes de passarmos escrita do cdigo destinado a ser Genuino de forma a comunicar por rede ethernet, usando o
executado pelo microcontrolador ATMega328. Para este efeito conjunto de protocolos TCP/IP. Felizmente uma parte subs-
e uma vez que no se trata de um circuito definitivo, mas ape- tancial do trabalho, j vem pr feito pela biblioteca ether-
nas um circuito de teste, as protoboards, como se pode ver na net.h, que nos disponibiliza uma maior abstraco do hard-
imagem abaixo, so bastante uteis e facilitam as ligaes. ware propriamente dito, deixando-nos livres para a progra-
mao da aplicao que ser executada. No entanto conti-
nua a ser necessrio executar algumas tarefas como a defi-
nio de um mac address, a colocao em modo cliente
DHCP, caso tenhamos um servidor DHCP na rede, ou a
definio de um endereo ip v4, bem como a respectiva
mscara de sub-rede e gateway. Desta biblioteca iremos
usar maioritariamente o mtodo write, da classe server, para
enviarmos dados para o nosso cliente TCP, bem como o
mtodo read, para lermos instrues transmitidas pelo servi-
dor.

O cdigo no complexo e quase auto-explicativo,


no me alongando na sua explicao. De forma muito resu-
mida, inicia a interface ethernet, fica a aguardar por uma
conexo e quando a mesma est aberta, aguarda um co-
mando, que executa e devolve o seu resultado, em texto
simples. Recomendo a leitura da documentao oficial da
biblioteca, para quem pretenda aprofundar os conceitos e
conhecimentos.

//thanks to the sparkfun team, for the li


A fim de facilitar as ligaes do circuito, na tabela abai- //braries, all credits for their work due to
xo encontram-se os sensores, indicando o nmero de cada //them.
#include "DHT.h"
pino e o pino a que ligado no circuito ethernet do Genuino. #include <SparkFunTSL2561.h>
#include <Wire.h>
DHT11 Genuino #include <SPI.h>
#include <Ethernet.h>
Pino do sensor Componente Pino do Genuino #define DHTPIN1 2 // define o pino de dados
//do sensor, neste caso 2
1 5vdc #define DHTTYPE DHT11 // DHT 11 (basta uma
//constante para dois sensores)
SFE_TSL2561 light;
2 Resistncia 4.7k D2 boolean gain; //definio do ganho, 0 = X1,
//1 = X16;
unsigned int ms;
3 byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE,
0xED };
4 Gnd IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 255, 0);
TSL2561 Genuino
DHT dht1(DHTPIN1, DHTTYPE);
1-SDA A4
EthernetServer server(77);
boolean alreadyConnected = false;
2-SCL A5
String commandString;
3-GND GND
void setup() {
dht1.begin();
4-3v3 3v3 light.begin();
unsigned char ID;
5-INIT if (light.getID(ID))
{}
As clulas em branco foram deixadas propositadamente uma else
{ byte error = light.getError(); }
vez que nos respectivos locais, no feita nenhuma ligao, gain = 0;
quer seja a um componente intermdio, quer seja ao Genuino. unsigned char time = 2;

33
Electrnica
AQUISIO DE DADOS VIA TCP/IP COM GENUINO (ARDUINO)
light.setTiming(gain,time,ms); }
light.setPowerUp(); commandString = "";
pinMode(ledPin, OUTPUT); return;
Ethernet.begin(mac, ip, gateway, subnet); }
server.begin(); commandString = "";
Serial.begin(9600); instructions();
while (!Serial) {;} }
Serial.print("Socket Server:"); void instructions()
Serial.println(Ethernet.localIP()); server.println("Comando no reconhecido");
} server.println("Use um dos seguintes
comantos:");
void loop() { server.println("* dht1, para obter a humidade e
EthernetClient client = server.available(); temperatura do ar");
if (client) { server.println("* light, para obter a informao
if (!alreadyConnected) { da luminosidade");
client.flush(); }
commandString = ""; //to my late night owl angel, thanks for the wisdom
server.println("--> insira um dos comandos //inspiration and company,
disponiveis!"); //Stephan|B|
alreadyConnected = true;
} Concluso
while (client.available()) {
char newChar = client.read(); Uma vez feito o upload do cdigo, para o Genuino,
if (newChar == 0x0D)
{ processCommand(commandString);} basta ligar um cabo de rede e um cliente simples ou usar a
else { commandString += newChar; } nossa prpria aplicao para comunicar por sockets com o
} Genuino, enviando a instruo que pretendemos e receben-
}
} do o resultado da mesma. Neste exemplo usei o putty, para
simplificar, apenas defini a porta como 77, pois era uma das
void processCommand(String command) portas disponveis. O objectivo ao usar sockets neste exem-
{
//dht11-1 plo, prendeu-se com a simplicidade com que se comunica
if (command.indexOf("dht1") > -1) com o dispositivo, bem como com o leque de possibilidades
{ que deixa em aberto para o desenvolvimento de aplicaes
delay(1000);
float h1 = dht1.readHumidity(); que interajam com o circuito, como o caso de aplicaes
float t1 = dht1.readTemperature(); mobile, feitas por exemplo com C# e Xamarin, usando o
if (isnan(h1) || isnan(t1))
{ return; } componente sockets-for-pcl, que bastante simples de
server.print("Humidade "); usar e bastante intuitivo.
server.print(String (h1));
server.print("; Temperatura ");
server.println(String (t1));
commandString = "";
return;
}
//light
Se procuras re-
if (command.indexOf("light") > -1)
{
delay(200);
sultados distintos, no
unsigned int data0, data1;
if (light.getData(data0,data1))
{
faas sempre o mes-
double lux;
boolean good;
//calculo de Lux
mo! (Albert Einstein)
good = light.getLux
(gain,ms,data0,data1,lux);
server.print("luminosidade em lux ");
server.println(lux);

AUTOR
Escrito por Antnio C. Santos

Com uma enorme paixo por tecnologia, autodidacta desde tenra idade, cresceu com o ZX Spectrum.
Tem vasta experincia em implementao e integrao de sistemas ERP, CRM, ERM, BI e desenvolvi-
mento de software por medida nas mais diversas linguagens. Diplomado do Curso de Especializao
Tecnolgica em Tecnologias e Programao de Sistemas de Informao pela ESTG-IPVC. 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 no curso de Licenciatura em Engenharia Informtica
e Xamarin Student Partner nesta mesma escola Twitter:@apocsantos

34
COLUNAS
Kernel Panic - Cross-Platform - A soma de todas as mudanas
Kernel Panic

Cross-Platform - A soma de todas as mudanas


Cada vez mais ouvimos falar em cross-platform! No de a esta linguagem e ao movimento cross-platform, que
algo novo, algo j antigo em verdade se diga! Se nos referir- no sendo um movimento formal, era uma ideia, um concei-
mos ao cross-platform como a capacidade de compilar e correr to, um objectivo, uma filosofia, que se mantinha viva, ainda
o mesmo cdigo em mltiplas plataformas de hardware pode- que discretamente.
remos recuar tanto quanto a criao da linguagem C, por Den-
No entanto, esta linguagem veio perder algum mpe-
nis Ritchie e Ken Thompson em 1972, quando trabalhavam
to no caminho do cross-platform em 1997, aquando de uma
nos Bell Labs. De forma brilhante, estes senhores decidiram
disputa legal entre a Sun Microsystems e a Microsoft Corpo-
escrever uma linguagem que permitisse compilar o cdigo e
ration, em que a Sun Microsystems, detentora da linguagem,
execut-lo independentemente do hardware. Inicialmente era
reclamava que a implementao da Microsoft no suportava
um DEC PDP-7, posteriormente um DEC PDP-11, tendo a
RMI ou JNI e continha cdigo platform-specific, (especfico
linguagem sido utilizada para escrever maior parte do kernel do
a plataformas) contendo funcionalidades das quais a Micro-
sistema operativo Unix.
soft era proprietria. Esta disputa levou a um acordo em
J nessa altura se falava e pensava em cross-platform, 2001 e ao facto do sistema operativo Windows deixar de
a um nvel mais de hardware do que de sistema operativo, trazer as ferramentas de execuo de aplicaes feitas em
tendo como objectivo a reduo do tempo consumido na porta- Java no seu pacote package. Este poder ser considerado
bilidade do cdigo para novas plataformas de hardware e / ou um dos revezes do cross-platform, uma vez que com esta
software. tomada de posio, o Java, apesar de continuar a correr nas
plataformas Microsoft, deixou de vir pr-instalado, o que leva
Durante anos, pouco se falou sobre este conceito. Esta
a mais tarefas por parte do utilizador e como tal, menos ade-
mudana foi principalmente da forma de pensar, havendo cla-
so a esta linguagem e toda a filosofia subjacente.
ramente quem pensasse e defendesse de forma convicta que
o cdigo escrito para uma plataforma no deveria correr noutra Mas os tempos mudam, os ventos mudam, tudo mu-
plataforma diferente, quer fosse hardware ou software (sistema da, a indstria avana, a tecnologia melhora e o que outrora
operativo), diferente. De um lado os PC-Compatveis com soft- era fico cientfica, passa a ser uma realidade. Por exemplo
ware escrito para arquitectura x86. De outro os computadores os smartphones! Certamente alguns se recordam do
a Apple que corriam software escrito para uma arquitectura de Communicator da srie Star Trek. Um dispositivo que per-
hardware diferente baseada em processadores da Motorola, mitia comunicar de forma idntica ao que agora conhecemos
desde o 68000 at aos PowerPC, vrias geraes de proces- como telemvel e at smartphone, mas que data da
sadores e sistemas operativos que no corriam em PC- transmisso televisiva da srie, no era mais do que fico
Compatveis, formando ecossistemas fechados e isolados. cientfica. Ora bem, o advento dos dispositivos mveis, da
Corria o pensamento no propriamente coincidente com o computao mvel, dos chamados smart devices, trouxe
cross-platform, onde o cdigo escrito para uma plataforma, mais plataformas de hardware e sistemas operativos para
apenas correria naquela plataforma e caso tivesse de ser por- aquilo que j era um mundo pouco cross-platform com pou-
tado, seria reescrito na ntegra, consumindo tempo e recursos, cas plataformas! A grande variedade de sistemas operativos
nem sempre disponveis, limitando tanto os utilizadores, como e arquitecturas de hardware destes dispositivos, cada um
os criadores de software. com os seus SDKs, linguagens e APIs, dificultava ainda
mais o conceito do cross-platform do write once, run
Apesar de ter comeado a soprar o vento da mudana
anywhere, o conceito de Ritchie e Thompson, de 1972: es-
do cross-platform em 1972, o platform-specific, manteve a
crever o cdigo uma vez, compilar e correr em qualquer pla-
supremacia desde ento, tendo soprado de novo com mais
taforma. No entanto esta ideia, este movimento, no tinha
alguma fora em meados de 1995. A esta altura a Sun Mi-
falecido. Apenas tinha encontrado os seus revezes, ga-
crosystems disponibilizou a primeira implementao da lingua-
nhando flego e balano, fazendo avanos retaguarda e
gem de programao Java, o Java 1.0, sob o lema Write On-
avanos em frente, conforme o mundo evolua.
ce, Run Anywhere (WORA), traduzido Escreve uma vez, cor-
re em qualquer parte. Poderia citar aqui, uma srie de ferramentas e players
do desenvolvimento cross-platform, mas como se trata de
Sem custos de execuo, permitia correr o cdigo nas platafor-
um artigo de opinio e no de algo publicitrio, nem de uma
mas mais populares da altura. Relativamente segura (ao que
resenha histrica, damos um salto, para uns anos mais h
era conhecido data de publicao da linguagem), permitia
frente e para umas quantas tecnologias depois, deixando
entre outras funcionalidades restries de acesso a redes e a
apenas aqui a meno a um projecto que me cativou a aten-
ficheiros. Na poca uma esmagadora maioria dos navegadores
o desde o seu inicio: o Mono. Um projecto singular, de
web, incorporaram a capacidade de executar applets java den-
cdigo aberto, software livre, que pretendeu criar uma imple-
tro de paginas web, dando assim uma ainda maior popularida-
mentao livre e cross-platform da linguagem C# e da fra-

36
Kernel Panic
CROSS-PLATFORM - A SOMA DE TODAS AS MUDANAS
mework .NET da Microsoft, para que corresse em todas as j permitem execuo de aplicaes cross-platfrom, sendo
plataformas de hardware e software, desde computadores que todos os sistemas operativos acima referidos, promovem
x86 / IA64 com sistema operativo Windows, at outros disposi- uma cada vez maior abstraco entre o programador de
tivos e sistemas operativos como GNU/Linux, BSD Mac OS X aplicaes e o hardware em que estas aplicaes so exe-
da Apple, Solaris e at nas consolas de jogos como o caso da cutadas a um nvel substancialmente mais baixo.
PlayStation 3, Nintendo Wii e Xbox 360. Apesar de controverso
As mudanas, decorridas ao longo de dcadas de
dentro da prpria comunidade open-source, conseguiu avan-
avanos e recuos, de pontos altos e pontos baixos, de ideias
ar, manter-se, existir e dar origem ao que agora muitos pode-
contraditrias e personalidades divergentes, foram todas
ro conhecer como Xamarin, fornecendo ferramentas de de-
elas contribuindo e somando para que o desenvolvimento
senvolvimento cross-platform para dispositivos mveis, que
cross-platform fosse uma realidade! O desenvolvimento em
executem os sistemas operativos Windows Phone, Android e
que o programador, o criador de software, no tem de se
iOS.
preocupar com o hardware onde o seu programa vai ser
Este foi um projecto que cativou a minha ateno desde o seu executado, to pouco com o sistema operativo onde este
incio, por permitir desenvolver para diversas plataformas e ser ser executado, de longe a maior vantagem desta nova
um projecto de cdigo aberto, livre, deixando a liberdade criati- realidade. Basta escolher uma boa ferramenta de desenvol-
va para os programadores fazerem o que fazem bem: Criar vimento cross-platform, e tudo ser resolvido! No haver
novos mundos, melhores mundos, no cdigo que escrevem! necessidade de recompilar e reescrever cdigo, para correr
Esta ideia, esta filosofia, cativou-me pelo que recomendo o na plataforma A ou B, ou ter de fazer opes entre que plata-
leitor a explorar o projecto Mono e a filosofia do desenvolvi- formas suportar e no suportar, limitando tanto o programa-
mento cross-platform, como ela se encontra descrita em diver- dor, como o utilizador que por querer usar uma determinada
sos artigos, sendo a parte mobile bem focada no artigo de aplicao teria de adquirir hardware e sistema operativo que
Stephen Fluin, no artigo de Henning Heitktte, entre outros. a executasse em concreto.

A evoluo da tecnologia, das ideias e do pensamen-


to, levou a este somatrio de acontecimentos que nos trouxe
at aqui e provvel que num futuro prximo, nos leve bas-
tante mais alm, a um nvel ainda mais simples desenvolvi-
mento cross-platform, onde todas as aplicaes sero
universais, executadas em todo o lado, sem uma depen-
dncia quase cega de um sistema operativo nem uma arqui-
tectura de hardware. Tal como em 1972, em que dois caris-
mticos e brilhantes cientistas idealizaram e escreveram
toda uma linguagem que permitia esse desenvolvimento e
que de seguida os levou reescrita de todo um sistema ope-
rativo, nessa mesma linguagem, para que fossemos liberta-
No sendo o objectivo deste artigo falar de ferramentas dos assim da dependncia de um determinado hardware
e dando o salto em frente, neste momento vivemos numa altu- para executarem o seu software.
ra em que o desenvolvimento cross-platform parece estar num
At l, programemos e faamos do mundo um lugar
ritmo de acelerao quase vertiginoso, em que cada vez apare-
melhor, mais especial, escrevendo cdigo!
cem mais dispositivos e plataformas de hardware, mas todas
elas j suportando os sistemas operativos existentes e de Referncias:
main stream, como o caso do GNU/Linux, UNIX, Windows,
Android.A Poucos so os fabricantes que ainda mantm os
Evaluating Cross-Platform Development Approaches for
seus sistemas operativos a correr apenas no hardware por si Cross-Platform Development in C++ (Syd Logan)
produzido, como o caso do iOS e do Mac OS. Estes sistemas

AUTOR
Escrito por Antnio C. Santos

Com uma enorme paixo por tecnologia, autodidacta desde tenra idade, cresceu com o ZX Spectrum.
Tem vasta experincia em implementao e integrao de sistemas ERP, CRM, ERM, BI e desenvolvi-
mento de software por medida nas mais diversas linguagens. Diplomado do Curso de Especializao
Tecnolgica em Tecnologias e Programao de Sistemas de Informao pela ESTG-IPVC. 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 no curso de Licenciatura em Engenharia Informtica
e Xamarin Student Partner nesta mesma escola Twitter:@apocsantos

37
Media Partners da Revista PROGRAMAR

Anlises
MySQL
Programao em Python: Fundamentos e Resoluo de Problemas

Review

MySQL
Ttulo: MySQL Operaes com tabelas
Autores: Frederico Tavares Stored procedures e funes
Editora: FCA - Editora de Informtica
Cursors, triggers e erros
Pginas: 248
Utilizadores e acessos
ISBN: 978-972-722-803-4
Gesto do servidor

Cpias de segurana

Aps a leitura desta obra o leitor sentir-se- apto ao


Tive o prazer de receber e ler o livro MySQL de Fre-
pensamento crtico sobre o tema e ter ganho as competn-
derico Tavares, Licenciado em Fsica pela Universidade de
cias fundamentais delineao e criao da estrutura da
Coimbra e Mestre em Informtica ramo de Sistemas Distri-
base de dados MySQL.
budos, Comunicaes por Computador e Arquitectura de
Computadores pela Universidade do Minho. Sentir-se- igualmente capaz de reproduzir os seus
conhecimentos noutros SGBD.
O SGBD MySQL afirma-se cada vez mais como o
principal sistema de base de dados no que toca, pelo menos, Os primeiros quatro captulos so destinados a leito-
ao mundo web. Confirmao disso a utilizao que os res cujo nvel de conhecimento se assemelha ao bsico ou
monstros empresariais lhe do, como por exemplo o Face- nulo. O escritor tem o cuidado de abordar estes temas sobre
book, LinkedIn, Twitter, Cisco, Ebay ou Amazon. 98 pginas, o que reflecte o cuidado e relevncia que estes
captulos tm, forando assim o leitor a adquirir boas prti-
Frederico Tavares ensina-nos, de forma disciplinada
cas.
e elegante, ao longo das 248 pginas, o que , para que
serve e como aplicar ao mundo real o propsito de ter uma Os restantes captulos dirigem-se ao pblico que pro-
base de dados. O livro aplica-se a todas as faixas etrias cura maximizar tempo, esforo e desempenho das suas ba-
bem como a profissionais das tecnologias de informao e ses de dados e que j tm uma noo avanada de como
pblico em geral com interesse no ramo. trabalhar com o MySQL.

Sublinho a estrutura e organizao do livro. Captulos No ltimo captulo o autor escreve sobre as normas
progressivos de aprendizagem que assentam em nveis bsi- de segurana nomeadamente de backup. ento aborda-
co, intermdio e difcil, diversos exemplos ilustrativos, que do sobre 8 pginas a funcionalidade Slave e Master que
usam como ferramenta de auxlio o MySQL Workbench. Per- muitos tendem a no conhecer e que assenta num paradi-
feito para quem se est a iniciar, perfeito para quem deseja gma de segurana e estabilidade de dados. Esta funcionali-
adquirir mais conhecimentos. dade permite em tempo real manter um ou mais backups da
base de dados principal (Master) em base de dados secun-
A obra est dividida em 9 captulos que consolidam a
drias (denominadas slaves) sem qualquer interveno do
linha de ascendncia em termos de complexidade:
utilizador.
Instalao do MySQL Por fim, aconselho a aquisio do livro pois o valor
Modelao e desenho da base de dados monetrio pago converter-se- em conhecimentos slidos e
anlise crtica.
SQL para iniciantes

AUTOR
Escrito por Fbio Pinho

Programador entusiasta nas mais diversas linguagens, sendo PHP, .NET e Java (Android) as suas preferncias.

40
Review

Programao em Python: Fundamentos e Resoluo de Problemas


Ttulo: Programao em Python: Funda- Com estes captulos lidos, nota-se o aprofundar dos
mentos e Resoluo de Problemas contedos, tendo por base os captulos antecedentes, pro-
movendo assim uma leitura progressiva e gil. Ao longo
Autores: Ernesto Costa
dos captulos quinto e sexto, so aprofundados temas como
Editora: FCA - Editora de Informtica instrues de controlo de fluxo e salto, instrues condicio-
nais, bem como construtores, mutabilidade, cpia profunda,
Pginas: 632
listas, cadeias, dicionrios (particularmente teis aquando da
ISBN: 978-972-722-816-4 utilizao da ferramenta Web2Py), rvores e outras estrutu-
ras de dados. Todos estes temas, so acompanhados de
exerccios e culminam num teste de conhecimentos. Ao cap-
O livro Programao em Python: Fundamentos e Re- tulo stimo, dou-lhe o destaque pelo tema em causa, a sa-
soluo de Problemas, de extrema utilidade para todos ber: ficheiros. um tema muitas vezes considerado comple-
aqueles que desejem aprender no apenas a programar mas xo, mas de relevo e interesse para a programao, sendo
tambm os diversos paradigmas de programao, no ne- que a apresentao deste tema no livro est simplesmente
cessitando de grandes conhecimentos prvios. O livro en- excelente, uma vez que feita de forma simples e objectiva,
contra-se estruturado de uma forma bastante organizada, sem mistificaes desnecessrias, sendo de fcil compre-
simples e direccionada. Apreciei o facto de que o leitor enso.
convidado a aprender primeiramente os conceitos tericos
necessrios compreenso das matrias apresentadas,
acompanhando exerccios que proporcionam uma consolida-
o do conhecimento, agradvel, ainda que pouco observ-
vel em obras tcnicas como o livro em questo. Mais uma vez se
Ao ler o primeiro captulo (introduo), compreendem-
se conceitos fundamentais de arquitectura de computadores, nota a ateno do au-
funcionamento dos mesmos, linguagens e paradigmas de
programao, alm de noes de algoritmia importantes tor na transmisso cla-
para uma slida compreenso dos contedos da restante
obra. Nota-se a ateno do autor para com o leitor, manten-
do o texto sempre cativante, apelativo, motivador e atractivo,
ra dos conceitos bem
proporcionando desafios em forma de exerccios, que aca-
bam por promover uma leitura mais atenta e interessada, at
como na consolidao
mesmo para os leitores menos provveis, pois programar
nos dias de hoje pode ser considerado to importante como dos mesmos.
saber ler e escrever o idioma nativo, de forma fluente.

Ao longo dos captulos dois e trs, abordam-se temas


de igual importncia como o caso de formas graficamente Tal como anteriormente, nos captulos seguintes, so
representadas e programao de interaces com o utiliza- aprofundados os temas previamente abordados, como o
dor. Seguidamente apresentada uma abordagem slida, caso dos objectos graficamente representados, sendo que a
ainda que no aprofundada, aos objectos, comeando por sua apresentao neste caso concreto se encontra de uma
explicar os conceitos mais tericos e aprofundando os con- forma muito apelativa para o leitor, uma vez que apresenta
ceitos mais prticos, como os tipos bsicos de objectos, ope- uma utilizao mais prtica com imagens e objectos reais.
raes e precedncias de operaes, mbito, mtodos ge- Posteriormente chegados ao nono capitulo, o autor foca-se
rais e especficos, construtores e por fim, um tipo de objecto em aspectos mais complexos da programao, como o caso
que merece alguma ateno especial: oTuplo (tuple) que da recursividade, mbito das variveis e objectos, bem como
sendo muito semelhantes s listas, tm no entanto especifici- programao orientada a objectos. Adopta uma aproxima-
dades concretas, muito teis para armazenamento de dados o clara, slida e progressiva ao paradigma, programao
em memria voltil. orientada a objectos com Python e seus aspectos mais avan-
ados como herana, polimorfismo, encapsulamento, clas-
No quarto captulo, so apresentadas as instrues
ses abstractas, entre outros, dispondo de exemplos prticos
destrutivas e de controlo, de leitura e escrita. Mais uma vez
de grande utilidade e qualidade. Esta obra, consegue ainda
se nota a ateno do autor na transmisso clara dos concei-
abordar alguns aspectos da engenharia de software, ao
tos bem como na consolidao dos mesmos.

41

Review
PROGRAMAO EM PYTHON: FUNDAMENTOS E RESOLUO DE PROBLEMAS
apresentar UML no exerccio da mquina multibanco. Num registo mais pessoal, creio que o livro cumpre
mais do que aparentemente promete numa primeira apreci-
Achei de particular interesse, tendo-me captado a
ao da capa. No parece prometer tanto quanto cumpre
ateno, o facto de o autor apresentar o tratamento e visuali-
quando se l a obra de forma atenta, algo raro em literatura
zao de imagens provenientes de ficheiros. Isto algo no
da especialidade, pelo que sado o autor com alegria! A
muito comum num livro de Python, mas que se revela parti-
obra no seu todo de uma qualidade excepcional, numa
cularmente interessante, pois desperta interessa no leitor
linguagem extremamente acessvel. O texto no de todo
para temas que de outra forma, muito provavelmente acaba-
maador, como os menos vidos da leitura por vezes di-
riam por passar despercebidos. De igual modo podem ser
zem ao adjectivar livros. A ateno mantida de forma to
teis caso o utilizador pense dar continuidade aos exemplos
eficaz que ousaria opinar que ao ler esta obra, se est pe-
de jogos que se encontram na parte final do livro, acrescen-
rante um ciclo de formao orientado por um formador e no
tando por exemplo, uma imagem de fundo, de entre um vas-
de uma obra de consulta, como uma esmagadora maioria
tssimo leque de situaes nas quais os conhecimentos
das obras tende a ser utilizada.
transmitidos nesta obra, so de grande utilidade e valncia,
mesmo para quem pense que a programao se destina Realo o facto de nesta obra se encontrarem ilustra-
apenas a um pblico mais tcnico e cientfico. es a cores, algo que no comum e foi com agrado que
constatei. Independentemente do rigor tcnico e cientfico da
A ttulo de exemplo apenas ilustrativo desta opinio pessoal,
obra, que diga-se elevado, o facto de dispor de algumas
a linguagem Python de extrema utilidade quando se traba-
ilustraes mais relevantes a cor, ajuda a captar a ateno
lha com ferramentas de edio de imagem como o caso do
inicial dos mais desatentos. Da mesma forma gostaria de
GNU Image Manipulation Program (GIMP), para o qual
destacar os intermezzos disponveis entre os vrios captu-
possvel desenvolver toda uma srie de plug-ins em Python.
los que compem esta obra, sendo excelentes complemen-
Creio poder considerar que um profissional da edio de
tos para o leitor e onde o autor aborda de forma, diria que
imagem que utilize a ferramenta acima mencionada, aps a
mais suave, algumas questes mais complexas e alguns
leitura desta obra, sentir-se- mais capaz de desenvolver
mitos ou pseudo-dogmas, chamemos-lhe assim, da progra-
cdigo que lhe automatize tarefas e at acrescente funciona-
mao para quem principiante, como o facto de ser todos
lidades ferramenta.
os problemas terem apenas uma soluo, a apresentada
No ltimo dos captulos o autor foca-se inteiramente pelo autor, professor, formador, a pessoa que transmite o
nos aspectos relacionados com as interfaces grficas de conhecimento. O autor desmistifica este facto num dos inter-
utilizador, algo que essencial num programa de computa- mezzos, apresentando uma argumentao simples e igual-
dor que execute mais tarefas do que simplesmente o trata- mente slida.
mento de dados provenientes de suporte informtico. A apre-
Em concluso, um livro que recomendo vivamente
sentao do tema, permite ao leitor uma consolidao dos
tanto a programadores, como a estudantes de programao,
temas anteriormente abordados, alm de levantar interesse
entusiastas e no entusiastas, em suma a qualquer pessoa
adicional e proporcionar os conhecimentos necessrios ao
que se interesse um pouco, por tecnologia e que esteja dis-
desenvolvimento de aplicaes amigas do utilizador e grafi-
posto a aprender um pouco mais! Como referi anteriormente
camente atractivas.
nesta anlise, o livro de uma qualidade impar, adequando-
O livro dispe ainda de um exemplo de uma animao e de se a todas as pessoas que se interessem pela programao.
um jogo simples, como o jogo do galo, tambm conhecido
A aprendizagem de programao, por si s algo de
por tic-tac-toe, que apesar de ser trivial e impossvel de
grande importncia, nos dias que correm. No obstante a
vencer, caso os dois jogadores estejam ao mesmo nvel de
linguagem Python, quer pela maturidade atingida, quer pela
ateno e capacidade cognitiva, pois dada a simplicidade do
quantidade cada vez maior de bibliotecas disponveis, para
jogo a probabilidade de empate entre jogadores em situao
as mais diversas funes, pela sua versatilidade parece-me
de igualdade de faculdades de quase 100%.
ser uma linguagem que todos devem aprender.

AUTOR
Escrito por Antnio C. Santos

Com uma enorme paixo por tecnologia, autodidacta desde tenra idade, cresceu com o ZX Spectrum.
Tem vasta experincia em implementao e integrao de sistemas ERP, CRM, ERM, BI e desenvolvi-
mento de software por medida nas mais diversas linguagens. Diplomado do Curso de Especializao
Tecnolgica em Tecnologias e Programao de Sistemas de Informao pela ESTG-IPVC. 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 no curso de Licenciatura em Engenharia Informtica
e Xamarin Student Partner nesta mesma escola Twitter:@apocsantos

42
No Code
Windows 10: As novidades da atualizao de novembro (Build 10586 - Version 1511)
ECMAScript 2015: a nova verso do JavaScript
Raspberry Pi Zero O novo Membro da Famlia!
Beta-i HACKATHON Lisbon has been Hacked
Xamarin 4.0 Tudo o que precisa para criar aplicaes mveis
Impressoras 3D Escolhe a tua
Xamarin para Docentes e estudantes
HIGH TECH FASHION
Projecto em Destaque na Comunidade p@p: Portugol +
No Code

WINDOWS 10: AS NOVIDADES DA ATUALIZAO DE NOVEMBRO


(BUILD 10586 - VERSION 1511)
Introduo place Update, permite preparar uma Pen USB com os bits
de instalao das verses 32 e 64 bits e que podemos usar
A Microsoft iniciou recentemente a distribuio
posteriormente para efetuar uma instalao limpa.
via Windows Update, da primeira grande atualizao para
o Windows 10, aps o lanamento da verso RTM no
passado ms de julho.

Ao longo dos ltimos meses, a Microsoft trabalhou


ativamente na correo de alguns problemas e atravs
do feedback submetido pelos Windows Insiders,
desenvolveu novas funcionalidades que pretendem melhorar
tanto a performance, como a experincia de utilizao do
Windows 10.

Vejamos ento em detalhe, quais as novas


funcionalidades disponveis para utilizadores domsticos e
tambm as novidades para as empresas.

Instalao da atualizao

Tal como aconteceu com a verso RTM do Windows


10, a Build 10586 est a ser distribuda de forma gradual via
Windows Update. O processo de instalao iniciado aps o
download dos bits necessrios atualizao cerca de 3
GB - e demora dependendo do hardware, de 20 a 60 Microsoft Media Creation Tool
minutos a concluir.
Algumas consideraes sobre a atualizao:
Podemos verificar a existncia da atualizao,
clicando no boto Iniciar e, em Se a ltima atualizao para o Windows 10 tiver sido h
seguida Definies > Atualizao e segurana > Windows menos de 31 dias, no ser possvel obter a atualizao
Update > Procurar atualizaes. de novembro de imediato; isto ir permitir-lhe voltar
verso anterior do Windows, se assim o preferir.
Depois de terem passado 31 dias, o PC
ir automaticamente fazer o download da atualizao
de novembro.

Qualquer atualizao instalada no PC antes da


atualizao de novembro j no ser listada
no histrico de atualizaes.

Novidades da verso

Ativao do Windows

O Windows 10 introduziu um novo mtodo de


ativao a elegibilidade digital - que no exige a
introduo de uma chave de produto, ou seja, aps a
instalao da atualizao gratuita, o Windows 10 ativado
Windows Update automaticamente com base na chave de produto
genuna do Windows 7,8 ou 8.1.
Em alternativa ao Windows Update, os utilizadores
que queiram acelerar o processo de atualizao, podem Na atualizao de novembro, este mtodo de ativao
recorrer ao MCT (Media Creation Tool) que a Microsoft foi alvo de melhorias e passa a ser possvel ativar
disponibiliza no site do Windows 10. O MCT j est o Windows 10 (Verso 1511 ou superior) atravs da
atualizado com os bits da nova verso e para alm do in- introduo de alguns tipos de chaves de produto

44
No Code
WINDOWS 10: AS NOVIDADES DA ATUALIZAO DE NOVEMBRO (BUILD 10586 - VERSION 1511)
do Windows 7, Windows 8 e Windows 8.1., aps a Personalizao > Inicio e ativar a opo Mostrar mais
instalao da atualizao via Windows Update (caso a mosaicos.
ativao no seja feita automaticamente) ou durante uma
instalao limpa.

Menu Iniciar

Menus de Contexto

Os menus de contexto nesta Build melhoraram


Alterao chave de Produto significativamente quando comparamos com os existentes
na verso RTM. Apesar de ainda existirem algumas
Para fazermos a ativao do Windows 10, utilizando
diferenas entre os variados menus de contexto do Windows
uma chave genuna destas verses, podemos proceder da
10, as melhorias implementadas agora nesta verso tornam
seguinte forma:
estes menus mais consistentes entre si. Para alm das
Clicar no Iniciar, em seguida, clicar em Definies > melhorias no UI, o menu de contexto possui
Atualizao e segurana > Ativao. agora submenus - no caso do Menu Iniciar - que do um
acesso rpido s opes que permitem definir
Clicar em Alterar chave de produto e introduzir a dimenso dos Tiles, Rever e Votar em Aplicaes ou
a chave de produto de 25 carateres. aceder a opes de Partilha.

Depois de concludo o processo de ativao, ento


concedida a elegibilidade digital ao PC com base na chave
genuna que introduzimos. Caso seja necessrio fazer uma
formatao ao dispositivo e uma vez que este foi ativado
usando este novo mtodo, no ser necessrio introduzir
uma chave de produto durante a instalao para que o
Windows seja de novo ativado neste equipamento.

Dos tipos de chaves de produto que podemos


utilizar para ativao do Windows 10, no so suportados os
seguintes tipos: Licenciamento de Volume que incluem as
chaves GVLK (Generic Volume Licensing Keys) e MAK
(Multiple Activation Keys) e tambm as chaves das
verses Enterprise do Windows 7, 8 e 8.1. Menus de contexto
Menu Iniciar Cores na Barra de Titulo das Janelas
Uma das funcionalidades do Windows 10 que Na verso RTM do Windows 10, apenas era possvel
recebeu melhorias nesta Build foi o Menu Iniciar. Apesar definir cores para o Menu Iniciar, barra de tarefas e Centro
das mudanas serem subtis primeira vista, passa agora a de Aes. Na Build 10586, agora possvel expandir o
ser possvel adicionar mais uma coluna de mosaicos esquema de cores do Windows tambm s barras de
dinmicos, aumentando assim de trs para quatro a ttulos. Esta com certeza uma das novidades que agrada
quantidade de mosaicos visveis. Para alm disso, a maioria dos utilizadores do Windows 10.
Microsoft alterou o nmero de itens que podemos ter
disponveis no Menu Iniciar de 512 para 2048. Para ativar esta opo, podemos aceder a Definies >
Personalizao > Cores e ativar a opo Mostrar cor em
Se quisermos ento ter mais uma coluna disponvel Inicio, na barra de tarefas, no centro de ao e na barra
no Menu Iniciar, podemos aceder a Definies > de ttulos.

45
No Code
WINDOWS 10: AS NOVIDADES DA ATUALIZAO DE NOVEMBRO (BUILD 10586 - VERSION 1511)

Esquema de cores

Imagem de Fundo do ecr de login

A impossibilidade de inativar a imagem de Multitasking


fundo no ecr de login do Windows 10, recebeu um grande
Outra nas novidades do Windows 10 - o modo
nmero de feedback por parte dos Windows Insiders e que
Tablet - recebeu melhorias nesta verso que tornam a sua
se traduziu numa nova opo de personalizao. Na Build
utilizao mais simples e fluida. Agora quando usamos
10586 passa ento a possvel inativar a imagem de
a Vista de Tarefas no modo Tablet, possvel mover Apps
fundo do ecr de login.
da esquerda para a direita ou substituir uma App encaixada
Esta nova opo est acessvel em Definies > anteriormente por uma nova App. Uma outra novidade do
Personalizao > Ecr de bloqueio > Mostrar imagem de modo Tablet, a possibilidade de arrastar qualquer App para
fundo do Windows no ecr de inicio de sesso. o fundo do ecr para que a mesma seja fechada. Se era um
utilizador do Windows 8.1, de certeza que as funcionalidades
referidas anteriormente lhe soam a algo familiar.

Personalizao ecr de login

Multitasking, Snap e Tablet Mode

As opes de Multitasking no Windows 10,


permitem configurar o comportamento das janelas
(em Snap) no desktop e tambm nos desktops virtuais. Na Modo Tablet
atualizao de novembro, foram melhoradas algumas das
Microsoft Edge
funcionalidades existentes na verso RTM e includas mais
algumas opes, como por exemplo a opo Quando O novo browser do Windows 10 - o Microsoft Edge -
redimensiono uma janela encaixada, redimensionar recebeu com a atualizao de novembro a sua primeira
automaticamente quaisquer janelas encaixadas grande atualizao de plataforma, passando para a
adjacentes. Em termos prticos, quando redimensionamos verso EdgeHTML 13.10586. Alm desta atualizao, o
uma janela que esteja no modo Snap, a outra janela Edge recebeu um conjunto de funcionalidades que no foram
redimensionada de forma automtica para que uma no se includas na verso RTM do Windows 10, tais como
sobreponha outra. Aqui temos claramente uma grande a sincronizao de Favoritos, Listas de
melhoria, considerando que esta opo estava apenas Leitura e Definies entre PCs com Windows 10.
disponvel no modo Tablet.

46
No Code
WINDOWS 10: AS NOVIDADES DA ATUALIZAO DE NOVEMBRO (BUILD 10586 - VERSION 1511)
disponvel no Japo, Austrlia, Canad e ndia (em ingls),
com funcionalidades e experincias especficas para estes
mercados. Considerando a dimenso do mercado portugus,
continuaremos ansiosamente a aguardar a disponibilizao
da Cortana na lngua de Cames.

Outra novidade includa nesta verso e que surge das


inmeras solicitaes dos Windows Insiders, a
possibilidade de utilizar a Cortana tambm com contas
locais, ou seja, cai a obrigatoriedade de configurar
uma Microsoft Account para iniciar sesso no PC,
exclusivamente para utilizar recursos como a Cortana,
embora se mantenha a obrigatoriedade de indicar
a Microsoft Account durante o processo inicial de setup da
Cortana. Esta possibilidade muito bem-vinda, tendo em
Sincronizao Favoritos/Lista de Leitura
conta que o mesmo j era possvel com outras Apps
Tambm nesta verso, podemos pr-visualizar os Windows, como a Store por exemplo.
sites abertos nos diversos separadores, bastando para isso
passar o rato por cima de qualquer um destes. A opo Ask Cortana existente no Edge, passou a
estar disponvel tambm nos documentos PDF. Para
obtermos informaes sobre determinada palavra ou frase,
basta selecionar esse contedo e com o boto
direito do rato, clicar em Ask Cortana. Imediatamente a
Cortana vai analisar o pedido e apresentar um conjunto de
resultados, como ilustra a imagem que se segue.

Pr-visualizao separadores Edge

A partir de agora, passa a ser possvel tambm utilizar


o Edge para fazer casting de contedos
como vdeo, udio e imagens para qualquer dispositivo
externo que possua Miracast ou DLNA, como uma Xbox
One por exemplo, excetuando obviamente contedos
protegidos.

Ask Cortana - PDF

A Cortana recebeu melhorias na gesto dos nossos


lembretes, passando agora a incluir nos alertas informaes
sobre reservas de bilhetes de cinema,
de viagem e encomendas a partir das informaes sobre
Casting no Microsoft Edge estas e que recebemos normalmente no nosso e-mail. Outra
Cortana novidade da Cortana e que est ligada tambm aos
lembretes, o reconhecimento de apontamentos
A Microsoft continua a apostar fortemente
feitos manualmente pelos utilizadores. Desta forma,
na Cortana, capacitando-a atravs da implementao de informaes como datas/horas, nmeros de
novas funcionalidades e melhorando algumas das existentes.
telefone, moradas e e-mails podem ser automaticamente
Com a atualizao de novembro, a Cortana passa a estar
utilizados nos lembretes.

47
No Code
WINDOWS 10: AS NOVIDADES DA ATUALIZAO DE NOVEMBRO (BUILD 10586 - VERSION 1511)

App Mensagens
Reconhecimento escrita Cortana
Ainda relacionado com as Apps, a Microsoft voltou a
Windows Apps
disponibilizar a opo que permite a instalao de Apps
Como tem sido habitual, tambm as Apps nativas do em dispositivos externos como cartes SD. Esta opo foi
Windows 10 so atualizadas com novas funcionalidades e apresentada inicialmente em algumas Technical Previews,
correes que melhoram significativamente a sua mas no foi includa na verso RTM do Windows 10.
performance. Nesta Build foram atualizadas as Apps Correio
Esta opo pode ser configurada em Definies >
e Calendrio, Fotografias, Mapas, Groove e
Sistema > Armazenamento > As novas aplicaes sero
tambm Xbox. No Windows Blog, poder encontrar mais
guardadas em.
detalhes sobre as novidades includas em cada uma destas
Apps. Adicionalmente, a App Feedback passa a estar Gesto da Memria
disponvel para todos os utilizadores do Windows 10, Em regra geral, o Windows mantm itens em memria
mesmo que no estejam inscritos no Windows Insider para melhorar a performance, mas quando a memria
Program. comea a esgotar, comea a usar cache em disco para
armazenar estes itens. Nesta Build, a gesto de
memria inclui um novo componente que se
chama System and compressed memory. Este
componente permite que o Windows faa a compresso de
informao na memria antes que esta se esgote, e antes
que esta seja passada para o disco.

App Correio

Foram tambm includas trs novas Universal


Apps: Mensagens, Telefone e Skype Vdeo. Atravs da
integrao de um conjunto de funcionalidades do Skype,
possvel fazer chamadas de voz e vdeo ou enviar
mensagens de forma rpida para outros utilizadores Skype, a
Gestor de Tarefas - Sistema e memria comprimida
partir do Menu Iniciar ou da barra de tarefas.

48
No Code
WINDOWS 10: AS NOVIDADES DA ATUALIZAO DE NOVEMBRO (BUILD 10586 - VERSION 1511)
Para saber um pouco mais sobre a compresso da
memria no Windows 10, poder consultar o seguinte vdeo
no Channel 9: Memory Compression in Windows 10 RTM.

Enterprise Features

Como referi na introduo deste artigo, a atualizao


de novembro no traz apenas novidades para o consumo.
As empresas que usam Windows 10, passam a usufruir de
um conjunto de servios e funcionalidades que permitem
uma atualizao continua dos seus equipamentos, mantendo
-os sempre funcionais e seguros. Estas melhorias ajudam as
equipas de IT a gerir uma grande quantidade de dispositivos famlia Windows, como PCs, Smartphones, Tablets e
sejam eles propriedade da empresa ou dos seus utilizadores tambm IoT.
(BYOD), manter a segurana da informao empresarial
Enterprise Mobility Management
isolada da informao pessoal e autorizar a utilizao de
Apps disponibilizadas pela empresa em dispositivos Com a introduo do Azure Active Directory Join,
empresariais e vice-versa. qualquer dispositivo estar pronto a usar dentro da
organizao em poucos minutos. Atravs de um login nico,
Vejamos ento algumas dessas novidades:
os utilizadores podem fazer iniciar sesso num dispositivo e
Windows Update for Business e Windows Store for ter as suas definies do Windows e demais informaes,
Business migradas rapidamente e em segurana.

Estes dois servios gratuitos disponibilizados pela Mais detalhes sobre estas funcionalidades, podem ser
Microsoft, vo permitir s equipas de IT gerir a forma como consultadas nos seguintes links: Enterprise management for
so distribudos os Updates nestes equipamentos, Windows 10 devices | Azure Active Directory Join
assegurando que os mesmos esto atualizados e que
Segurana
cumprem os requisitos de segurana impostos pela
organizao. A propagao de malware que tem como objetivo a
subtrao de informao confidencial cada vez mais
Atravs da Store for Business, as equipas de IT
frequente. A Microsoft desenvolveu o Windows 10 para
podem adquirir e distribuir Apps para os dispositivos com
proteger os seus utilizadores deste tipo de ameaas, atravs
Windows 10 de forma prtica, seja estas Apps da Loja
de funcionalidades como o Windows Hello, o Windows
Windows ou App desenvolvidas internamente pela
Defender, o Device Guard e o Credential Guard, agora
melhoradas com a atualizao de novembro.

empresa (LOB).

Windows Store for Business

Mais detalhes sobre estes servios, podem ser consultadas


nos seguintes links: Windows Update for
Business | Windows Store for Business.

Mobile Device Management e Azure Active Directory Join

Atravs do Enterprise Mobility Management, as equipas de Windows 10 Security


IT vo poder gerir de forma eficiente os cenrios
Mais detalhes sobre funcionalidades como o Device
de BYOD que podem incluir os mais variados dispositivos da
Guard, Credential Guard, Enterprise Data Protection etc.,

49
No Code
WINDOWS 10: AS NOVIDADES DA ATUALIZAO DE NOVEMBRO (BUILD 10586 - VERSION 1511)
podem ser consultados no seguinte link: Microsoft Technet Concluso
Windows 10 Enterprise Features. Em concluso, a Build 10586 chega aos utilizadores
estvel e com melhorias significativas em termos de
performance e experincia de utilizao. O processo de
instalao em tudo igual verso RTM, pelo que no
Uma das funcio- dever trazer problemas maioria dos utilizadores. De referir
apenas que existem outras novidades que merecem ser
nalidades do Windows exploradas e que no foram abordadas neste artigo. Caso
ainda no tenha atualizado para a Build 10586, no deixe

10 que recebeu melho- ento de explorar estas e outras novidades da verso.

rias nesta Build foi


No Windows Blog,
o Menu Iniciar. Apesar
poder encontrar mais
das mudanas serem
detalhes sobre as novi-
subtis primeira vista
dades includas em ca-
()
da uma destas Apps
()

AUTOR
Escrito por Nuno Silva

Microsoft MVP Windows Experience | Microsoft Technical Beta Tester

50
No Code

ECMASCRIPT 2015: A NOVA VERSO DO JAVASCRIPT


Este artigo no pretende mais do que apenas introdu- O JavaScript
zir e clarificar alguns conceitos. Tecnicamente h muito para
J com 20 anos de existncia, quantos de ns j utili-
falarmos e, quem sabe, no estar na hora de programarmos
zaram o JavaScript para a definio de algumas variveis,
juntos (em futuras edies da nossa revista) Entretanto,
para clculos simples, para controlo do UI (User Interface) ou
se o leitor programador de JavaScript, chegou a altura de
para a validao de formulrios? Muitos, seno todos Mas
dedicar algum do seu tempo nova verso do ECMAScript,
este tipo de utilizao da linguagem era tpica dos seus in-
caso ainda no o tenha feito.
cios e efetivamente restringia-se a isso e pouco mais. A evo-
Afinal o que o ECMAScript 2015? luo, at aos dias de hoje foi tremenda e, atualmente, o Ja-
vaScript passou o seu foco para a construo de aplicaes
A linguagem de programao JavaScript segue um
robustas, quer do lado do cliente, quer do lado do servidor.
padro definido pela ECMA sob o nome de ECMAScript. Por
Por via do dinamismo de uma comunidade de verdadeiros
outra perspetiva, podemos afirmar que o ECMAScript o
devotos linguagem e devido capacidade de ser executado
nome "apropriado", ou formal, para a linguagem usualmente
em plataformas distintas, o seu crescimento e consequente
referida como JavaScript. Objetivamente, sem grandes con-
notoriedade so evidentes. H, ainda, quem considere que o
textualizaes histricas, o ECMAScript 2015 a nova ver-
JavaScript no dispem das caratersticas mais adequadas
so da especificao da linguagem JavaScript. , muitas das
boa produtividade de um programador e no facilita a produ-
vezes, tambm referido como ECMAScript 6, abreviadamen-
o de cdigo de fcil manuteno. O surgimento do ES2015
te ES6, ou Harmony.
tambm tem o intuito de colmatar algumas dessas falhas,
As principais caractersticas da linguagem JavaScript colocando a linguagem a um outro nvel.
so definidos pela norma ECMA-262 que est na 6 verso e
H duas vantagens factuais na utilizao do JavaS-
data, em verso final, do ms de junho. Esta ltima verso
cript:
representa a maior mudana para o JavaScript, observada
desde a criao do mesmo. Neste contexto, confesso-vos Ubiquidade:
que alterei este artigo porque, quando iniciei a redao do podemos encontr-lo em qualquer dispositivo, desde
mesmo (15 de junho), a referida norma, na sua 6 verso, os smartphones at qualquer computador atual. Qualquer
existia apenas em verso draft, com a data de 13 de abril programador que j tenha desenvolvido para a web, se no o
ltimo, sendo que no dia 17 de junho sou agradavelmente utilizou, pelo menos pensou na sua utilizao. Embora, neste
surpreendido com o lanamento da verso final do ECMAS- particular, nem consiga sequer conceber o desenvolvimento
cript 2015 (nome dado norma ECMA-262 na sua 6 Edi- para a web sem o recurso ao JavaScript.
o).
Poder:
As verses anteriores do ECMAScript so as 1,2,3 e A linguagem revela-se extremamente capaz especial-
5. A omisso do 4 factual e no um erro. O ES5 teve o seu mente em dar resposta , de cada vez maior, necessidade
lanamento em 2009, sendo que o ES6 (ou ES2015) traba- aplicacional de comunicaes assncronas (caso estas sejam
lhado desde ento. necessrias).

Consultar verses draft do ECMAScript: Ns, programadores, j percebemos que o browser


http://wiki.ecmascript.org/doku.php? a forma que temos disponvel para, de forma eficaz, criar
id=harmony:specification_drafts interfaces de utilizador para a partilha de dados e que de
cada vez mais a nossa atividade tende a ser para a constru-
Verso final do ECMAScript 2015:
o de aplicaes web, em detrimento das GUI clssicas. O
http://www.ecma-international.org/ecma-262/6.0/index.html
JavaScript pea chave desta mudana de paradigma. Em
Com tantas designaes para, aparentemente, a reforo disto, um browser - e, portanto, o JavaScript - pode
mesma coisa, deixo abaixo uma tabela com o intuito de dissi- ser executado numa vastssima gama de dispositivos, desde
par qualquer dvida que ainda permanea no leitor, focando- telemveis com CPUs eventualmente com pouca capacidade
me no essencial. de processamento, at computadores poderosos com enor-
Especificao em que o JavaScript se me capacidade de processamento.
ECMAScript 2015
baseia
Curiosamente, no mesmo ms do lanamento do
JavaScript Implementao da especificao EC-
ES2015, a palavra JavaScript passou a fazer parte do dicio-
ES6 Verso do ECMAScript (old style)
ES2015 Verso do ECMAScript (new style)

51
No Code
ECMASCRIPT 2015: A NOVA VERSO DO JAVASCRIPT

nrio. Por agora ainda no faz parte do portugus, foi um tas em ES2015 sem ter qualquer preocupao de compatibili-
dicionrio de lngua inglesa de referncia, o Oxford English dade com os browsers.
Dictionary, que o incluiu na listagem das novas palavras.
Como diz o slogan utilizado no site do Babel: Use next
Atualizaes ao referido dicionrio: generation JavaScript, today. Subscrevo.
http://public.oed.com/the-oed-today/recent-updates-to-the-
Concluso
oed/june-2015-update/new-words-list-june-2015/
O ECMAScript2015 mudar (j muda) a forma como
se programa em JavaScript.
Podemos utilizar o ES2015 desde j?
Em contexto de produo, neste momento, deparamo-
Com entusiasmo diria, no imediato: claro que sim. nos com um problema que devemos ter em considerao: o
suporte nas vrias plataformas disponveis. Com efeito, o
Muitas das especificidades do ES2015 j so disponi-
ES2015 ainda no integralmente suportado pelos browsers,
bilizadas pelos browsers Firefox e Chrome (consultar https://
embora se assista a constantes e rpidas evolues nesse
kangax.github.io/compat-table/es6/). No caso deste ltimo
sentido.
poder ser necessria a ativao da opo Ativar JavaS-
cript Experimental (Enable Experimental JavaS- Na minha opinio, no faz grande sentido intervir nu-
cript) acessvel nas configuraes atravs do acesso a chro- ma aplicao terminada e j em produo e migr-la para a
me://flags (na barra de endereo do browser). nova verso do JavaScript. O mesmo se aplica a uma aplica-
o num estgio de desenvolvimento j avanado. No entan-
Numa abordagem muito pouco tcnica, mas elucidati-
to, j faz todo o sentido a utilizao do ES2015, no momento
va, o ES2015 atualiza o JavaScript. Neste contexto, imagine-
em que iniciado um novo desenvolvimento aplicacional.
se o cenrio em que temos uma aplicao estvel com funci-
Sempre de considerar o suporte (ou a falta dele) por parte
onalidades suportadas pelo JavaScript (exclusivamente ES5,
dos browsers.
no caso). Na realidade temos disponvel, para programar
sobre um browser atual e atualizado, tudo o que sabemos da Conclundo e clarificando, enquanto programadores
especificao da linguagem definida pelo ES5, somada a de JavaScript, no temos a necessidade de aprender um
melhorias desta ltima, mais as novidades trazidas pelo ES6. JavaScript novo. Podemos continuar a programar utilizando
Ento como proceder? Recomendaria a programao em todo o nosso conhecimento e sintaxe aprendida at ento,
ES2015 testando, sempre, o cdigo em diferentes browsers, tirando partido das melhorias, do que j existia, agora introdu-
de resto como prtica comum nos programadores de apli- zidas pelo ECMAScript 2015 e, sempre que necessrio, tirar
caes web. partido do que o referido standard nos traz de novo.

Em suma, o desafio traduz-se em utilizar o ES2015 Como referido na introduo gostaria de voltar com,
gradualmente nos nossos projetos, aproveitando as melhori- pelo menos, a apresentao do que, na prtica, o ES2015
as/atualizaes do que j existia no ES5 e tirando partido nos proporciona. A ver vamos Se for caso disso um "at j"
das novidades trazidas pela nova verso. E no esqueam e foi um prazer escrever para vocs.
que, hoje, as nossas aplicaes em JavaScript so executa-
das em browsers que j suportam o ES2015.

Indo um pouco mais longe, exis-


tem transpilers (source-to-source compilers) que traduzem o
cdigo integralmente escrito em ES2015 para a verso ante-
rior, a ES5, integralmente suportada pelos browsers atuais.
Neste contexto refiro o Babel (disponvel em https://
babeljs.io/) que, data, considerado o melhor transpiler de
JS pela comunidade. Em suma, com o Babel corretamente
instalado, podemos produzir aplicaes integralmente escri-

AUTOR
Escrito por Jos Viana

exerce profissionalmente a atividade de programador desde h, aproximadamente, 15 anos. Docente da Escola Superior de
Tecnologia e Gesto do Instituto Politcnico de Viana do Castelo, na rea Cientfica de Informtica e Multimdia.
Licenciado em Engenharia da Computao Grfica e Multimdia.

52
No Code

RASPBERRY PI ZERO O NOVO MEMBRO DA FAMLIA!


Para os amantes da famlia Raspberry Pi, o Natal ligar por exemplo um flat-cable e/ou para que haja interaco
chegou mais cedo. O final de Novembro trouxe um novo entre o Pi Zero e outros circuitos. Outra vertente que dei-
membro famlia Pi. O Zero. Dono de 1Ghz, single-core xamos de ter directamente a sada S-VIDEO, tambm esta
CPU e de 512MB RAM, as espectativas geradas em torno ter que ser soldada pelo utilizador.
deste lanamento eram altas. O Zero no desiludiu quem o
Contudo primeira olhadela o que salta mais depres-
esperava impacientemente.
sa vista o facto do Raspberry Pi Zero no ter interface de
rede.

Os mais distrados podem ficar descansados pois a


pequena placa pode ter acesso internet. Basta para isso
utilizar uma interface USB-Wifi. Para os mais corajosos e
entusiastas da electrnica, podem ser usados os pinos
GPIO14, GPI015, +5V, GND e duas resistncias pull-up,
para ligar o mdulo WIFI UART, baseado em ESP8266
(expanso GPIO do raspberry para ligar um modulo ES-
P8266-01, como mostra a ima-
gem seguinte, por exemplo).

Como o prprio nome indica, quase que voltmos ao


inicio. simplicidade de um circuito. De uma ideia. Mais
compacto, o novo Pi Zero ligeiramente mais pequeno que o
Raspberry Pi A+. Dimenses oficiais? 6.5cmx3.52cm. mi-
cro. Mas s no tamanho. As potencialidades so intensas (e
imensas), bem forma como a fundao Raspberry nos ha-
bituou.

Como o Zero no s mais um membro desta famlia,


sendo que aflora toda a vertente mais tcnica dos utilizado-
res, vamos a comentrios mais prticos a porta USB pas-
sou a ter uma ficha micro USB. A porta HDMI passou a ser
mini-HDMI. Caso seja necessrio, podem (e devem) ser usa-
dos adaptadores externos (por exemplo para ligar ao monitor
de casa).

Deixamos de ter os pinos de origem, nesta verso Modulo ESP8266-01


os headers deixam de estar soldados e so considerados um
Diagrama de ligao ao modulo
extra que o utilizador tem que tratar posteriori, caso decida

53
No Code
RASPBERRY PI ZERO O NOVO MEMBRO DA FAMLIA!

Apesar de teoricamente esta nova verso prometer mico aquando da aquisio.


cerca de 40% maior rapidez de resposta, na prtica isso no
se vislumbra propriamente. Contudo o Zero cumpre o que
promete, e o elemento mais pequeno da fam- Escusado ser dizer que semelhana do que acon-
teceu anteriormente, tambm esta verso do Raspberry es-
gotou nos primeiros dias, a primeira edio de 200.000 exem-
Como o prprio plares, uma vez que apesar de parecer incompleta, a ver-
so da famlia Pi que permite ao utilizador uma maior deciso
nome indica, quase e interaco/construo.

Em suma, apesar de toda a famlia Raspberry Pi ser


que voltmos ao inicio. destinada ao pblico em geral, uma vez que o mote da funda-
o ensinar de forma simples e econmica todos os inte-
simplicidade de um ressados em aprender e dar os primeiros passos na progra-
mao, o Raspberry Pi Zero afasta-se um pouco do pblico

circuito. em geral sendo que quase um pequeno competidor do ar-


duino, sendo mais atractivo s pessoas que estejam a traba-

lia, o que consome menos energia e tambm o mais econ-

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.

54
No Code

BETA-I HACKATHON LISBON HAS BEEN HACKED


Nos passados dias 24 e 25 de Outubro, Lisboa foi
palco de uma das maiores (e melhores) iniciativas dos aman-
tes da programao. Novos e menos novos, juniores, senio-
res ou apenas aspirantes a designers/programadores junta-
ram-se nas instalaes da Beta-i para quebrar barreiras.

O espao era agradvel, com espaos para programar


e desanuviar enquanto as ideias vinham preenchendo as
mentes dos programadores.

Trabalhos divididos em quatro grandes grupos: The


Rebels, The Explorers, The Makers e The Revolutiona-
ries, os projectos foram crescendo.

Num ambiente em que a boa disposio reinou, foram


vrios os post-its deixados nos quadros e recantos espalha-
dos pela sala, o Goals Board ajudava a manter presentes
os objectivos e metas a atingir. As ideias transformaram-se
em projectos, os projectos ganharam novos forks e tudo cor-
reu em beleza.

No menos importante e como algum tinha que cui-


dar dos participantes, a organizao no teve mos a medir,
sendo que ao longo dos dias, no deixaram ningum fo-
me, pelo contrrio, foi servido um almoo bastante saudvel,
e a zona do lanche e do caf no deixou de ter sempre algo
Como no podia deixar de ser, a Programar esteve apetitoso. Ora comida, caf e cdigo qual o programador
nesta iniciativa. No sbado de manh, vrios foram os auda- que no se sentiria em casa?
zes que se dirigiram ao local com um sorriso no rosto, regis-
tos feitos, foram abertas as hostes. Apresentadas ideias,
formadas as equipas e dai ao work & code foi um rpido
passo. A meio da manh, j se debatiam ideias e algoritmos
sendo que os primeiros esboos foram rapidamente surgin-
do.

55
No Code
BETA-I HACKATHON LISBON HAS BEEN HACKED

Acima de tudo de agradecer e louvar organizao


a simpatia com que acolheu todos os participantes neste fim-
de-semana de ideias. Deixamos um agradecimento especial
Marta pelo convite e ao Duarte e Marina que nos acolhe-
ram com um sorriso.

Apresentadas idei-
Mais do que um fim-de-semana diferente, foi possvel
conhecer novas pessoas, criar novos laos, aprender e parti-
lhar uma experincia nica. Sem dvida uma experincia a
as, formadas as equi-
repetir que ficar na memria de todos os participantes!
pas e dai ao work &
code foi um rpido
passo ()

Foto by: Filipa Peres

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.

56
No Code

XAMARIN 4.0 TUDO O QUE PRECISA PARA CRIAR APLICAES MVEIS

Introduo Suporte para iOS9 e Android Material Design


No primeiro semestre de 2014 a Xamarin lanou o Novas gestures: pinch e pull-to-refresh
Xamarin 3.0, que veio trazer s equipas de desenvolvimento
de aplicaes mveis muitas novidades, nomeadamente a Para alm destas novidades, a Xamarin apresenta
framework Xamarin Forms que veio revolucionar a forma de melhorias no desenvolvimento de aplicaes iOS usando
desenvolvimento at ento e para alm disso possibilitou a Xamarin Plugin para Visual Studio, realizou atualizaes na
criao de estratgias de reutilizao de cdigo, que permite verso do Mono/.Net de forma a manter compatibilidades e
diminuir o esforo de desenvolvimento entre as vrias plata- aumentar a performance das suas solues e melhorou a
formas e claro est reduzir o tempo de manuteno. experincia ao nvel de modo design para iOS (load and save
XIB files) e Android (Android Material Design).
Com isto, nos ltimos meses muita tinta correu volta
das solues oferecidas pela Xamarin, e com a publicao Ao nvel do Xamarin Test Cloud, a Xamarin possibilita
do Xamarin Test Cloud, Xamarin Insights e Xamarin Android que as aplicaes sejam testadas em +2k dispositivos reais
Player, a Xamarin continuou a somar pontos. de Android e iOS, o que sem dvida uma mais-valia para
muitas equipas de desenvolvimento que muitas vezes s tem
Recentemente, em Novembro 20015, a Xamarin volta 2 ou 3 dispositivos. E apresentado o Xamarin Test Recor-
carga com mais anncios e apresenta o Xamarin 4.0, que der, aplicao preview disponvel para Mac, que permite
apresenta muitas novidades que para quem est a fazer de- gravar todas as interaes realizadas pelas aplicaes iOS e
senvolvimento de aplicaes mveis deixa qualquer um so- Android e desta forma possvel criar scripts que depois po-
berbo, uma vez que a qualidade e leque de funcionalidades dem correr no Xamarin Test Cloud ou import-los para o
continua a crescer de forma exponencial, e consequente- Xamarin Studio/Visual Studio. Estes scripts baseiam-se em
mente contribui para o bom desenvolvimento, e consequen- testes unitrios que tiram partido da framework UITest e po-
temente boa qualidade e desempenho das aplicaes. dem ser executados a partir de integrao continua. Esta
Funcionalidades framework, Xamarin.UITest C#, mais uma das novidades
com o lanamento da sua primeira release e completamen-
O Xamarin 4.0 apresenta-se com uma nova verso da te focada na criao de testes, gratuita e sem limitaes de
plataforma da Xamarin e da Xamarin Test Cloud, e torna utilizao em simuladores ou devices. No entanto a combina-
pblico o Xamarin Insights, deixando este ltimo de ser ver- o perfeita o uso de Xamarin.UITest C# em conjunto com
so beta, como era at aqui. o Xamarin Test Cloud.
As solues da Xamarin vo fornecer ferramentas e APIs
para facilitar o desenvolvimento, teste e monitorizao, e
claro est as estratgias de partilhar/reutilizao de cdigo
permite que o desenvolvimento das aplicaes para as v-
rias plataformas seja mais rpido.

Ao nvel da framework Xamarin Forms, que se apresenta


como Xamarin Forms 2.0, temos as principais novidades:

Melhorias de performance e de qualidade de API;
Ao nvel do Xamarin Insights, a Xamarin orgulha-se na
Suporte para pr compilao de ecrs desenhados
monitorizao em tempo real e disponibiliza relatrios gratui-
em XAML facilitando o carregamento da aplicao;
tos para todos os utilizadores, no entanto com algumas limita-
Suporte para Universal Windows Platform apps (ainda es. Claro est fornece solues mais avanadas para ce-
preview) nrios que o exijam, o que o caso das aplicaes enterpri-

57
No Code
XAMARIN 4.0 TUDO O QUE PRECISA PARA CRIAR AS SUAS APLICAES MVEIS

se. Concluso

Para terminar, a Xamarin aproveitou este lanamento Em concluso, podemos concluir que a equipa da
para estimar os seus clientes e ofereceu a todos os utilizado- Xamarin continua a trabalhar arduamente para nos fornecer
res ativos: boas solues de forma a facilitar o desenvolvimento de apli-
caes mveis e com o lanamento do Xamarin 4.0 nota-se a
Relatrios de erros do Xamarin Insights, com reten- melhoria de qualidade e em muitos casos a voz do utilizador
o de dados at 30 dias; tida em conta.
60 minutos de Xamarin Test Cloud por ms Referncias
30 dias de acesso Xamarin University https://blog.xamarin.com/

http://developer.xamarin.com/

() o Xamarin 4.0,
que apresenta muitas
novidades que para
quem est a fazer de-
senvolvimento de apli-
caes mveis deixa
qualquer um soberbo
uma vez que a qualida-
de e leque de funciona-
lidades continua a
crescer de forma expo-
nencial()

E para alm disso a Xamarin apresenta novos planos


sobre os seus produtos, planos estes mais direcionados a
empresas.

AUTOR
Escrito Por Sara Silva

Licenciada em Matemtica pelo DMUC, e o seu foco de desenvolvimento est direccionado para a rea
Mobile. Atualmente desenvolve na rea do Windows, Xamarin, Azure, e Microsoft MVP Mentor. A Sara foi
condecorada com vrios prmios com especial destaque: Microsoft MVP, Xamarin MVP, Telerik Developer
Especialista, C# Corner MVP, TechNet Wiki - Technical Guru. O trabalho que vai sendo desenvolvido pela
Sara pode ser seguido atravs do seu blog www.saramgsilva.com e do twitter @saramgsilva.

58
No Code

IMPRESSORAS 3D ESCOLHE A TUA


Hoje em dia, as impressoras 3D ganham cada possvel ler o seu contedo e relembrar que o seu carto SD
vez mais entusiastas e muitos so os interessados neste tipo ainda est dentro do aparelho.
de equipamento. Apesar da Impresso 3D no ser algo no-
Na questo da sua qualidade, este equipamento ofe-
vo uma vez que a primeira impresso conhecida ocorreu em
rece uma base que permite imprimir objectos at
meados de 1984, por Chuck Hull, s h pouco tempo o pbli-
200x200x200mm e a impresso aceitvel tendo em conta
co em geral olhou de forma mais atenta a este tema .
que o software minimalista, no contendo muitas opes
A Impresso 3D tambm conhecida como prototipagem rpi-
nas configuraes da mesma para a impresso o que se tor-
da, uma forma de tecnologia de fabricao aditiva onde um
na um ponto favorvel para quem inicia esta nova experin-
modelo tridimensional criado por sucessivas camadas de
cia. Quando o software inicia o slicing, que a designao
material.
dada ao processo onde o programa transforma o objecto
Neste artigo, o objectivo ser indicar um conjunto de tridimensional em layers, parece que existe alguma dificul-
impressoras 3D e respectivas anlises dos seus prs e con- dade em processar objecto menos perfeitos e tende em
tras de forma que seja mais simples escolher o equipamento demorar mais do que o desejado. parte dos pequenos pro-
que melhor satisfaz as suas necessidades do leitor. blemas de impresso, quero manter em mente a questo de
preo\qualidade apesar deste fornecedor complicar uma ac-
o to simples como trocar o filamento sendo que o consu-
Impressoras para iniciantes midor impedido de comprar filamento mais acessvel eco-
nomicamente tendo que o comprar mesmo empresa-me,
este um ponto que j d que pensar duas vezes quando
Da Vinci Jr. 1.0 chega a hora de adquirir este modelo.

Em concluso a esta anlise, pode-se dizer que esta


impressora se destina ao consumidor que pretende um equi-
pamento o mais econmico possvel, que no seja muito exi-
gente com o acabamento final da impresso e queira iniciar
uma experincia neste mundo da impresso 3D.

Printrbot Play 1505

Uma escolha acertada para quem procura uma im-


pressora o mais econmica possvel e sem necessitar de
qual quer tipo de montagem por parte do comprador, pois
vem calibrada de fbrica, sendo simplesmente plug and
play. Sendo da famlia das impressoras XYZ, a Da Vinci Jr.
1.0 devido sua relao preo\qualidade ganhou o prmio
2014 CES EDITORS CHOICE.

Esta pequena mquina tem a vantagem de ser com-


pletamente selada, evitando que durante a impresso ocor- Uma impressora minimalista no visual e na qual esta
ram movimentaes ou acessibilidades indesejadas por par- verso tem a estrutura em metal, sendo tal como a Da Vinci
te de crianas ou objectos. O seu pequeno LCD apesar de Jr. 1.0, uma impressora que vem montada de fabrica e no
bsico, consegue manter um formato decente de forma a ser necessita de qualquer tipo de montagem. Ao contrrio do que

59
No Code
IMPRESSORAS 3D ESCOLHE A TUA

aparenta, esta impressora no consta ser pesada pois gran- Contudo, este modelo oferece um interface tctil e
de parte alumnio e a sua parte inferior aberta permitindo contm como ferramenta de apoio com vdeos que colocam o
assim um acesso simples e fcil aos motores, electrnica e utilizador a realizar a sua primeira impresso em apenas
aos ps de borracha que impedem a mesma de deslizar so- 30min.
bre a mesa durante a impresso. Em comparao com os
Rostock Max v2
seus antecessores, este modelo contm um slot SD mais
acessvel e um apoio para o filamento no topo da estrutura.

Apesar de compacta, a estrutura contm tudo o que


necessita de forma organizada, tal como o seu extrusor e as
duas ventoinhas de arrefecimento, impedindo ainda que curi-
osos possam tocar em partes quentes ou rotativas deste
aparelho. Contudo esta proteco torna-se uma obstruo
caso seja necessrio aceder ao seu interior, tendo que des-
montar a estrutura exterior por completo.

As dimenses da Printrbot Play so reduzidas, te-


nho uma capacidade mxima de impresso de
100x100x130mm, realizando impresses rpidas sem ter de
sacrificar significativamente a qualidade de impresso, tendo
como nica desvantagem a produo de rudo acima da m-
dia.

Dremel 3D Idea Builder


Com um visual completamente diferente das impres-
soras analisadas at ao momento, a Rostock Max v2 oferece
excelentes impresses sem ter de elevar o seu preo. Para
alm do visual, esta impressora no vem montada de fbrica
mas o que pode ser um ponto a favor quando chega a hora
de substituir algum dos componentes.

As suas dimenses no so propriamente simpticas,


contudo, para os leitores que nunca tiveram a oportunidade
de ver este equipamento a trabalhar preparem-se pois fas-
cinante e invulgar. Ela imprime movimentando-se e deslizan-
do nas trs calhas para cima e para baixo. Cada calha con-
tm um brao que est ligado ao extrusor que se movimenta
consoante a movimentao desses mesmos braos. Com a
colocao do extrusor nesse local, o peso reduzido permi-
tindo que surja uma movimentao rpida durante a impres-
so por parte dos braos. Devido a esta estrutura todos os
componentes so de fcil acesso incluindo o interruptor e o
carto SD que est localizado lado a lado com o LCD.
Chegamos a um nvel a cima. Apesar de ter um preo
Assim sendo, esta impressora ser indicada para os
um pouco mais elevado que as duas impressoras anteriores,
principiantes mais destemidos, tendo que montar a mesma e
a Idea Builder contm uma qualidade bastante aceitvel.
calibr-la, o que de incio pode ser intimidativo mas uma ex-
Sendo completamente fechada pela sua estrutura com uma
celente forma de entender de forma mais aprofundada como
porta frontal, contm um software simples de utilizar mas que
uma impressora 3D funciona fornecendo assim uma boa ba-
infelizmente contm algumas falhas em aspectos fundamen-
se de conhecimento para um futuro Upgrade.
tais tais como a adio de material de suporte e exige tam-
bm a utilizao de filamentos vendidos pela empresa que As impressoras indicadas anteriormente so alguns
na sua maioria so translcidos e disponveis em apenas 10 dos modelos ideais para quem pretende iniciar esta vertente
cores. Para alm destes aspectos, esta impressora no tem de prototipagem/modelao tridimensional sem ter de gastar
uma base aquecida no sendo possvel imprimir filamento de valores elevados e montagens complicadas.
ABS.

60
No Code
IMPRESSORAS 3D ESCOLHE A TUA

Por ultimo deixo aos leitores, uma outra impressora ajuda, caso se entusiasmem e iniciem esta temtica.
3D, bastante conhecida no meio.

RepRap Pursa i3 Kit


A Impresso
3D tambm conhecida
como prototipagem r-
pida, uma forma de
tecnologia e fabricao
aditiva onde um mode-
lo tridimensional cria-
Com um visual simplista e minimalista a Pursa i3, foi
das primeiras impressoras 3D a ser amplamente conhecida,
do por sucessivas ca-
mais pelas comunidades de makers, uma vez que relativa-
mente simples de construir, bastante modular, e com um
madas de material.
design extremamente minimalista. Sendo open-hardware deu
origem a diversas impressoras, apesar de agora se encontrar
disponvel j montada e pronta a utilizar, bem como em kit de
Polmeros
peas, todos os desenhos e diagramas esto disponveis no
github. Um ponto a ter em ateno quando pensamos em
impressoras 3D, so os polmeros que estas so capazes de
No se pode dizer que seja uma impressora desti-
utilizar. Por exemplo os polmeros de PLA apesar de biode-
nada aos mais iniciantes, a menos que j venha pr-
gradveis e bastante acessveis, tm o mal de no oferece-
montada, sofre do pequeno mal de algumas peas serem
rem grande resistncia trmica, ficando moles, quando a
feitas numa impressora 3D, o que lhes limita o ciclo de vida,
temperatura aumenta. So baratos, com uma pegada ecol-
no entanto possvel substituir essas peas, por peas me-
gica reduzida, mas no os ideais para todos os usos e para
tlicas produzidas numa mquina CNC , o que lhe aumenta a
tarefas onde exigida uma maior durabilidade, como por
durabilidade.
exemplo a produo de uma frame de um quadcopter. Por
O outro grande ponto forte das impressoras tipo sua vez os polmeros de ABS, so claramente mais robustos,
Pursa i3, a grande disponibilidade de peas compatveis, o sendo um polmero muito usado na indstria das tecnologias,
que permite uma grande variedade de upgrades, existindo de foi inclusive usado em armas, como o caso da famosa M16,
tudo desde cabeas extrusoras a quente, para vrias dimen- utilizada pela primeira vez pelo exercito norte-americano na
ses e materiais, desde o ABS ao PLA, at polmeros metli- guerra do Vietnam, onde a primeira reaco ao uso de um
cos, passando por extrusoras a frio para outros polmeros e polmero plstico numa arma fez com que fosse dito que
materiais, at extrusoras de duas cabeas, painis electrni- esta coisa, vai-se desfazer em combate. Prova contrria
cos com as mais variadas formas e funcionalidades, passan- deu a histria provando que o ABS um polmero to fivel
do por toda panplia de hardware intermutvel. que neste momento empregue at na indstria aeroespaci-
al e de defesa. Existem diversas variantes do polmero de
No se trata de uma impressora propriamente acon-
ABS, entre elas algumas resistentes ao fogo, at aos 270c
selhada aos mais principiantes, mas uma boa opo para os
com uma resistncia tnsil de at 2440MPa e uma resistn-
entusiastas, tendo uma grande variedade de modelos para
cia de impacto de at 11HJ/m2, passando por polmeros de
os mais variados preos e sendo bastante modular, permitin-
carbono, nylon, e ABS transparente, (uma variante do pol-
do grandes melhoramentos ps aquisio.
mero de ABS), bastante usado na indstria da moda, pela
Aos nossos leitores que ainda no esto totalmente familiari- sua resistncia ao impacto de aproximadamente 17Kj/m2 e
zados com as impressoras 3D quero deixar uma pequena transparncia, que torna este material apelativo para esta

61
No Code
IMPRESSORAS 3D ESCOLHE A TUA

actividade. Concluso

Claro que todos estes materiais, com as suas especi- A impresso 3D, continua numa vertiginosa evoluo, quer
ficaes variadas, muitas vezes requerem capacidades de em termos de modelos de impressoras, cada vez mais bara-
impresso especificas, pelo que a finalidade de uma impres- tos e cada vez mais capazes, como tambm de polmeros
sora e os materiais que ela dever ser capaz de disponveis para utilizao na impresso 3D. Desde os pol-
imprimir, permanece interligada. meros biodegradveis e no muito resistentes, feitos base
de material orgnico, at aos polmeros mais resistentes co-
mo o caso do ABS (acrilonitrila butadieno estireno), ampla-
()a primeira im- mente conhecido pela sua elevada resistncia.

Ao longo do artigo apresentaram-se alguns modelos e suas


presso conhecida vantagens e desvantagens, havendo muito mais modelos
disponveis, desde modelos de nvel indstrial at modelos
ocorreu em meados de destinados aos makers, como o caso das famosas impresso-
ras da srie Pursa. No entanto saia completamente do mbito
1984, por Chuck Hull deste artigo uma explorao mais exaustiva de todos os mo-
delos de impressora e peas intermutveis opcionais dispon-
() veis, como o caso das extrusoras. Deixo aos leitores o desa-
fio de aprofundarem os vossos conhecimentos neste tema
caso seja do vosso interesse.

AUTOR
Escrito por Patrick Correia de Freitas

Tcnico de Design de Interiores e Exteriores, est a terminar a Licenciatura em Design de Interiores e Equipamento. Procura
desafiar-se diariamente na sua rea e nos seus hobbies. Desenvolveu desde os seus 10anos uma enorme paixo por Gam-
ming, na qual acabaria por se tornar um auto didacta na montagem dos seus prprios computadores de elevado desempenho
grfico. Tem um gosto particular por programas de modelao tridimensional de espaos interiores e equipamentos.

Designisnotjustwhatitlookslikeandfeelslike.Designishowitworks.(SteveJobs)

62
No Code

XAMARIN PARA DOCENTES E ESTUDANTES


Era uma vez , um grupo de programadores que pen- tendncias mobile atuais no desenvolvimento de software.
saram que deveria haver uma forma melhor de construir apli- Tornar-se um student partner traz muitos benefcios, incluin-
caes mobile. Assim foi criada a Xamarin: construir aplica- do acesso a treinamento de desenvolvimento mobile interati-
es utilizando uma linguagem moderna e evolutiva em C#, vo, ao vivo, coma Xamarin University, testes mobile com a
partilha de grandes quantidades de cdigo, construir aplica- Xamarin Test Cloud e muitos e bons recursos para ajudar na
es nativas e criar a melhore experincia do utilizador. Devi- organizao de Workshops.
do ao facto de ser possvel reutilizar as capacidades .NET j
existentes, a Xamarin torna rpido, fcil e divertido desenvol-
ver aplicaes mveis para iOS, Android e Windows.

O desenvolvimento mobile o mercado com o mais


O desenvolvimen-
acentuado ritmo de crescimento dos ltimos anos. O nmero
de dispositivos mveis em utilizao ultrapassa o nmero de to mobile o mercado
habitantes do nosso planeta. A cada hora surgem novas apli-
caes mveis para os mais diversos efeitos, desde coisas com o mais acentuado
simples como um bloco de notas a ouras mais complexas
que implementam tarefas cientficas e analises complexas de
negcio. Alm disso existe a crescente indstria do entreteni-
ritmo de crescimento
mento, onde surgem frequentemente novos jogos mobile.
Proporcionando experincias cada vez mais imersivas, cati-
dos ltimos anos. O
vantes e inovadoras,, utilizam desde realidade aumentada
at georreferenciao, reconhecimento de imagem entre nmero de dispositivos
outras tecnologias, proporcionando ao jogador uma mistura
da realidade com a realidade aumentada do jogo. Esta in- mveis em utilizao
dstria representa uma fatia de mercado gigantesca em ter-
mos de valor financeiro, estando acessvel a todos os progra- ultrapassa o nmero de
madores. Um simples jogo indie de plataformas pode trans-
formar-se no prximo grande xito dos videojogos. habitantes do nosso
A Xamarin no apenas permite criar aplicaes mveis mas
tambm auxilia a criao de jogos mobile. Frameworks co- planeta.
mo MonoGame, CocoSharp, WaveEngine, UrhoSharp, e
Xenko todas suporam Xamarin, tornam muito fcil criar jogos
em C#.
Os Xamarin Student Partners tm tudo o que preci-
Recentemente as ferramentas Xamarin foram disponi-
sam para comear a realizar eventos no imediato, incluin-
bilizadas no programa DreamSpark da Microsoft, colocando
do materiais para apresentaes e workshops.
os programadores a apenas alguns clicks de distncia de
construir a prxima grande aplicao ou jogo. Ao ser comple- Para educadores que queiram trazer o desenvolvi-
tamente grtis para estudantes, a Xamarin torna possvel mento mobile para as suas escolas ou universidades, podem
comear a construir aplicaes nativas iOS e Android no tambm faz-lo com o programa para educadores Xamarin,
imediato e gratuitamente. que auxilia os educadores a lecionarem cursos relacionados
com o desenvolvimento mobile. O programa para educado-
Paralelamente a esta iniciativa a Xamarin continua
res oferece as mesmas ferramentas de desenvolvimento dis-
com o programa Xamarin Student Partner, ao qual os estu-
ponveis para os estudantes, bem como materiais de ensino
dantes se podem candidatar atravs do formulrio disponvel
e horas de Xamarin Test Cloud, simplesmente alcanveis
na web, ajudando assim a espalhar o desenvolvimento mobi-
atravs do e-mail education@xamarin.com. Os Educadores
le nativo pelos Campus em todo o mundo, bem como a man-
que forem qualificados recebem tudo o que precisam para
terem-se prontos a trabalhar com o desenvolvimento de
comear a ensinar desenvolvimento mobile em C# com
aplicaes mobile em C# com eventos e workshops interati-
Xamarin e Visual Studio, incluindo subscries e acesso a
vos. Ao serem parte deste programa, os Student Partners
materiais de ensino.
ajudam as universidades a manterem-se atualizadas com as

63
No Code
XAMARIN PARA DOCENTES E ESTUDANTES
Uma das grandes vantagens para os educadores Os educadores , ao utilizarem Xamarin e ensinarem
recai no facto de que, ao no terem que ensinar um novo Xamarin aos seus educandos, esto a possibilitar uma apren-
paradigma de programao, podem usar o paradigma j en- dizagem de um conjunto extremamente til de capacidades e
sinado de programao orientada a objetos, de forma a pro- conhecimentos, proporcionando-lhes uma mais enriquecedo-
porcionar aos estudantes uma nova e imersiva experincia ra e completa educao. Desta forma preparam melhor os
no desenvolvimento cross-platform para plataformas mobile. estudantes para a sua vida futura enquanto profissionais de
Ao utilizarem a linguagem de programao C# e uma ferra- tecnologias de informao, seguindo assim a premissa base
menta que est em expanso, dotam os futuros profissionais das funes de um educador: formar as pessoas para um
das tecnologias de informao de um conjunto de capacida- mundo melhor.
des e valioso conhecimento, para emprego futuro, cativando
o seu interesse e mantendo alta motivao de aprendiza-
gem. A necessidade de programadores mobile continua
a crescer. Em 2013 existiam 2.3 milhes de programadores
mobile, sendo o seu salrio mdio de 71.432 USD, podendo
Uma das grandes
por vezes chegar aos 110.000 USD (Economic Journal).
vantagens para os edu-
cadores recai no facto
de que, ao no terem
que ensinar um novo
paradigma de progra-
mao, podem enqua-
Em concluso, o futuro da tecnologia passa inevitavelmen-
te pelo desenvolvimento mobile, observando as metodolo-
gias de Mobile First. Nos dias de hoje podemos considerar
drar estas ferramentas
os conhecimentos de desenvolvimento mobile o equivalente
a saber os comandos de uma shell para se programar um
e linguagem na matria
computador. A avidez da indstria por aplicaes mveis
multi-plataforma e por profissionais competentes nestas ma- de j ensinada de pro-
trias e com este tipo de skillset, cresce de dia para dia.

Xamarin mais que uma ferramenta. todo um conjunto de


gramao orientada a
ferramentas e servios que permitem o desenvolvimento de
aplicaes cross-platform, mantendo o look and feel nativo objectos()
de cada plataforma com uma base de cdigo comum. Ao
aprenderem Xamarin, os estudantes esto no s a acres-
centar uma mais valia a o seu skillset, mas tambm obtendo
capacidades e conhecimentos extremamente valorizados no Citando um dos famosos cientistas da Histria da hu-
mercado de trabalho, ganhando portfolio que podero apre- manidade, A melhor maneira de aprender ensinar - Ope-
sentar de futuro. nheimer.

AUTOR
Escrito por Antnio C. Santos

Com uma enorme paixo por tecnologia, autodidacta desde tenra idade, cresceu com o ZX Spectrum.
Tem vasta experincia em implementao e integrao de sistemas ERP, CRM, ERM, BI e desenvolvi-
mento de software por medida nas mais diversas linguagens. Diplomado do Curso de Especializao
Tecnolgica em Tecnologias e Programao de Sistemas de Informao pela ESTG-IPVC. 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 no curso de Licenciatura em Engenharia Informtica
e Xamarin Student Partner nesta mesma escola Twitter:@apocsantos

64
No Code

HIGH TECH FASHION


Roupa. Muitos de vs podem pensar que no tem Consultants, uma empresa londrina de engenheiros arquitet-
qualquer relevncia, algo que se veste, que na sua forma nicos, peas de vesturio que consistiam unicamente em
utilitria serve para proteger a nossa pele. Roupa apenas telas brancas. A partir destas telas e da tecnologia associada
roupa, no pode ter esse nvel de interesse, a menos que a elas, Chalayan e a B Consultants conseguiram projetar
seja para nos tornar, de certa forma, mais atraentes. aquilo que hoje o primeiro vestido com imagens. Esta pea,
de fundo branco, foi criada a partir de um programa de com-
Escrever um artigo sobre moda high tech numa re-
putador que permitiu aos designers elaborar uma gama de
vista em que o pblico alvo amante de tecnologia, talvez
perspetivas tridimensionais, e ento depois estas perspetivas
seja algo arriscado. Mas vamos imaginar que baseamos a
foram transferidas para seda e tecidos de algodo (tecidos
nossa escolha de roupa num algoritmo simples, daqueles
que so fortes condutores de energia), usando depois um
que aprendemos nas primeiras disciplinas de programao.
processo de impresso mecanizada. Ento, j te imaginaste
Se samos rua: agora a ir para o trabalho, carregares num simples boto e a
tua roupa projetar imagens? Penso que seria interessante,
Roupa_de_Rua == TRUE && Rou-
mas talvez ainda um pouco arcaico. Ainda proveniente das
pa_de_Casa==FALSE;
mos deste designer, surgem vrios vestidos que podem ser
Se ficamos em casa: acionados por controlo remoto. A partir da sua colaborao
com estes engenheiros arquitetnicos, Chalayan desenvolve
Roupa_de_Rua == FALSE && Rou- por fim vestidos que podem mudar a sua forma. Resumida-
pa_de_Casa==TRUE; mente, imaginando que vamos trabalhar com um vestido du-
Apostaria sem reservas que muitos dos leitores se viram rante o dia e que durante a noite temos um evento importante
neste pseudo-cdigo. ao qual temos de ir, simples. O vestido est projetado para
alterar a sua forma consoante a situao em que necess-
Mas e se, a roupa se mexesse? Ou se tivesse von- rio, o que lhe confere uma versatilidade nica. Mudar de ves-
tade prpria e mudasse, digamos, com apenas um boto? tido agora to simples como clicar num boto.
Loucura, certo? No, j no! Um pouco de inteligncia artifi-
cial talvez. Ainda um assunto pouco interessante? Um pouco
menos bsico, e na minha opinio, um trabalho de exceln-
A era da tecnologia veio sem dvida para ficar. Po- cia, STUDIO XO. Vestidos voadores? O STUDIO XO conse-
demos ver tecnologia em tudo o que fazemos hoje em dia, gue. Esta marca composta pela designer Nancy Tilbury,
convivemos com ela e provavelmente sem ela o mundo j diretora criativa da SXO, e por Benjamin Sales, diretor tecno-
no saberia como reagir a muitas situaes. Exemplos bem lgico da SXO. Situado em Londres, este estdio leva a mo-
conhecidos so os smartwatches que se tornaram gadgets da mais alm. Estes criativos no pensam apenas no funcio-
bastante apetecveis. Mas voltemos caro leitor, ao assunto nal ou no esttico que de facto deve existir na roupa, mas
principal, a roupa. Desde h milnios que os costureiros, os pensam sim na roupa como uma segunda camada de pele
designers e todo o tipo de engenheiros tentam que esta rou- os seus estudos so maioritariamente focados no que a rou-
pa que nos acompanha diariamente tenha algo de diferente, pa deve servir, ao ser humano, mas tambm tecnologia. Ao
algo que nos distanciei uns dos outros e nos adicione perso- logo dos anos foram criando vrios tipos de materiais e at
nalidade. Atualmente, o que precisamos mesmo de uma minsculos filamentos e partculas que desenham a roupa no
ligao internet e de algo que interaja connosco, algo que nosso corpo, dando-nos a sensao de liberdade que por
nos faa sentir na nossa pele. H alguns meses, em con- vezes tanto queremos que aquelas calas nos possam dar.
versa com uma simptica rapariga informtica, ela pergunta- Mas, calas? No, isso algo que no existe no dicionrio da
va-me achas que tens algum conselho de moda para mim? STUDIO XO. A primeira pea com impacto que Nancy criou,
s vezes sei que me devia vestir melhor, mas Gostava de em conjunto com a TechHaus, foi um vestido chamado
algo que se parecesse comigo, eu gosto de tecnologia. Hoje Anemone 2.0, um vestido branco impresso em impressora
tenho a resposta para ti. 3D, totalmente em forma de bolha, mas o que lhe conferiu o
Comecemos pelo mais bsico, Hussein Chalayan. seu sucesso, foi ser um dos maiores vestidos at atualida-
Decorria o ano de 2000 quando este designer de moda turco de impressos em 3D, as maiores impressoras 3D do mundo.
teve a ideia mais brilhante da sua carreira, o que lhe valeu A criatividade da STUDIO XO continuou em larga escala,
tambm variados prmios, e claro, um estupendo reconheci- apresentando-nos depois a Bubelle o vestido que muda
mento mundial. Chalayan desenvolveu em conjunto com a B de cor consoante o humor de quem o emprega. Mais interes-

65
No Code
HIGH TECH FASHION

sante? O vestido tem uma forma redonda, tambm sido este temos sensao de conforto quando queremos danar ou
impresso. E como se junta a tecnologia de ponta a isto? Ben- abraar uma pessoa que nos querida, automaticamente o
jamin Males o criativo de servio nesse setor - o que Nancy vestido desativa os mecanismos de defesa e deixa que a
desenha, Benjamin consegue dar vida, o que faz desta par- outra pessoa esteja perto de ns. A moda aliada a ns, a
ceria uma das mais ricas em todo o mundo da moda. Todos algo to sensvel como a nossa mente.
estes hbridos no passaram despercebidos aos olhos da
Ento, achas que j tens roupa de trabalho?
rainha do excntrico, Lady Gaga. Sendo a TechHaus uma
diviso tcnica da to aclamada House of Gaga, e em con-
junto com a STUDIO XO, foi criado especialmente para Lady
Links onde se podem ver os vestidos a interagir:
Gaga um vestido que voa Volantis. Este vestido, feito em
fibra de carbono e movido por seis grandes tubos de bateri- Hussein Chalayan - https://www.youtube.com/watch?
as, sendo todo ele ecolgico (ao estilo do to conhecido dro- v=Ae81FcczsI8
ne voador) e aqui que os detalhes se tornam fundamen-
STUDIO XO - https://www.youtube.com/watch?
tais, pois se o vestido no fosse construdo em fibra de car-
v=ZVtURELhy1w
bono, nunca levantaria do cho. Admitamos algo que esta
equipa tem de maravilhoso um extremo conhecimento tc- Anouk Wipprecht - https://www.youtube.com/watch?
nico. Ainda assim, e se estiveres na rua e por acaso algum v=D40n_oZW5Ig
decidir que te vai atacar?

Tambm existe uma resposta para isso! Devo dizer


Fotos dos vestidos:
que sempre adorei o filme Robocop, mas a ideia de real-
mente trazer o seu equipamento vestido, nem sempre ser a HUSSEIN CHALAYAN
mais indicada para um dia de trabalho. Mas, e se existisse
um vestido que de facto um robot, mas com uma bonita
aparncia, e que alem disso, pode proteger-nos? Foi exata-
mente nisto que a designer Anouk Wipprecht pensou em
conjunto com a Intel. Sim, a Intel faz roupa. Robotic Spider
Dress Powered By Intel Smart Wearable Technology, as-
sim que devemos procurar esta magnfica criao. Esta pea
foi desenvolvida pela designer Anouk em conjunto com o
arquiteto Philip H. Wilck (Estdio Palermo) e com o grupo
New Devices da Intel. Sim, da Intel. Eis uma palavra que os
informticos e entusiastas da tecnologia conhecem bem. A
intel aliou-se a este projecto, e o vestido dono de um m-
dulo Intel Edison, o que permitiu avanar o projecto para uma
verso mais madura, assim como um melhor apuramento a
nvel da mecatrnica e extra-sensorial. O objetivo principal
era fundir a moda com a tecnologia e foi conseguido! um
vestido totalmente impresso em impressora 3D, adornado
com um colar de pernas de aranha robticas e que consegue
ler pensamentos. algo que provoca no ser humano um
certo desdm, algo que consiga saber exatamente os seus
pensamentos, mas neste caso, torna-se uma pea aliada
sobrevivncia. O Robotic Spider atua como uma interface
entre o corpo humano e o mundo ao seu redor composto
por membros animatrnicos, usando sinais biomtricos sem
fios e as suas pernas movem-se atravs de sensores tecno-
lgicos, o que lhe permite ser autnomo e aos mesmo tempo
adaptvel s emoes e desejos do seu portador. Este vesti-
do capaz de identificar 12 estados de comportamento hu-
mano, o que o faz ser agressivo ou sensvel. Digamos que
estamos numa festa e somos abordadas por algum que no
nos inspira confiana imediatamente o Robotic Spider pro-
cessa isso e movimenta o seu colar de pernas num sistema
de proteger o seu hspede. O mesmo acontece quando

66
No Code
HIGH TECH FASHION

STUDIO XO

Bubelle Dress

Robotic Spider Dress

Volantis Flying Dress

ANOUK WIPPRECHT

Poder sem sabe-


doria energia desper-
diada (KAMILAH WIL-
LACY )

AUTOR
Escrito por Filipa Antunes Peres.

Licenciada em Design de Moda e Txtil e Ps-graduada em Marketing. Desde pequena que desenvolveu um forte sentido
para tudo o que tenha a ver com Design.

67
No Code

PROJECTO EM DESTAQUE NA COMUNIDADE P@P: PORTUGOL +
programa e as semelhanas entre a linguagem de
Este projecto um interpretador de uma linguagem
programao e a lngua portuguesa.
de programao bastante simples, com uma sintaxe
semelhante ao portugus, que permite uma fcil
/*
aprendizagem de algoritmia e programao. Funo recursiva de calculo do factorial de um
nmero
De entre as muitas funcionalidades j > parametro[real] : n
implementadas, destacam-se as seguintes: valor do qual o factorial ir ser calculado

- comentrios em linha > retorna[real]


o factorial do parmetro da funo
*/
// comentrio
factorial : funo(real n) retorna real
- criao de variveis com os tipos de dados : booleano, // termo de paragem da funo recursiva
inteiro, real, texto // - se o factorial for menor ou igual a 1 en-
to o valor do factorial 1
var1 : boolean se n <= 1 ento
var1 : inteiro retorna 1
var1 : real fim de se
var1 : texto <- "HappyHippyHippo : "
// retornar a multiplicao do valor base do
factorial com o resultado do calculo
- estruturas de controlo : se, para, enquanto // do factorial desse valor base menos 1
//
var1 <- inteiro // n! = n * (n - 1)!
para var de 10 at 1 ento retorna n * factorial(n - 1)
se var1 > 5 ento fim de funo
var1 <- var1 + 2 * var
seno
var1 <- var1 + var Pela simplicidade e pelo roadmap ambicioso,
fim de se iniciativa e empenho, este projecto merece-nos a ateno!
fim de para Porque tal como dizia um velho publicitrio o que nacional
- importao de ficheiros extra com cdigo bom, este projecto nacional, um bom projecto e nesta
edio, ganha o nosso destaque!
importar "codigo.portugol" Cdigo fonte: https://github.com/HappyHippyHippo/portugol
Download executvel:
No exemplo seguinte, da autoria do criador do https://dl.dropboxusercontent.com/u/12899799/portugol/portu
Portugol+ pode ver-se uma funo recursiva do clculo do gol.zip
factorial de um nmero. de observar a simplicidade do

68
Elege o melhor artigo desta edio
Revista PROGRAMAR
http://bit.do/ProgramarED51_V
Veja tambm as edies anteriores da

www.revista-programar.info
Revista PROGRAMAR

48 Edio - Maro 2015 45 Edio - Maio 2014

e muito mais em
49 Edio - Junho 2015 46 Edio - Setenmbro 2014
50 Edio - Setembro 2015 47 Edio - Dezembro 2014

Você também pode gostar